kro*_*oka 16 linux hard-drive clone dd clonezilla
我可以使用 dd、rsync、clonezilla 或任何工具在 Linux 中仅克隆硬盘中正在使用的空间吗?我需要从 1 TB 硬盘(仅使用 2 GB 空间)备份到 500 GB 硬盘。
Kam*_*ski 29
你可以,但你应该先准备你的磁盘。诀窍是使用稀疏文件或压缩。这种方法很耗时,会产生很高的 I/O。在您的情况下(在 1 TB 硬盘上使用 2GB),文件副本(如锯末的评论中所建议)可能是更好的解决方案。如果——另一方面——你有例如 850GB 的 1TB 正在使用中,其中有许多小文件,你想一次备份 MBR、分区表、元数据,那么我的方法将是一种合理的保存方式图像文件至少有 150 GB(除非数据压缩得足够好,否则仍然无法放入 500 GB 的 HDD)。
我是为磁盘使用率较高的用户编写的。另请注意,源驱动器应该是健康的,并允许覆盖空白空间。我提供的解决方案主要用于备份,而不是恢复或取证。时间和 I/O 成本不仅会在映像创建期间支付,还会在(如果)映像写回磁盘时支付。如果该方法适合您,请三思。
假设您需要克隆/dev/sdb
并且有几个分区:/dev/sdb1
, /dev/sdb2
...
要充分利用稀疏文件或压缩,您应该用零覆盖空白空间。如果 Windows 分区可能会因 Windows 休眠而出现问题,请阅读此。
## Most commands need sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect the following outcome: (which means that all empty space was zeroed)
### dd: error writing '/mnt/zero_file': No space left on device
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.
Run Code Online (Sandbox Code Playgroud)
如果分区布局中有很大的空白,那么你也应该用零填充它们。交换分区(如果有)需要特殊处理,以使生成的图像尽可能小。Windows 文件如hiberfil.sys
、pagefile.sys
和swapfile.sys
可能会在zero_file
创建之前被删除。我不会在这里详细介绍这些情况。
如果目标文件系统(将保存图像文件的位置)支持稀疏文件,则可以使用此方法。要生成稀疏图像文件,请调用:
## dd probably needs sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse
Run Code Online (Sandbox Code Playgroud)
(编辑:最初有bs=32M
但它不是好的选择conv=sparse
。比较这个问题。)
要将图像写回:
## dd probably needs sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M
Run Code Online (Sandbox Code Playgroud)
好处:
mount -o offset=…
或使用kpartx
)映像来访问其中的文件。缺点:
cp --sparse=always
) 时保持稀疏。要生成图像:
## dd probably needs sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz
Run Code Online (Sandbox Code Playgroud)
要将图像写回:
## dd probably needs sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M
Run Code Online (Sandbox Code Playgroud)
这些命令可能在没有 的情况下构建dd
,gzip
只有。我曾经dd
确保 32 MiB 缓冲区。
好处:
缺点:
在我写了这个答案的第一个版本之后很久,我才知道有一个virt-sparsify
工具。看起来很有用。
要压缩快用gzip --fast
,要压缩最好用gzip --best
。man gzip
有关更多选项,请参阅。
如果可以,请使用pigz
代替gzip
。这应该会加快速度,因为pigz
可以使用多个处理器内核。如果您愿意,可以使用其他压缩器。
要监控进展调用dd
与status=progress
操作。如果dd
已经在没有它的情况下运行(例如,您dd
不支持status=progress
或忘记使用它),请USR1
向工具发送信号(这不会终止正在运行的dd
命令):
kill -s USR1 $(pidof dd)
Run Code Online (Sandbox Code Playgroud)
并根据需要重复。
作为替代,dd
您可以使用pv
阅读。例子:
pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38937 次 |
最近记录: |