另一台设备上的分区表

另一台设备上的分区表

我很好奇是否可以将磁盘分区表存储在不同的设备上并从 grub 加载它

编辑: 假设我的磁盘格式如下: 磁盘有 3 个分区,末尾有约 12GB 未分配

通常加载后 mbr(磁盘1)启动时,系统只看到 3 个分区和未分配的空间

但我想知道是否有可能创造不同的场景。假设我有这个磁盘的数据表,如下所示:

磁盘有 3 个分区,开始时约 454GB 未分配 我想要做的是从另一个驱动器(该驱动器上也安装了 grub)加载这个替代分区表,而不是磁盘上的分区表(不替换它们)并从中启动操作系统。

答案1

那么您正试图将第二个操作系统隐藏到看似未分区的空间中吗?这不是一个非常安全的方法,例如testdisk在磁盘上运行将检测分区并提议将它们添加到真实的分区表中。我希望任何取证工具也能快速检测到“未分配的空间”中似乎有一些结构化内容。

但可以肯定的是,它可能会通过临时检查。

我不认为 GRUB 可以轻松做到这一点,但如果外部引导驱动器上也可以有内核和 initramfs 文件,那么您可以在 initramfs 中轻松完成此操作:创建一个映射表(基本上是名称 + 起始位置)块号 + 长度)对于隐藏分区,用于dmsetup create加载映射,然后将 initramfs 安装/dev/mapper/hidden_root为根文件系统,然后让引导基本正常进行,但如果需要,则安装/dev/mapper/hidden_other并用作/dev/mapper/hidden_swap交换分区。

要加载每个隐藏分区的映射,您可以运行如下命令:

dmsetup create <name> --table "0 <length in blocks> linear <disk major:minor> <first block #>"

<disk major:minor>是包含隐藏分区的磁盘设备的主设备号和次设备号,例如8:0/dev/sda。

如果您的第一个隐藏分区名为hidden_root,则映射它的命令将如下所示:

dmsetup create hidden_root --table "0 4236248 linear 8:0 952190894"

本质上这意味着:“从块#952190894开始映射磁盘/dev/sda的线性延伸,并将其呈现为/dev/mapper/hidden_​​root的块0..4236248。”

即使您可以让 GRUB 读取备用分区表,您也必须在 initramfs 中执行上述操作,因为 Linux 内核不会依赖于固件告诉它的内容,而是会自行读取分区表来查找任何分区。

相关内容