我克隆了几个 32Gb 随身碟,并使用 dd 安装了 Linux 系统。后来我缩小了分区,并做了一些更多的更改(在“Master”中)。是否有任何工具可以仅传输更改的块以避免使用 dd 进行缓慢的完全重新克隆?
我想过rsync
,但它似乎只适用于文件。
答案1
rsync 的某些版本具有此功能(这取决于您的发行版)。发行版通常适用于 rsync 有 2 个补丁。一个用于从块设备读取(提供标志--copy-devices
),另一个用于写入块设备(提供标志--write-devices
)。然而,即使有了这些,以这种方式使用 rsync 还需要一些其他标志和警告。
让我们看一下命令,然后分解它:
rsync -I --copy-devices --write-devices --no-whole-file --inplace \
"$(readlink -f "/dev/vg_src/lv_src")" "$(readlink -f "/dev/vg_dst/lv_dst")"
这-I
是因为 rsync 将查看块设备文件(代表设备的文件系统条目)的时间戳和大小,而不是块设备内容,并可能跳过同步。该标志强制 rsync 评估块设备的内容。
告诉--copy-devices
rsync 从源块设备的内容而不是文件进行同步/dev
。
告诉--write-devices
rsync 同步到目标块设备的内容而不是替换文件/dev
。
告诉--no-whole-file
rsync 仅传输已更改的块。如有必要,可以控制块大小--block-size
。
告诉--inplace
rsync 更新目标块设备,而不是创建临时文件并将其重命名到位。
这些$(readlink ...)
调用是因为 rsync 通常会查看路径并看到它们是符号链接,并且不会将它们识别为块设备。因此readlink
取消引用符号链接。
答案2
如今,rsync
支持复制设备,具有:
rsync --copy-devices --write-devices <FROM> <TO>
请注意,它仅在找到实际设备节点时才写入设备。因此,不要用作/dev/mapper/<VG>-<LV>
目标,因为它只会(尝试)用包含源设备内容的文件替换符号链接。
[它的选项之一--*link*
可能可以告诉它遵循这些符号链接,但我只是使用它/dev/dm-<NN>
。 ]
答案3
根据描述:BSCP通过 SSH 连接复制单个文件或块设备,仅传输已更改的部分。