我想简单地将一个硬盘驱动器复制到另一个相同大小的硬盘驱动器。
我知道我可以简单地做:
dd if=/dev/sda of=/dev/sdb
(或驱动器名称中的任何名称/dev
)。
有没有更好的工具可以显示我的视觉进步?如果我只使用 30GB 的驱动器,传输 30GB 所需的时间是一样长还是驱动器容量一样长?
答案1
你可以让 GNUdd
向你展示进展 - 引用手册页:
向正在运行的“dd”进程发送 USR1 信号,使其将 I/O 统计信息打印到标准错误,然后恢复复制。
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
希利的dd
(SDD) 有类似的选项,并且默认使用 SIGQUIT ( Ctrl+\
)。
关于你的第二个问题:是的,dd
只需复制所有块(如果文件系统是否使用) - 这需要 DEVICE_CAPACITY/TRANSFER_RATE 秒。
如果您想避免复制未使用的磁盘块,您可以使用tar
:
# cd /mnt/sda
# tar -c -f - . | tar -C /mnt/sdb -x -f -
GNUtar
也有计时选项:
# tar -c -f - . --totals=SIGQUIT | tar -C /mnt/sdb -x -f - \
--totals --totals=SIGQUIT
Ctrl+\
因此,您可以在命中时和结束时获得读/写统计信息。
另一种可能性是使用parted
或者gparted
用于复制文件系统 - 应该使用它有足够知识的文件系统以有效的方式完成。至少gparted
应该显示一个漂亮的图形进度对话框。
答案2
也许你可以使用ddrescue /dev/sda /dev/sdb
它支持错误并有一个进度条
答案3
我建议您使用该pv
程序(它位于我所知道的所有发行版的存储库中)。它会给你一个很好的进度条。
$dd if=/dev/sda |pv -s 80g |dd of=/dev/sdb
您可以-s
添加要复制的原始分区/磁盘的数量(if
在 dd 命令中)。如果您不提出参数,-s
它只会给您一个移动条来指示数据正在移动,但不会告诉您移动量。
当然sudo
如果需要的话可以添加。