如何使用 DD 将一个分区(而不是整个磁盘)备份到外部硬盘上的另一个分区?
我通过以下命令实现了这一点:
sudo dd if=/dev/sda6 of=/dev/sdb3 bs=1M
但是我的要求是:
我需要将其备份
/dev/sda6
并存储为图像(.img
)文件/dev/sdb3
最好作为压缩(.gz)图像文件(这实际上就是我想要实现的)
(以下是我的愚蠢尝试,显然没有奏效:
sudo dd if=/dev/sda6 of=/dev/sdb3/backup.img bs=4096 conv=notrunc,noerror
sudo dd bs=1M if=/dev/sda6 | gzip -c > /dev/sdb3/backup.gz
答案1
除非/dev/sdb3
实际上已安装(我对此/dev/sdb3
表示怀疑,请对设备和挂载点进行一些研究),您需要:
- 找出
/dev/sdb3
的安装位置。使用mount
命令。假设/dev/sdb3
安装在 中/home
。 将您的文件写入该位置:
sudo dd if=/dev/sda6 of=/home/backup.img
完成后,验证 img 文件是否包含您所期望的内容。
另外,是否需要备份整个分割? 我通常发现使用或类似工具备份文件比在需要时压缩生成的备份目录更简单、更有用rsync
。但这完全取决于您。
答案2
您要做的事情涉及 3 个简单步骤:
- 创建磁盘文件
- 将数据从分区复制到磁盘文件
- 压缩磁盘文件
创建磁盘文件
- 挂载并 CD 到要保存磁盘文件的分区
用于
fallocate
创建磁盘文件并预分配块。这比使用dd
或其他工具用零填充文件创建文件要快得多。要指定磁盘文件大小,您可以使用MB/MiB/GB/GiB
前缀。例如,如果您想要一个大小为 50 GiB 的磁盘映像,您可以这样做$ fallocate -l 50GiB part_backup.img
格式化磁盘文件。在此示例中,我使用
ext4
并禁用日志功能,因为在这种情况下不需要它$ mkfs.ext4 -O '^has_journal' part_backup.img
现在我们已经准备好磁盘文件,使用 挂载磁盘文件
losetup
。将--show
选项传递给它,以便打印磁盘文件挂载到的环回设备,例如/dev/loop0
$ sudo losetup --show -f part_backup.img
创建一个挂载文件夹,
/mnt
并将环回设备挂载到该文件夹中$ sudo mount /dev/loop0 /mnt/my_disk_file
将数据从分区复制到磁盘文件
- 挂载包含要备份的文件的分区并确定挂载点
用于
rsync
将文件复制到刚刚挂载的磁盘文件中。$ sudo rsync -avzPSX /mnt/media_partition/ /mnt/my_disk_file
如果您不确定,请在 rsync man 中查找每个 rsync opts 的作用。另请阅读有关备份源中尾部斜杠的说明
压缩磁盘文件
正常卸载磁盘文件
$ sudo umount /mnt/my_disk_file
$ sudo losetup -d /dev/loop0
用于
gzip
压缩磁盘文件