rsync
kann verwendet werden, um dies zu tun.
--no-whole-file
oder --no-W
Parameter verwenden die Synchronisierung auf Blockebene anstelle der Synchronisierung auf Dateiebene.
Testfall
Generierte zufällige Textdateien unter Verwendung /dev/random
und großer Teile von Textdateien von Websites wie folgt. Diese 4 Dateien unterscheiden sich in allen Inhalten. tf_2.dat
ist unsere Zieldatei.
~/logs/rs$ ls -tlh
-rw-rw-r-- 1 vayu vayu 2.1G 二 25 23:11 tf_2.dat
-rw-rw-r-- 1 vayu vayu 978M 二 25 23:11 a.txt
-rw-rw-r-- 1 vayu vayu 556K 二 25 23:10 file2.txt
-rw-rw-r-- 1 vayu vayu 561K 二 25 23:09 nt.txt
Kopieren Sie sie dann mit auf eine andere Festplatte rsync
(das Ziel ist leer).
rsync -r --stats rs/ /mnt/raid0/scratch/t2
Die folgende Statistik wurde empfangen.
Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 3,260,939,140 bytes
Total transferred file size: 3,260,939,140 bytes
Literal data: 3,260,939,140 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 3,261,735,553
Total bytes received: 92
sent 3,261,735,553 bytes received 92 bytes 501,805,483.85 bytes/sec
total size is 3,260,939,140 speedup is 1.00
Jetzt füge ich die Dateien zusammen, um eine neue Datei zu erstellen, die ca. 60% alte Daten enthält.
cat file2.txt a.txt >> tf_2.dat
Jetzt synchronisiere ich die beiden Ordner, diesmal mit der --no-W
Option.
rsync -r --no-W --stats rs/ /mnt/raid0/scratch/t2
Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 4,289,593,685 bytes
Total transferred file size: 4,289,593,685 bytes
Literal data: 1,025,553,047 bytes
Matched data: 3,264,040,638 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1,026,127,265
Total bytes received: 611,604
sent 1,026,127,265 bytes received 611,604 bytes 21,169,873.59 bytes/sec
total size is 4,289,593,685 speedup is 4.18
Sie können sehen, dass große Datenmengen übereinstimmen und beschleunigt werden.
Als nächstes versuche ich es erneut. Dieses Mal füge ich mehrere Shell-Dateien mit dem Ziel ( tf_2.dat
) zusammen, sodass die Änderung ~ 2% beträgt.
cat *.sh >> rs/tf_2.dat
Und wieder mit synchronisieren rsync
.
rsync -r --no-whole-file --stats rs/ /mnt/raid0/scratch/t2
Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 4,289,727,173 bytes
Total transferred file size: 4,289,727,173 bytes
Literal data: 178,839 bytes
Matched data: 4,289,548,334 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 541,845
Total bytes received: 690,392
sent 541,845 bytes received 690,392 bytes 43,236.39 bytes/sec
total size is 4,289,727,173 speedup is 3,481.25
Wir sehen eine große Übereinstimmung und Beschleunigung, die eine schnelle Synchronisierung ermöglichen.