Rsync: verschil tussen versies
Regel 17: | Regel 17: | ||
<pre> | <pre> | ||
− | rsync -rv * | + | rsync -rv * srv87:/var/www/example.com/ |
</pre> | </pre> | ||
Versie van 15 jan 2021 10:48
rsync gaat door waar cp en scp ophouden. Op de man page wordt het omschreven als a fast, versatile, remote (and local) file-copying tool. Het is oa. geschikt voor efficiënte datatransfer over een SSH-verbinding. Maar ook binnen één en dezelfde computer kan het soms wonderen doen. Daarnaast lijkt het een volwaardig backupt-tool te zijn. Overigens: rsync is niet immuum voor het argument too long-probleem dat hier geschetst wordt, maar het heeft er wel oplossingen voor.
Wat ik meestal zoek
rsync -r srv12:/var/www/example.com/* . --info=progress2 # Site downloaden rsync -r * srv12:/var/www/example.com/ --info=progress2 # Site uploaden
Kopiëren, niet verplaatsen
rsync is bedoeld om te kopiëren. Je kunt er ook mee verplaatsen (met de switch --remove-source-files
), maar dat gaat vermoedelijk niet sneller dan met mv
. Behalve dat mv niet over netwerkprotocolen kan werken.
Upload over SSH
rsync werkt prima over SSH, net als scp. Vermoedelijk is rsync betrouwbaarder en efficiënter [1] dus ik gebruik dat liever. Voorbeeld:
rsync -rv * srv87:/var/www/example.com/
Rename
rsync kan gewoon hernoemen zoals cp dat ook kan. Bv.:
rsync ./test-01.txt ./test-02.txt
Synchronisatie ipv. kopiëren
Stel je wilt 15.000 bestanden kopiëren van map A naar map B, maar een deel is al gedaan. Met cp is dit alles of niets. Met rsync wordt de map gesynchroniseerd: Er wordt alleen gekopiëerd wat nodig is. Uiteraard kost synchroniseren ook tijd (ihb.: verifiëren dat de bestanden gelijk zijn), maar vermoedelijk is het efficiënter dan cp.
Synchronisation & arbitrage
Ik geloof dat rsync standaard de verzonden file kiest als autoriteit, als er verschillen zijn in grootte en datum-van-laatste-verandering. Met de flag --checksum
kun je niet nauwkeuriger doen [2]
Mappen, bestanden & argumenten - Hoe zit het precies?
Ik vind het vaak lastig om de argumenten goed te krijgen, als het gaat om het kopiëren van mappen met inhoud. Komt-ie:
- in-map bevat één (leeg) bestand
- uit-map bevat niets.
Kopiëer een map (met inhoud) naar een andere map
#!/bin/bash # inmap="/tmp/in-map" uitmap="/tmp/uit-map" bron=$inmap doel=$uitmap echo "Bron: "$bron echo "Doel: "$doel rsync -vvr $bron $doel
Nu krijg je in de map uit-map een map in-map met daarin het bestand - Meestal niet wat ik zoek.
Kopiëer de inhoud van een map naar een andere map
Dit is wat ik hierboven eigenlijk zocht:
#!/bin/bash # inmap="/tmp/in-map" uitmap="/tmp/uit-map" bron=$inmap"/*" doel=$uitmap echo "Bron: "$bron echo "Doel: "$doel rsync -vva $bron $doel
- Ik vond het hier handig om met aparte variabelen
bron
endoel
te werken: Dat helpt met debuggen. Als ik suffixen toepas als argumenten voor rsync, mis ik dat - Merk op, dat er geen
/
nodig is aan het eind van bron en doel. Vermoedelijk heb je dat nooit nodig.
Kopiëer meerdere mappen (met wildcard) naar een andere map
Zo dus:
#!/bin/bash # # Hoe kopiëer ik alle mapen die beginnen met "in" naar de doellocatie? inmap="/tmp/in*" uitmap="/tmp/uit-map" bron=$inmap doel=$uitmap echo "Bron: "$bron echo "Doel: "$doel rsync -vva $bron $doel
Recursie: -r & -a
Om een of andere reden gebruik ik -a
voor recursie, terwijl -r
daar ook voor bestaat, en misschien zelfs logischer is:
-r
: Gewone recursie-a
: Iets ingewikkelds met archieven, identiek aan-rlptgoD
[3] - Heb ik dat echt nodig?
Arbitrage: Behoud het grootste bestand
Regelmatig (juli 2020) synchroniseer ik grote hoeveelheden bestanden via Nemo. Daarbij moet ik steeds wachten tot het dialoogvenster Merge directories en Overwrite or skip file. Dat kan vast efficiënter met rsync -- Komt nog!
Bandbreedte
- Met de switch
--info=progress2
krijg je info over de bandbreedte, gedurende de transfer - In oudere versies krijg je die info met de switch
--progress
.
Ignore errors
--ignore-errors
doet waarschijnlijk wat 't zegt.
Casus (nov. 2020)
rsync -r gebruiker@112.123.199.40:applications/example.com/public_html/* . --info=progress2 17,227,398,622 99% 84.26MB/s 0:03:14 (xfr#263949, ir-chk=1023/268363) rsync: send_files failed to open "/home/master/applications/example_com/public_html/wp-content/wflogs/attack-data.php": Permission denied (13) rsync: send_files failed to open "/home/master/applications/example_com/public_html/wp-content/wflogs/config-livewaf.php": Permission denied (13) rsync: send_files failed to open "/home/master/applications/example_com/public_html/wp-content/wflogs/config-synced.php": Permission denied (13) rsync: send_files failed to open "/home/master/applications/example_com/public_html/wp-content/wflogs/config-transient.php": Permission denied (13) 17,231,297,150 99% 84.27MB/s 0:03:15 (xfr#263952, ir-chk=1016/268363) rsync: send_files failed to open "/home/master/applications/example_com/public_html/wp-content/wflogs/template.php": Permission denied (13) 17,266,793,136 99% 84.26MB/s 0:03:15 (xfr#265138, to-chk=0/268708) rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1668) [generator=3.1.2]
Diagnose
Ik nam aan, dat transfer was gestopt vanwege de permission denied-foutmeldingen. Nu ik het wat beter bekijk: Waarschijnlijk ging het proces gewoon door en is zoiets als --ignore-errors
dus niet nodig.
Zie ook
Bronnen
- https://rsync.samba.org/
- https://www.ubuntupit.com/free-open-source-backup-software-for-linux/
- https://www.howtogeek.com/135533/how-to-use-rsync-to-backup-your-data-on-linux/
- https://www.marksanborn.net/howto/use-rsync-for-daily-weekly-and-full-monthly-backups/ - Ik weet nog niet goed hoe dit werkt, maar 't ziet er veelbelovend uit
- https://linuxize.com/post/how-to-exclude-files-and-directories-with-rsync/
- https://www.linuxtechi.com/rsync-command-examples-linux/