因为dd
是 扇区对扇区
的命令,也就是 原样无脑复制
sudo dd if=<SOURCE_BLOCK_FILE> of=<TARGET_BLOCK_FILE>
sudo e2fsck -f <TARGET_BLOCK_FILE>
sudo resize2fs <TARGET_BLOCK_FILE>
然后查看分区状态,应该由 dirty
变成 clean
了
当需要复制或移动各个文件、文件系统的某些部分或完整的文件系统时,可以使用下面的工具。
下表是几个备份命令。
命令名称 | 是否可识别文件系统边界? | 是否支持多卷备份? | 物理复制还是逻辑复制? |
---|---|---|---|
tar | 否 | 否 | 逻辑 |
cpio | 否 | 是 | 逻辑 |
dd | 是 | 否 | 物理 |
下表介绍了其中某些命令的优点和缺点。
命令 | 功能 | 优点 | 缺点 |
---|---|---|---|
tar | 用于将文件和目录子树复制到单个磁盘。 | 可以在大多数 UNIX 操作系统中使用,可以轻松访问公共域版本 | 无法识别文件系统边界;全路径名的长度不能超过 255 个字符 |
cpio | 用于复制需要多个磁盘的文件、特殊文件或文件系统 | 与使用 tar 命令相比,可以更有效地将数据打包到磁盘;恢复时可跳过磁盘中的任何坏点;提供以不同的头格式编写文件的选项(如 tar、ustar、crc、odc、bar),以实现不同系统类型之间的可移植性 | 该命令语法比 tar 或 pax 命令更难。 |
很多时候,需要跨越不同的文件系统复制,甚至 ext3 到 ext4 的复制使用 dd 工具都不太合适,毕竟物理结构不完全一样,直接复制会产生后果。而使用 cp -R
的复制其实会影响到时间相关的属性以及符号链接的问题,我们可以使用find
和cpio
结合的方法。
- 切换 root 用户或使用 sudo
- 切换到要复制的目录
- 使用下面的命令
find . -print -depth | cpio -pdum /target/path
其中:
.
从当前工作目录开始。
-print
列出文件名。
-depth
向下派生目录分层结构并从下到上列出文件名。
-p
创建文件列表。
-d
根据需要创建目录。
-m
在目录中设置正确的修改时间。
可能还要指定 -u
选项。此选项将强制执行无条件复制。否则,旧文件不会替换新文件。在需要目录的精确副本且复制的某些文件可能已存在于目标目录中时,此选项可能非常有用。
复制的过程中不会有提示,复制结束之后会显示复制的 block 数.
长久不使用的硬盘会引起读写迟滞的问题,如果发现,可以使用如下命令
sudo dd if=<HDD_BLOCK_FILE> of=<HDD_BLOCK_FILE>
也就是将自己的东西复制出来再写回自己的文件中,这样重新布置磁场,原来的读写迟滞就能缓解了。
linux下显示dd命令的进度:
dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000
想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比如:每5秒输出dd的进度 方法一:
watch -n 5 pkill -USR1 ^dd$
方法二:
watch -n 5 killall -USR1 dd
方法三:
while killall -USR1 dd; do sleep 5; done
方法四:
while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done
上述四种方法中使用三个命令:pkill、killall、kill
向 dd 发送SIGUSR1
信息,dd命令进程接收到信号之后就打印出自己当前的进度。
PS: 发送信号使daemon重新载入configure file
kill -HUP $pid
rsync -av // have an installed Linux instead Live CD
或者寻找 g4l
(ghostforlinux)