我有三个主/基本分区:
sda1
.Ubuntu 11.10 根驱动器(40 GB)sda2
.FreeBSD 根目录(20 GB)sda3
. Windows XP 根驱动器 (4 GB)
我有一个逻辑/扩展分区,sda4
大小为 234 GB,分为五个磁盘(sda6
~ 9
)。
主分区 #3 ( sda3
) 只有 4 GB 空间,这完全不够(我只需要 Windows 来运行 MS Office 和一些奇怪的工程软件;所以我希望为其使用尽可能少但高效的空间)。
我可以将 Windows XP 安装到逻辑/扩展分区上的其中一个磁盘(sda6
~ 9
)上,而不会损坏分区表结构以及任何主分区和逻辑分区/磁盘吗?
Partitions structure: /dev/sda
/dev/sda1 ext4 / Oneiric-Ocelot 40G
/dev/sda2 ufs FreeBSD 20G
/dev/sda3 ntfs WinXP Pro 4G #This will be formatted 'ext4' & contents of '/Mix' will come here
/dev/sda4 extended 234G
/dev/sda5 ext4 /Docs Docs 34G
/dev/sda6 ext4 /Multimedia Multimedia 186G
/dev/sda7 unallocated 2MB
/dev/sda8 ext4 /Mix Mix 10G #Windows XP is to be installed here
/dev/sda9 linux-swap 04G
答案1
我还有另一件事要做,虽然更加复杂,但也能起作用。
首先对该方案提出警告:如果您只有一个 HDD,则可能无法按方案安装 Windows(我没有尝试过,我使用了以前的 Windows,它是通过使用 GParted 克隆 Windows 分区安装在 MBR 磁盘上的)。
我必须对自己施加影响(让事情变得非常复杂):
- BIOS 仅限 PC(无 U-EFI、无 EFI 分区等)且仅支持 32 位(不允许 64 位),这让事情变得非常困难
- 仅存在一个 HDD(与大多数笔记本电脑一样)且没有其他存储空间(无 USB 等)
- GPT 样式(不是 MBR)的 HDD,此处有警告,Windows 无法以本机模式从 GPT 启动(需要一个外部或虚拟 MBR 磁盘来启动)
- Grub2 作为主引导加载程序
- 多 Windows 32 位(家庭版),也使事情变得更加困难
- 隔离所有窗口,只是为了让事情变得更加复杂
- 主菜单选择必须使选定的 Windows 桌面出现(或至少是 Windows 登录,这取决于您如何配置 Windows)
- 100% 合法,因此无需从其他 Windows 版本复制任何文件等
注意:我让 XP 离开(不支持 GPT),只是为了让 Vista 达到 10。
启动方案是 BIOS 加载 Grub2,然后加载 memdisk,并挂载并链式加载 VHD 文件(每个 Windows 一个)。
该 VHD 必须是固定大小(只是为了允许 memdisk lo 在启动时循环挂载它),它是一个具有 MBR 方案(启动 Windows 所需)的虚拟 HDD,只有一个 NTFS 分区;VHD 本身存储在 NTFS GPT 分区上。此 VHD 文件执行 Windows 隔离,每个 Windows 都有自己的 BCD,它们不使用相同的 BCD,因此无需在启动时显示 Windows 启动菜单。
在该 VHD 中,分区仅用于 nt60 启动代码和 BCD 内容。我为此类 VHD 使用了 32MiB,但只剩下近 2MiB 的可用空间,因此最好不要使用较小的空间,或者不要放置所有本地 BCD 目录等。
为了使所有这些工作,您需要将 nt60 代码和 BCD 放在该 VHD 文件上,以便必须安装该 VHD 文件,这可以使用 diskpart 完成,也可以使用安装媒体完成。
我没有测试进行完整安装,理论上必须如此,如果在安装时安装该 VHD,并将 nt60 代码和 BCD 放在那里,则安装必须允许您继续(它可以看到 MBR 磁盘并认为它是用另一个 Windows 预先配置的)。
我尝试了很多 32 位 Windows Home 版本(从 Vista 到 10),它们都从 GPT 磁盘正确启动,因为它们在启动时都看到一个虚拟 MBR 磁盘,其中有启动 nt60 代码和 BCD。
现在我正在尝试不同的方法/测试:
- 与之前条件相同,但只有一个 MBR 磁盘,该磁盘只有一个占磁盘 100% 的扩展分区,因此根本没有主分区。
我知道,如果没有主分区,Windows 将无法启动,但我将再次使用一个技巧,即使用一个带有主 NTFS 分区的虚拟 MBR 磁盘,我将 nt60 启动代码和 BCD 内容放在其中;每个 Windows 一个。
从概念上讲,它也必须工作,因为 Grub2 可以从逻辑分区内部启动(以及大多数 Linux 等)。
我为什么要做这么复杂的事情?简单的答案可能是 100% 加密,每个窗口都有自己的密码,等等。
复杂答案:
- BitLocker 将密码发送到 M$ 和 NSA 服务器,并且还设有一个大后门,允许无需密码即可安装它们。
- TrueCrypt 和 VeraCrypt 不支持多窗口,也不支持隔离(它们使用一个共同的地方进行工作),因此只能保护一个窗口等;请记住仅限 BIOS 和 32 位 Windows 家庭版
- DiskCryptor 允许保护多个独立窗口,也允许保护 GPT 分区(仅限数据分区,没有系统分区)
- 我不信任任何不允许使用级联算法等的其他加密;我不信任不允许我看到源代码(他们试图隐藏什么?后门?等等)的加密。
因此,在 GPT 方案下,DiskCryptor 在启动时无法工作,我读了源代码,发现它没有在启动时挂载 GPT 分区的代码,因此找不到 :\Windows\System32\Winload.exe,因此 Windows 无法启动。在下载源代码之前,我用两个物理硬盘进行了测试,我快要疯了,所以我决定下载源代码,因为我发现在启动时缺少 GPT 挂载的源代码。
由于 DiskCryptor 可以在启动时自动挂载多个 MBR 分区(所有使用相同密码的分区都将被挂载),现在我正在尝试 100% 扩展分区方式。
为什么不放置一个物理主分区并在那里存储 nt60 启动代码和 BCD 内容?这样,所有窗口都可以在本机模式下安装和启动,不需要任何额外的东西;但它们不会 100% 隔离,它们将共享该分区,因此如果其中一个严重触碰它,则可能发生没有人会启动,并且再次加密 100% 的磁盘(所有分区,不是引导扇区,不是分区表等)。在隔离模式下是不可能的,在启动时必须对所有窗口使用至少一个密码。
想象一个真实的场景:
- 多用户,每个用户使用自己的 Windows,因此他们所做的一切都是在自己的 Windows 上进行的
- 如果一个用户的窗口崩溃,其他用户不会受到影响
- 每个用户都可以拥有自己的应用程序,也可以拥有需要管理权限的应用程序等
- 通过隔离加密,他们无法读取其他用户的内容。
最好的方法是每个人都使用一个外部 SATA 磁盘(看起来就像是内部磁盘),随身携带。
但我希望它是内部的,等等。
真正的动机是我喜欢做困难的、复杂的、尚未完成的事情;我喜欢测试自己的技能,这也是一种学习很多东西的方法。
希望你们的思想现在能够更加开放,接受其他启动 Windows 的方法。
PD:使用 Linux,这些事情会变得容易得多,而 Windows 会让事情变得比需要的要困难得多(nt60 代码加载 bootmgr,它对仅 MBR 主活动分区进行硬编码搜索,它将尝试读取 winload.exe,等等)。
答案2
Windows 不仅可以安装在主分区上,还可以安装在逻辑分区上。是的,安装在逻辑分区上的 Windows 的引导程序不会运行,但它仍然可以由主分区上的操作系统的引导程序引导。
这适用于想要在逻辑分区上安装 Windows 且主分区上预装了其他版本的 Windows 的用户。这是通过软件完成的易BCD。
答案3
如果您在同一硬盘上已有空闲的 NTFS 主分区,则可以在扩展/逻辑分区上安装 Windows。Windows 安装程序将在所选的扩展分区上安装操作系统,但需要 NTFS 主分区来安装引导加载程序。
安装 Windows 后,您可以根据需要删除备用 NTFS 主分区。但随后您必须将 BCD 引导加载程序安装到安装 Windows 的逻辑分区。bcdboot
在引导到 Windows 恢复命令提示符后使用(使用 Windows 安装 CD)。根据您的情况替换驱动器号,然后运行以下命令...
bcdboot i:\windows /s i:
其中 i:是启动 CD 分配给已安装 Windows 的分区的驱动器号。使用 Windows diskpart 命令可找出分配给哪个卷的驱动器号。
现在您必须配置 GRUB2 以直接从此分区启动。启动 Ubuntu 并运行以下命令...
sudo update-grub
GRUB2 菜单现在应该将 Windows 列为选项。
注意:如果您的机器上安装了多个版本的 Windows,那么您应该考虑在 grub.cfg 文件中使用 GRUB2 parttool 命令在启动时隐藏其他操作系统的分区。
parttool (hd0,2) hidden- # Unhide the partition for current OS
parttool (hd0,3) hidden+ # Hide the partition for the other OS