我使用 dd 安装了 linux 系统,克隆了几个 32Gb pendrive。后来我确实缩小了一个分区,并做了一些更多的更改(在“主”中)。是否有任何工具可以仅传输更改的块以避免使用 dd 进行缓慢的完全重新克隆?
我想到了rsync
,但它似乎只适用于文件。
phe*_*mer 13
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")"
Run Code Online (Sandbox Code Playgroud)
这-I
是因为 rsync 将查看块设备文件(代表设备的文件系统条目)的时间戳和大小,而不是块设备内容,并可能跳过同步。该标志强制 rsync 评估块设备的内容。
告诉--copy-devices
rsync 从源块设备的内容而不是/dev
文件进行同步。
告诉--write-devices
rsync 同步到目标块设备的内容而不是替换文件/dev
。
告诉--no-whole-file
rsync 仅传输已更改的块。如有必要,可以控制块大小--block-size
。
告诉--inplace
rsync 更新目标块设备,而不是创建临时文件并将其重命名到位。
这些$(readlink ...)
调用是因为 rsync 通常会查看路径并看到它们是符号链接,并且不会将它们识别为块设备。因此readlink
取消引用符号链接。
Ste*_*fan 12
如今,rsync
支持复制设备,具有:
rsync --copy-devices --write-devices <FROM> <TO>
Run Code Online (Sandbox Code Playgroud)
请注意,它仅在找到实际设备节点时才写入设备。因此,不要用作/dev/mapper/<VG>-<LV>
目标,因为它只会(尝试)用包含源设备内容的文件替换符号链接。
[它的选项之一--*link*
可能可以告诉它遵循这些符号链接,但我只是使用它/dev/dm-<NN>
。]
Gil*_*il' -3
不,也不可能有。Rsync 使用文件时间戳来确定要复制的内容和要跳过的内容。没有什么比文件更低的级别类似了。磁盘上的数据不记得曾经有过不同的分区排列。
为了确保两个磁盘相同,在文件系统下工作的工具必须读取两侧的每个块,如果不同,则将源块复制到目标块上。这通常比无条件复制要慢。如果对目标磁盘的写入比读取慢很多,则可能会更快(但与 rsync 通过完全跳过未更改的文件所获得的效果仍然相去甚远);我想我见过一个可以做到这一点的工具,但现在找不到了。
如果您对一侧的分区设置进行了更改,请在另一侧进行相同的更改,然后调用rsync
各个文件系统。
归档时间: |
|
查看次数: |
5116 次 |
最近记录: |