Vraag Wilt u lokaal een grote directorystructuur kopiëren? cp of rsync?


Ik moet een grote mappenboom kopiëren, ongeveer 1,8 TB. Het is allemaal lokaal. Uit gewoonte die ik zou gebruiken rsync, maar ik vraag me af of het veel zin heeft en of ik het liever zou gebruiken cp.

Ik maak me zorgen over permissies en uid / gid, omdat ze moeten worden bewaard in de kopie (ik weet dat rsync dit doet). Evenals dingen zoals symlinks.

De bestemming is leeg, dus ik hoef me geen zorgen te maken over het voorwaardelijk bijwerken van sommige bestanden. Het is allemaal een lokale schijf, dus ik hoef me geen zorgen te maken over SSH of netwerk.

De reden dat ik verleid zou worden van rsync, is omdat rsync meer zou kunnen doen dan ik nodig heb. rsync-checksums-bestanden. Dat heb ik niet nodig en ik ben bang dat het misschien langer zal duren dan cp.

Dus wat denk je, rsync of cp?


217
2017-07-20 14:36


oorsprong


Als rsync precies doet wat u wilt, als u al bekend bent met het gebruik van deze specifieke toepassing en als het snel genoeg functioneert om aan uw smaak te voldoen, waarom zou u dan in hemelsnaam willen overschakelen? - eleven81
Omdat ik vrees dat rsync langer zal duren dan cp, omdat rsync veel checksumming doet die cp niet zal doen - Rory
De CPU-overhead van de controlesom is klein in vergelijking met de schijf / netwerk-i / o. Tenzij de schijf zich op hetzelfde systeem bevindt en het besturingssysteem een ​​slimme drive-drive kopie in de buscontroller kan doen. - Martin Beckett
Controlesommen worden uitgevoerd op bestanden die verschillen in de grootte en tijdstempelcontrole. Als je paranoïde bent (zoals na een stroomstoring tijdens het kopiëren), kun je controlesommen dwingen bij alle bestanden, maar bij een lokale overdracht is dat meestal langzamer dan helemaal opnieuw beginnen. - korkman
Misschien is hij nieuwsgierig naar het verbeteren van zijn workflow, en begraaft hij zijn hoofd niet in het zand omdat hij denkt dat hij alles weet. Deze opmerking ergert me erg. - Martin Konecny


antwoorden:


Ik zou rsync gebruiken omdat het betekent dat als het om welke reden dan ook onderbroken wordt, je het eenvoudig opnieuw kunt opstarten met heel weinig kosten. En omdat het rsync is, kan het zelfs halverwege een groot bestand opnieuw opstarten. Zoals anderen al noemen, kan het bestanden gemakkelijk uitsluiten. De eenvoudigste manier om de meeste dingen te bewaren is door de -a vlag - 'archief'. Dus:

rsync -a source dest

Hoewel UID / GID en symlinks worden bewaard door -a (zien -lpgo), uw vraag impliceert dat u misschien een wilt vol kopie van de bestandssysteeminformatie; en -a bevat geen hard-links, uitgebreide attributen of ACL's (onder Linux) of het bovenstaande noch resource-vorken (op OS X.) Voor een degelijke kopie van een bestandssysteem moet u dus die vlaggen opnemen:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

De standaard cp start opnieuw, hoewel de -u vlag zal "alleen kopiëren wanneer het SOURCE-bestand nieuwer is dan het doelbestand of wanneer het doelbestand ontbreekt". En de -a (archief) vlag zal recursief zijn, geen recopy-bestanden als u opnieuw moet opstarten en de rechten wilt behouden. Zo:

cp -au source dest

188
2017-07-20 14:40



De vlag -u van cp is waarschijnlijk niet de beste oplossing, omdat een gedeeltelijk gekopieerd / beschadigd bestand niet wordt gedetecteerd. Het leuke van rsync is dat je het kunt md5 de bestanden optellen om verschillen op te sporen. - Chad Huneycutt
Het toevoegen van -w (- geheel-bestand) optie zou een onderbroken rsync versnellen, omdat het gewoon het bestand zal kopiëren in plaats van het controleren van de controlesom. - hayalci
in feite detecteert rsync lokale overdrachten en maakt het kopiëren van hele bestanden mogelijk zonder automatisering van controles. - korkman
en - vooruitgang die echt handig is! - Matt
-P of - voortgang toont de voortgang van elk bestand afzonderlijk. Het is handig voor het kopiëren van grote bestanden, niet voor veel (duizenden) kleine bestanden, want het betekent veel meer uitvoer die u niet kunt lezen. Het toont niet de algemene voortgang van alle gecombineerde bestanden. - SPRBRN


