我希望 Truecrypt 像往常一样要求输入 Windows XP 密码,但使用标准 [ESC] 选项,在选择该选项时,即通过 Esc 键,我希望它找到用于(未加密的)Ubuntu 安装的 grub。
我在东芝 NB100 上网本的 120Gb 硬盘上安装了 Windows XP,然后进行了分区以便为 Ubuntu 10.04 腾出空间,并在安装 Windows XP 之后安装了它。
当我加密 Windows XP 时,我相信 Truecrypt 会覆盖主引导记录 (MBR) 中的 grub 条目 (?),并且我将无法再在 XP 和 Ubuntu 之间进行选择。所以我需要将其恢复。
我在 Ubuntu 论坛和其他地方搜索了相当多的答案,但尚未找到涵盖所有可能性、场景和错误消息的完整答案,或者他们谈论的是旧版 GRUB 而不是 GRUB2。Ubuntu 10.04 使用 GRUB2。
我的设置:
分区:
- Windows XP,NTFS(使用 Truecrypt 加密),40Gb
- /boot(Ext4,1Gb)
- Ubuntu 交换,4Gb
- Ubuntu /(根)- 主文件系统(20gb)
- NTFS 共享,55Gb
我知道 Truecrypt 引导加载程序在启动时会取代 GRUB,因为我已经在另一台笔记本电脑上尝试过。
我希望引导加载程序屏幕看起来像平常一样:
Truecrypt
输入密码:
(或 [ESC] 跳过)
密码是 WindowsXP 的,然后按 [ESC] 键,它会找到要启动的 Ubuntu grub
在此先感谢您的帮助。
问题的关键在于按下 Esc 键时如何指示 Truecrypt,以及按下 esc 键时如何让 Truecrypt 引导加载程序看到 Grub/Ubuntu 并找到它。也称为链接。
答案1
这很简单。对磁盘进行分区,安装 Windows 和 Ubuntu。在 Windows 分区上使用 TrueCrypt,它将加密 Windows,但不会加密 Ubuntu。
然后你会发现你可能只能启动 Windows,然后通过 TrueCrypt 引导加载程序。听起来你已经到了那里。
假设您的磁盘是sda
,并且 Windowssda1
和 Linux 都处于开启状态sda2
(这只是假设,您的磁盘似乎不是sda2
)。TrueCrypt 将会安装到 MBR 上sda
并覆盖 GRUB。
使用 Ubuntu 发行版 CD 启动 Live CD,然后 chroot 进入预安装的系统。如下所示:
sudo su -
mkdir -p /mnt/ubuntu
mount /dev/sda2 /mnt/ubuntu
mount --bind /proc /mnt/ubuntu/proc
mount --bind /dev /mnt/ubuntu/dev
chroot /mnt/ubuntu
然后安装 GRUB 引导加载程序,但要安装sda2
,而不是sda
。
grub-install /dev/sda2 --force
然后,当您重新启动时,您仍然会看到 TrueCrypt 加载程序要求您输入密码才能启动sda
->sda1
进入 Windows。但是当您按 ESCAPE 时,您将获得绕过并直接启动进入 Linux 的选项,但sda2
不是来自 MBR。
可是等等
在执行此操作之前,请注意:如果您操作grub-install
错误并覆盖了sda
MBR,或者您执行了内核升级,从而触发 GRUB 覆盖了 MBR,则您会发现需要重新安装 TrueCrypt 引导加载程序才能重新进入 Windows。如果您没有做好准备,这将是一个巨大的麻烦。
我建议你在摆弄 GRUB 之前,先从 Linux 内部备份 TrueCrypt 引导加载程序。这样,当你破解 TrueCrypt 并且只能进入 Linux 时,你可以轻松地将其写回。
备份您的 TrueCrypt 引导加载程序:
dd if=/dev/sda of=~/truecrypt.mbr count=1 bs=512
dd if=/dev/sda of=~/truecrypt.backup count=8 bs=32256 # Just in case
恢复你的 TrueCrypt 引导加载程序(我称之为restore-truecrypt.sh
):
sudo dd if=~/truecrypt.mbr of=/dev/sda count=1 bs=512
sudo dd if=~/truecrypt.backup of=/dev/sda count=8 bs=32256
sudo grub-install /dev/sda2 --force
我在小的 shell 脚本中保存了这两组命令,并将它们放在手边。当我不小心破坏了引导加载程序(这种情况经常发生)时,我不想在 Google 上搜索命令或阅读man
。
哦,还有关于兼容性的说明。当我写“GRUB”时,我指的是 GRUB 1 或 2。就我个人而言,我使用的是 10.04 和 Windows 7 上的 GRUB 2...但它在旧版本的 GRUB、Windows 和 Linux 上也能很好地运行。
答案2
我将接受这个问题的答案是我自己的。这个答案就是接受我不能这样做,我将接受以下替代方案之一:
使用在 Windows XP(加密的系统驱动器分区)主机 Ubuntu 中运行的虚拟化/VMware 应用程序,例如 VirtualBox、VMWare 或 Parallels。因此,我必须启动到 Windows,然后运行此应用程序并从其中启动到 Ubuntu。一些评论者列出了这种方法的缺点之一,即您必须启动两次(首先是 XP,然后是 Ubuntu)才能进入 Ubuntu。但是,我认为它实际上比普通的 BIOS 启动双启动有一个优势,因为您实际上可以同时运行两个操作系统。例如,如果您想在多个平台上快速测试应用程序或网页,这非常有用。
为 Ubuntu 使用辅助硬盘或 SD 卡(例如 8gb、16Gb)并从 BIOS(一次性)启动中选择从其启动 Ubuntu。
*不能 = 意思是我已经花了足够多的时间(3 天里花了大约 6 个小时,离开后头脑清醒了,搜索了论坛后又精神焕发了),不准备再花更多时间了。所以我不能被指责为懒惰和依赖他人。不能 = 也意味着:不能眼下。我可能会再次回顾这一点。
以下是其他人可能认为有用的一些参考资料:
- http://ohioloco.ubuntuforums.org/showthread.php?p=8610542(“使用 Truecrypt 6.3a 链式加载 Grub2 进行双重启动”)
- https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/484102 (“grub2(Ubuntu)中的 Bug #484102:“Grub2 无法正确链式加载 truecrypt 加载程序”)
- http://ubuntuforums.org/showthread.php?t=1229541&page=3(“使用 GRUB2 链式加载 TrueCrypt”)
- http://post.ryanoshea.com/howto-dual-boot-system-encryption-windows-ubu(“操作方法:加密双启动系统 (Windows 和 Ubuntu)”)
- http://ubuntuforums.org/showthread.php?t=689579&page=2(“结合 TrueCrypt 引导程序和 GRUB?”)
以上所有内容都提供了一些见解,但并没有提供涵盖所有可能发生的情况或 grub 版本的明确完整答案。
我在超级用户、ubuntuforums 和 truecrypt 论坛上发布了同样的问题:
- http://ubuntuforums.org/showthread.php?p=9755416#post9755416
- http://forums.truecrypt.org/viewtopic.php?p=86161#86161
我这样做的理由是这些论坛的读者不一定会阅读其他论坛,虽然内容会有一些重叠,但可能会遗漏一些重要的建议。
背景想法和学习(如果感兴趣的话!)
事实上,我很高兴地说,我结束了一天的工作,转而考虑了替代方案,尽管我确实让它占了上风,并继续努力争取胜利并解决我的答案。但接受这不可能(轻易)完成并且有替代方案,让我松了一口气。现在我可以继续做更重要的事情了!我已经在桌面上双启动了 Windows 7 和 Ubuntu 10.04,没有加密 - 这是一个相当简单的过程。有了替代方案,我离我最初的答案并不远了。实际上,我现在在笔记本电脑上使用 Ubuntu 的次数不如 Windows 多,所以我不会那么想念它。我还有一台 MacBookPro,所以我绝不是 Windows 的粉丝,而不是其他操作系统的粉丝!
从另一个用户的角度来看,这就是为什么我希望使用 truecrypt 加密的 Windows 与 Ubuntu 双启动的原因:
“我有一台用于 Symbian 和 Web 开发的工作笔记本电脑。我需要能够启动 Vista 和 Linux。出于客户隐私考虑,为了防止笔记本电脑丢失,必须对两种操作系统进行加密。即使我不经常使用 Windows,其 Web 浏览器数据也可能包含客户系统的存储密码,如果意外泄露,后果将不堪设想。”
Grub2 比 grub 复杂得多,有些人可能会认为这必然如此。我在 Windows XP 上成功运行了 10.04 之前的 Ubuntu(GRUB 不是 GRUB2):
http://www.howtoforge.com/forums/showthread.php?p=184776#post184776
我说更复杂是因为现在有更多的设置文件,分布在更多目录中,并且它们之间有引用,有些现在是机器生成的,不建议编辑它们,例如启动菜单,有一种脚本语言需要学习,并且当发生更改时需要运行脚本解释器。目前对我来说太复杂了,而且它只用于启动操作系统,而不是发射火箭到月球!
答案3
我认为我刚刚非常顺利地解决了这个问题。我最初的情况如下:我有一台未加密的上网本(MSI U160),其中有一个 Windows 7 分区和一个 Ubuntu 10.10 分区(Ubuntu 的 grub2 位于 MBR 中)。
- 为了安装 Truecrypt,我必须将 Windows 7 重新安装到其原始分区中。
- 然后我安装了 truecrypt(加密整个 Windows 7 分区)
- 使用这些说明我从 USB 密钥重新安装了 Ubuntu,将 grub2 加载程序放到 Ubuntu 分区上
- 重启后,我得到了 TrueCrypt 引导加载程序。我按下 [ESC] 键,得到了可启动分区列表,包括 Linux 分区(它还显示了 Windows 分区,但由于该分区已加密,因此启动会失败)。
我希望这也是你想要的。
答案4
解决方案:也许将 truecrypt 引导程序复制到 IMG 文件中,以便由 grub 引导?或者也许使用 Grub4Dos 来加载 Ubuntu?