我通常会保留某些计算机驱动器的基于映像的备份,这些驱动器通常是使用 dd 命令通过管道传输到 gzip (或类似命令)创建的。要恢复备份,我只需颠倒该过程即可。对于旋转驱动器非常有效,但是,对于 SSD,我讨厌浪费写入来恢复驱动器上已存在的数据。当从技术上讲,驱动器上已有的数据与映像备份中的数据之间只有几 GB 的数据差异时,我可能会将 1TB 数据写入 SSD,并将其寿命缩短一两个百分点。
所以我想知道,有没有办法恢复 dd 映像,但仅在数据不同时才将数据写入驱动器?它不必是逐字节检查,即使它比较数据块,然后仅当该块中的任何数据不同时才写入该块,这将非常有帮助。
答案1
我来这里寻找更快的替代方案。
我目前在这方面的最大努力是:
xdelta3 -e -s /dev/mmcblk0 <(zcat backup.img.gz) /tmp/delta
xdelta3 -d -s /dev/mmcblk0 /tmp/delta /dev/mmcblk0
这最终变得相当慢,但似乎避免了写放大效应。
由于机器人注意到这个答案 -xdelta3
已经在 Debian 发行版中可用一段时间了 ( apt-get install xdelta3
)
Xdelta3 是一组旨在计算二进制文件之间变化的工具。这些更改(增量文件)与“diff”程序的输出类似,因为它们可用于仅存储和传输文件之间的更改。 Xdelta3管理的“增量文件”以RFC3284(VCDIFF)格式存储。