Bij het kopiëren naar het lokale bestandssysteem gebruik ik altijd de volgende rsync-opties:

# rsync -avhW --no-compress --progress /src/ /dst/

Dit is mijn redenering:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

Ik heb 17% snellere overdrachten gezien met behulp van de bovenstaande rsync-instellingen via de volgende tar-opdracht, zoals gesuggereerd door een ander antwoord:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

89
2018-05-07 19:09



Ik heb de volgende foutmelding: rsync: --no-compress: unknown option @ Ellis Percival. - alper
Dit wordt bliksemsnel. Sneller om dit te doen dan rm -rf /src/. - dgo
Net als @alper was --no-compress geen optie voor mijn versie van rsync (in CentOS 7); Ik heb in plaats daarvan --compress-level = 0 gebruikt. - Paul


Wanneer ik een grote hoeveelheid gegevens moet kopiëren, gebruik ik meestal een combinatie van teer en rsync. De eerste pass is te tar het, iets als dit:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

Meestal met een grote hoeveelheid bestanden, zal er een aantal zijn dat tar om wat voor reden dan ook niet aankan. Of misschien wordt het proces onderbroken of is het een migratie van het bestandssysteem, dan wilt u misschien de eerste kopie maken vóór de daadwerkelijke migratiestap. In ieder geval doe ik na de eerste kopie een rsync-stap om alles te synchroniseren:

# cd /dst; rsync -avPHSx --delete /src/ .

Merk op dat de volgende schuine streep aanstaat /src/ is belangrijk.


78
2017-07-20 15:15



+1 Ik heb gevonden dat tar over het algemeen sneller is voor grote kopieën dan rsync. Ik vind het een goed idee om te eindigen met een laatste rsync. - Geoff Fritz
tar is een goede keuze als de bestemming leeg is. Hoewel mijn manier zou zijn: cd $ DSTDIR; tar c -C $ SRCDIR. | teer - asdmin
Dat is het mooie van deze methode. U hoeft de ruimte niet te verdubbelen, omdat u nooit een intermediair tar-bestand maakt. De teer voordat de pipe de data packs en streamt deze naar stdout, en de teer nadat de pipe deze van stdin pakt en uitpakt. - Chad Huneycutt
Ik deed een cp -a voor een overdracht van 12 gb, en deze methode voor een overdracht van 42 gb. De tar-methode duurde ongeveer 1/4 van de tijd. - NGaida
Ik heb ook gezet pv in het midden om de voortgang te kunnen bekijken, waarbij de grootte van alle gegevens wordt geschat df. Ik heb ook gebruikt --numeric-owner, omdat de bronschijf van een ander systeem was en ik niet wilde tar om de eigenaren te pesten: tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

Hier is de rsync die ik gebruik, ik geef de voorkeur aan cp voor eenvoudige commando's, niet dit.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

cpio

Hier is een manier die nog veiliger is, cpio. Het is ongeveer net zo snel als teer, misschien een beetje sneller.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

teer

Dit is ook goed en gaat verder met leesfouten.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

Let op: deze zijn allemaal alleen voor lokale kopieën.


13
2018-02-26 17:06



Waarom gebruik je de -S en -D vlaggen voor rsync? - miyalys


rsync -aPhW --protocol=28 helpt bij het versnellen van die grote kopieën met RSYNC. Ik ga altijd rsync omdat de gedachte halverwege 90GiB is en het breken me bang maakt van CP


6
2017-07-20 16:24



Wat is de waarde van het gebruik van het oudere protocol in die opdrachtreeks? - ewwhite
Op een mac-machine hangt de oudere versie van Rsync af van een aantal nieuwere rsync-protocoltoestanden zoals 29. Als je zegt dat het naar het oudere protocol moet gaan, wordt het NIET steeds opnieuw gecontroleerd. - oneguynick
Ik vermoed dat nummer 28 niet meer geldig is? - SPRBRN


De rsync commando berekent altijd checksums op elke byte die het overbrengt.

De opdrachtregeloptie --checksum heeft alleen betrekking op de vraag of er controlesommen van bestanden worden gebruikt om te bepalen welke bestanden moeten worden overgedragen of niet, dat wil zeggen:

-c, --checksum  skip op basis van checksum, niet mod-time & size "

De manpage zegt ook dit:

Houd er rekening mee dat rsync altijd controleert of elk overgedragen bestand correct is gereconstrueerd aan de ontvangende zijde door de controlesom van het volledige bestand te controleren, maar dat de automatische verificatie na de overdracht niets te maken heeft met de optie vóór de overdracht "Heeft dit bestand nodig worden bijgewerkt? " controleren.

Zo rsync berekent ook altijd een controlesom van het hele bestand aan de ontvangende kant, zelfs wanneer -c/ --checksum optie is "uit".


