我正在尝试使用 Qemu + OVMF + CLOVER + FV2 从我的物理磁盘启动我的 OSX 安装(我这里有一个 PS/2 驱动程序 https://bitbucket.org/timmycook/virtioinputdxe对于 VmWare FileVault (FV2),但我需要隐藏磁盘上的一些分区。我可以将引导加载程序放在不同的驱动器上,但隐藏其他分区的一种方法似乎是使用线性 raid,如此处所述https://wiki.archlinux.org/index.php/QEMU。
那篇文章介绍了MBR,但是当磁盘末尾有分区信息时,如何生成GUID分区表呢?
给定以下分区表:
Main partition table begins at sector 2 and ends at sector 3
First usable sector is 4, last usable sector is 242187496
Partitions will be aligned on 4-sector boundaries
Total free space is 64 sectors (32.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 68 65535 32.0 MiB EF00 EFI System
2 65536 8454143 4.0 GiB 8300 Linux filesystem
3 8454144 90765255 39.2 GiB 0700 Microsoft basic data
4 90765256 174554311 40.0 GiB AF0A Apple APFS
5 174554312 242187496 32.3 GiB 0700 Microsoft basic data
如何生成仅包含分区 4 的线性 md 驱动器?我无法使用 Fallocate 创建临时分区,因为任何分区上都没有足够的空间来执行此操作。
答案1
上述文章主要描述了如何创建一个虚拟设备,将 16K 附加到另一个现有设备上。如果你想添加一个 GPT 分区表,那么你应该在前面多一点,比如 1M,并且还附加一些东西:
dd if=/dev/zero of=/path/to/prepend bs=1M count=1
dd if=/dev/zero of=/path/to/append bs=1M count=1
losetup -f /path/to/prepend
losetup -f /path/to/append
# now we map 3 devices together
mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=3 /dev/loop0 /dev/sdX4 /dev/loop1
现在您可以gdisk
在 /dev/md0 上创建一个 GPT 分区,该分区从 1M 开始,长度至少为 41894528K ((174554312-90765256)/2)。
当心!如果您计算错误,那么gdisk
不仅可能会在前置和附加空间上创建分区表,还会破坏 OSX 磁盘的某些数据。因此,为了进行测试,我将创建一个只读循环设备:
losetup --只读-f /dev/sdX4
...并使用这个而不是/dev/sdX4
第一个 mdadm 命令来创建 GPT 表并安装引导加载程序。