有没有类似于 rsync 的东西来同步块设备?

有没有类似于 rsync 的东西来同步块设备?

我克隆了几个 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-devicesrsync 从源块设备的内容而不是文件进行同步/dev

告诉--write-devicesrsync 同步到目标块设备的内容而不是替换文件/dev

告诉--no-whole-filersync 仅传输已更改的块。如有必要,可以控制块大小--block-size

告诉--inplacersync 更新目标块设备,而不是创建临时文件并将其重命名到位。

这些$(readlink ...)调用是因为 rsync 通常会查看路径并看到它们是符号链接,并且不会将它们识别为块设备。因此readlink取消引用符号链接。

答案2

如今,rsync支持复制设备,具有:

rsync --copy-devices --write-devices <FROM> <TO>

请注意,它仅在找到实际设备节点时才写入设备。因此,不要用作/dev/mapper/<VG>-<LV>目标,因为它只会(尝试)用包含源设备内容的文件替换符号链接。

[它的选项之一--*link*可能可以告诉它遵循这些符号链接,但我只是使用它/dev/dm-<NN>。 ]

答案3

根据描述:BSCP通过 SSH 连接复制单个文件或块设备,仅传输已更改的部分。

答案4

类似的替代方案是磁盘同步,这是一个执行块重复数据删除(以及可选的备份压缩)的 go 代码,用作ssh传输。它需要稳定的源图像(由于 Merkle 树和哈希),这通常通过使用快照来保证。

基本用法相当简单

diskrsync --verbose --no-compress /dev/vg0/lv_snap ruser@otherhost:/dev/sdd7

无需安装即可使用,只需放入diskrsync双方家中即可使用

./diskrsync …

压缩可用于在目标上保留压缩备份或使用斯普格兹将其解压缩到本地设备中。

相关内容