【可以沉了】请暂缓尝试11.04 alpha的grub2,有潜在的风险可能使你的ntfs分区报废
发表于 : 2011-03-07 14:14
【 2011.3.15: Fix 已经做出,将不日发布。这意味着 10.10 的用户将不会被升级到这个坏的 grub2 版本,日后的 11.04 beta 也不会有这个问题。这个问题只可能影响尝试 alpha 版 11.04 的白薯,因此已经不适合在此置顶。版主动手吧:) 】
长话短说,某些 windows 下的软件(比如 adobe 的一些商业软件)使用一种反盗版技术,第一次试用安装时会悄悄地在 mbr 和第一主分区之间的微小空隙(embedding area)里留下印记,目的是使你不能通过卸载再重装软件,甚至格式化再重装整个系统和软件,来得到第二个试用期。这个小小的空隙,也是 grub 引导代码所在的位置,在 grub Legacy,叫做 stage 1.5,在 grub2,叫做 core image。这些在 grub Legacy 时代就存在的 windows 软件会避开stage 1.5,在 stage 1.5 之后,第一主分区之前留下反盗版标记,但是 grub2 出来之后,core image 比较大,会和这些标记争夺扇区,出现这样的问题:安装好 linux 后一旦启动进入 windows 一次,这些软件就会破坏 grub2,linux 就不再能够启动。
意识到这个问题后,11.04 alpha 的 grub2 做了这样的改动:一旦侦测到这些标记,就主动避让,把自己往后挪。但是由于某种失误,这个匆匆发布的更新可能导致更大的问题:core image 可能会越过边界,写入 sda1 的启动扇区,如果 sda1 是 ntfs,这个分区就变得无法识别更不能启动。(如果是其它文件系统可能没有问题,ext 等 linux 文件系统的开始若干个扇区本来就是留空不用的。)
这个 bug 已经得到确认: https://bugs.launchpad.net/ubuntu/+sour ... bug/730225
如果你正在使用或曾经安装过这类 windows 软件(反安装和格式化并不能清除它留下的印记),请暂缓升级 grub2,尝试 11.04 alpha 的时候避免安装 grub2,直到这个 bug 被去除为止。
如果你已经中招,通过重写 ntfs 分区的启动扇区可以恢复它。在 windows 光盘引导出的环境里,有一些熟知的工具可以做到,比如 bootrec /fixboot,bootsect /nt52 或 bootsect /nt60 之类。如果无法得到一个 windows 环境,在 linux 下也可以用危险命令 dd 来恢复,下面链接的 linux 部分,如果你看不明白,不建议尝试:
http://www.linux-wiki.cn/wiki/修复被grub覆盖的ntfs分区引导扇区
重写启动扇区后,建议在 windows 里 chkdsk,因为被 grub 覆盖的扇区不止启动扇区一个。
另外请中招的朋友提供你们的样本,即使你已经重装了 windows,这个样本依旧有效。这可以帮助我们了解有哪些 windows 软件会导致这个问题,和其他一些有用的细节。
运行
sudo dd if=/dev/sda of=embedding.area bs=512 count=64
把 embedding.area 贴在这里。论坛对附件的扩展名有限制,可能要先压缩成 zip。谢谢你们的样本!
请版主帮忙置顶,直到臭虫解决。
长话短说,某些 windows 下的软件(比如 adobe 的一些商业软件)使用一种反盗版技术,第一次试用安装时会悄悄地在 mbr 和第一主分区之间的微小空隙(embedding area)里留下印记,目的是使你不能通过卸载再重装软件,甚至格式化再重装整个系统和软件,来得到第二个试用期。这个小小的空隙,也是 grub 引导代码所在的位置,在 grub Legacy,叫做 stage 1.5,在 grub2,叫做 core image。这些在 grub Legacy 时代就存在的 windows 软件会避开stage 1.5,在 stage 1.5 之后,第一主分区之前留下反盗版标记,但是 grub2 出来之后,core image 比较大,会和这些标记争夺扇区,出现这样的问题:安装好 linux 后一旦启动进入 windows 一次,这些软件就会破坏 grub2,linux 就不再能够启动。
意识到这个问题后,11.04 alpha 的 grub2 做了这样的改动:一旦侦测到这些标记,就主动避让,把自己往后挪。但是由于某种失误,这个匆匆发布的更新可能导致更大的问题:core image 可能会越过边界,写入 sda1 的启动扇区,如果 sda1 是 ntfs,这个分区就变得无法识别更不能启动。(如果是其它文件系统可能没有问题,ext 等 linux 文件系统的开始若干个扇区本来就是留空不用的。)
这个 bug 已经得到确认: https://bugs.launchpad.net/ubuntu/+sour ... bug/730225
如果你正在使用或曾经安装过这类 windows 软件(反安装和格式化并不能清除它留下的印记),请暂缓升级 grub2,尝试 11.04 alpha 的时候避免安装 grub2,直到这个 bug 被去除为止。
如果你已经中招,通过重写 ntfs 分区的启动扇区可以恢复它。在 windows 光盘引导出的环境里,有一些熟知的工具可以做到,比如 bootrec /fixboot,bootsect /nt52 或 bootsect /nt60 之类。如果无法得到一个 windows 环境,在 linux 下也可以用危险命令 dd 来恢复,下面链接的 linux 部分,如果你看不明白,不建议尝试:
http://www.linux-wiki.cn/wiki/修复被grub覆盖的ntfs分区引导扇区
重写启动扇区后,建议在 windows 里 chkdsk,因为被 grub 覆盖的扇区不止启动扇区一个。
另外请中招的朋友提供你们的样本,即使你已经重装了 windows,这个样本依旧有效。这可以帮助我们了解有哪些 windows 软件会导致这个问题,和其他一些有用的细节。
运行
sudo dd if=/dev/sda of=embedding.area bs=512 count=64
把 embedding.area 贴在这里。论坛对附件的扩展名有限制,可能要先压缩成 zip。谢谢你们的样本!
请版主帮忙置顶,直到臭虫解决。