使用 losetup 和 dd 使文件系统映像准备好部署

使用 losetup 和 dd 使文件系统映像准备好部署

介绍

使用 dd,可以轻松备份磁盘的 MBR 和分区表。操作非常简单:dd if=/dev/disk2 of=~/Desktop/disk2_mbr bs=512 count=1

还可以备份整个分区:dd if=/dev/disk2s1 of=~/Desktop/disk2_partition1

反过来也行得通:使用dd if=~/Desktop/disk2_mbr of=/dev/disk3,可以替换另一个磁盘的 MBR 和分区表(注意,磁盘 3 上的数据丢失)。

然后,要恢复第一个分区,请执行以下操作:dd if=~/Desktop/disk2_partition1 of=/dev/disk3s1

(分别设置 MBR 和分区的意义dd在于您不需要dd整个磁盘;如果您的分区很小,速度会更快。)

很好,所有这些 dd 魔法对我来说都很棒。它使从任何系统、任何硬盘进行备份和恢复变得如此简单。

循环设备

虚拟系统图像创建也很好用。

要创建一个新的、空的媒体映像(30 GB),可以执行以下操作:dd if=/dev/zero of=/my-media-image bs=1k count=30240000

然后,将媒体分配给环回设备:losetup /dev/loop0 /my-media-image

要在媒体图像上创建文件系统,请执行以下操作:sudo mkfs -t ext3 -L MYVIRTUALFS -M /media/MYVIRTUALFS -I 128 -m 0 -b 4096 -O sparse_super -T largefile4 /dev/loop0

然后可以安装媒体:sudo mkdir /media/MYVIRTUALFS && mount /dev/loop0 /media/MYVIRTUALFS

问题

我不明白的是,如果我卸载磁盘(sudo umount /media/MYVIRTUALFS),然后删除环回设备(sudo losetup -d /dev/loop0),我会认为原始媒体(/my-media-image)与 dd 克隆完全相同/dev/loop0

显然不是,因为如果我这么做dd if=/my-media-image of=/dev/disk4注意,磁盘4 上的数据丢失), disk4 已损坏,无法安装。

为什么?

它使得从 Linux 机器创建虚拟文件系统成为可能,包括分区表、数据等...然后只需将媒体映像(/my-media-image在我的示例中)复制到另一个系统(在我的例子中是 Macintosh),即可将其部署到真实硬盘上。它甚至可以在具有 GUI 的 Windows 上运行dd

我错过了什么?

答案1

正如 killermist 提到的,错误在于我忘记在创建文件系统之前创建分区。问题中的说明是正确的,并且创建了完全有效的磁盘映像,只需在安装循环设备之后、在其上创建文件系统之前创建分区即可。
因此正确的顺序是
losetup....
parted --script /dev/loop0 mktable msdos mkpart primary 2048s 100%
sudo mkfs...

相关内容