Skip to content

Latest commit

 

History

History
103 lines (60 loc) · 3.76 KB

04.md

File metadata and controls

103 lines (60 loc) · 3.76 KB

dd 使用

使用 dd 拷贝数据,从小分区到大分区

因为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 的复制其实会影响到时间相关的属性以及符号链接的问题,我们可以使用findcpio结合的方法。

  1. 切换 root 用户或使用 sudo
  2. 切换到要复制的目录
  3. 使用下面的命令
find . -print -depth | cpio -pdum /target/path

其中:

. 从当前工作目录开始。

-print 列出文件名。

-depth 向下派生目录分层结构并从下到上列出文件名。

-p 创建文件列表。

-d 根据需要创建目录。

-m 在目录中设置正确的修改时间。

可能还要指定 -u 选项。此选项将强制执行无条件复制。否则,旧文件不会替换新文件。在需要目录的精确副本且复制的某些文件可能已存在于目标目录中时,此选项可能非常有用。

复制的过程中不会有提示,复制结束之后会显示复制的 block 数.

修复长久未用磁盘问题

长久不使用的硬盘会引起读写迟滞的问题,如果发现,可以使用如下命令

sudo dd if=<HDD_BLOCK_FILE> of=<HDD_BLOCK_FILE>

也就是将自己的东西复制出来再写回自己的文件中,这样重新布置磁场,原来的读写迟滞就能缓解了。

使用 信号 来显示 dd 进度

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

dd 备份的替代方式

rsync -av  // have an installed Linux instead Live CD

或者寻找 g4l (ghostforlinux)