6
2017-11-28 01:20



Hoewel je bericht hier interessante informatie heeft toegevoegd, verminderen de rants en beledigingen de waarde van je bericht. Deze site is geen forum voor niet-constructieve rantsoenen. Als u de bron kunt wijzigen, heeft u uw wijzigingen als een patch ingediend? Heb je je versie op github gepost of zoiets? Als je hier zo sterk over denkt, is het misschien beter als je iets constructiever probeert te doen dan onnodig beledigend te zijn. - Zoredache
Ja, de laatste paragraaf was niet echt nodig. - Sherwin Flight


Waar je ook de voorkeur aan geeft. Vergeet gewoon het -a schakelen wanneer u besluit te gebruiken cp.

Als je echt een antwoord nodig hebt: ik zou rsync gebruiken omdat het veel flexibeler is. Moet u afsluiten voordat het kopiëren is voltooid? Gewoon ctrl-c en hervatten zodra je terug bent. Wilt u sommige bestanden uitsluiten? Gebruik gewoon --exclude-from. Wilt u het eigendom of de rechten wijzigen? rsync zal dat voor je doen.


5
2017-07-20 14:40



Wat doet de vlag -p opnieuw? - Rory
Het behoudt het eigendom van de eigenaar, tijdstempels en machtigingen. - innaM
cp -a zou beter zijn. - David Pashley
Inderdaad. Antwoord dienovereenkomstig gewijzigd. - innaM


rsync is geweldig, maar heeft problemen met echt grote mappenbomen omdat het de bomen in het geheugen opslaat. Ik wilde alleen kijken of ze dit probleem konden oplossen toen ik deze thread vond.

Ik vond ook:

http://matthew.mceachen.us/geek/gigasync/

U kunt de boom ook handmatig splitsen en meerdere rsyncs uitvoeren.


5
2017-07-20 16:14



Als u versie 3 gebruikt, wordt de hele boom niet in het geheugen bewaard als deze groot is. Er wordt een algoritme voor incrementele recursie gebruikt: samba.org/ftp/rsync/src/rsync-3.0.0-NEWS - Kyle Brandt♦


Deze thread was erg handig en omdat er zoveel opties waren om het resultaat te bereiken, besloot ik om er een paar te benchmarken. Ik geloof dat mijn resultaten nuttig kunnen zijn voor anderen om een ​​idee te hebben van wat sneller werkte.

Bewegen 532Gb van gegevens verdeeld onder 1.753.200 bestanden we hadden die tijden:

  • rsync duurde 232 minuten
  • tar duurde 206 minuten
  • cpio duurde 225 minuten
  • rsync + parallel duurde 209 minuten

Op mijn geval gaf ik er de voorkeur aan te gebruiken rsync + parallel. Ik hoop dat deze informatie meer mensen helpt om een ​​keuze te maken tussen deze alternatieven.

De volledige benchmark wordt gepubliceerd hier


5
2018-05-11 19:14



404 pagina niet gevonden - Amedee Van Gasse
Bedankt @AmedeeVanGasse URL is gerepareerd kort na je melding :) - arjones
Waarom niet benchmarken cp? Dit is de titel van de vraag! - calandoa
@calandoa denk ik cp is onveilig, dat wil zeggen: wanneer het breekt moet je opnieuw beginnen, dat is de manier waarop ik opties verkies die kunnen worden hervat, ergo rsync is mijn favoriet :) - arjones


Wanneer ik lokaal een lokale directorykopie vertolk, is mijn ervaring dat "cp-van src dest" 20% sneller is dan rsync. Wat betreft herstartbaarheid, dat is wat "-n" doet. U moet alleen het gedeeltelijk gekopieerde bestand rmpen. Niet pijnlijk tenzij het een ISO of iets dergelijks is.


2
2017-09-07 07:26





ARJ IS ZO OUD SCHOOL !! Ik betwijfel echt of ARJ en / of rsync prestaties zullen geven.

Zeker wat ik altijd doe is cpio gebruiken:

find . -print | cpio -pdm /target/folder

Dit is bijna snel dan CP, absoluut sneller dan teer en zonder iets te pipen.


2
2017-09-09 04:09



"De originele cpio en find-hulpprogramma's zijn geschreven door Dick Haight tijdens het werken in AT & T's Unix Support Group. Ze verschenen voor het eerst in 1977 in PWB / UNIX 1.0" - FreeBSD's cpio man pagina. - Chris S
cpio heeft helaas een bovengrens van 8 GB voor bestanden.
"zonder iets te pijpen"[sic]. Behalve de find commando, zoals je het opsomde, heeft een pijp erin: find . -print | cpio -pdm /target/folder - warren