我有一个 500GB 外部硬盘,我需要挽救其中的内容。不幸的是我只有两个 400GB 的分区来保存内容。我可以将磁盘映像拆分为:
~$ cd /mnt/part1/Recovery/
/mnt/part1/Recovery/$ ddrescue -f -n -i0 -s250...00 /dev/disk disk.part1.ddraw disk.part1.log
/mnt/part1/Recovery/$ cd /mnt/part2/Recovery/
/mnt/part2/Recovery/$ ddrescue -f -n -i250...00 /dev/disk disk.part2.ddraw disk.part2.log
(为了方便起见,数字值缺少几个零)。也就是说,我可以使用-i
和-s
标志手动将磁盘映像分成两部分吗?
其次,有没有办法可以将图像的两个部分安装为一个?
答案1
回答你问题的第二部分。如何挂载存储在两个文件(a
和b
)中的 FS 我能想到的两个选项:
使用设备映射器和循环设备:
losetup /dev/loop1 a
losetup /dev/loop2 b
s() { blockdev --getsize "$1"; }
dmsetup create merge << EOF
0 $(s /dev/loop1) linear /dev/loop1 0
$(s /dev/loop1) $(s /dev/loop2) linear /dev/loop2 0
EOF
mount /dev/mapper/merge /mnt
这个想法是做一个线性设备映射器设备,它只是两个循环设备的串联。
使用 nbd 客户端 + nbd 服务器
ln -s a part.0
ln -s b part.1
nbd-server 127.1@12345 "$PWD/part" -m
nbd-client 127.1 12345 /dev/nbd0
mount /dev/nbd0 /mnt
(更容易但效率较低)
在这里,我们使用 nbd-server 的“多部分”模式,希望各部分被命名为part.0
, part.1
... 不幸的是,与 qemu-nbd 相反,nbd-server/client 无法使用 Unix 域套接字这意味着我们必须有 TCP 开销并且qemu-nbd
没有这样的多部分模式。