GNU/Linux >> Znalost Linux >  >> Linux

Kopírujete lokálně velký adresářový strom? cp nebo rsync?

Řešení 1:

Použil bych rsync, protože to znamená, že pokud je z jakéhokoli důvodu přerušen, můžete jej snadno restartovat s velmi malými náklady. A protože je rsync, může se dokonce restartovat částečně přes velký soubor. Jak jiní zmiňují, může snadno vyloučit soubory. Nejjednodušší způsob, jak zachovat většinu věcí, je použít -a flag – ‘archiv.’ Takže:

rsync -a source dest

Ačkoli UID/GID a symbolické odkazy jsou zachovány pomocí -a (viz -lpgo ), z vaší otázky vyplývá, že možná budete chtít úplné kopie informací o souborovém systému; a -a nezahrnuje pevné odkazy, rozšířené atributy nebo seznamy ACL (v systému Linux) nebo výše uvedené ani zdrojové větve (na OS X.) Pro robustní kopii souborového systému tedy budete muset zahrnout tyto příznaky:

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

Výchozí cp se spustí znovu, i když -u příznak bude "kopírovat pouze tehdy, když je SOURCE soubor novější než cílový soubor nebo když cílový soubor chybí" . A -a (archivovat) příznak bude rekurzivní, nebude znovu kopírovat soubory, pokud budete muset restartovat a zachovat oprávnění. Takže:

cp -au source dest

Řešení 2:

Při kopírování do místního systému souborů mám tendenci používat rsync s následujícími možnostmi:

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

Tady je moje úvaha:

-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)

Viděl jsem o 17 % rychlejší přenosy pomocí výše uvedených nastavení rsync přes následující příkaz tar, jak navrhuje jiná odpověď:

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

Řešení 3:

Když musím kopírovat velké množství dat, obvykle používám kombinaci tar a rsync. Prvním krokem je tar to, něco jako toto:

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

Obvykle s velkým množstvím souborů budou některé, které tar z jakéhokoli důvodu nezvládne. Nebo se možná proces přeruší, nebo pokud se jedná o migraci souborového systému, možná budete chtít provést počáteční kopii před skutečným krokem migrace. V každém případě po úvodní kopii udělám krok rsync, abych to všechno synchronizoval:

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

Všimněte si, že koncové lomítko na /src/ je důležité.

Řešení 4:

rsync

Zde je rsync, který používám, preferuji cp pro jednoduché příkazy, ne toto.

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

cpio

Zde je způsob, který je ještě bezpečnější, cpio. Je to asi tak rychlé jako dehet, možná trochu rychlejší.

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

tar

To je také dobré a pokračuje to i při selhání čtení.

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

Všimněte si, že všechny jsou pouze pro místní kopie.

Řešení 5:

Toto vlákno bylo velmi užitečné a protože bylo tolik možností, jak dosáhnout výsledku, rozhodl jsem se několik z nich porovnat. Věřím, že mé výsledky mohou být užitečné pro ostatní, kteří mají smysl pro to, co fungovalo rychleji.

Chcete-li přesunout 532 Gb dat distribuovaných mezi 1 753 200 soubory měli jsme ty časy:

  • rsync trvalo 232 minut
  • tar trvalo 206 minut
  • cpio trvalo 225 minut
  • rsync + parallel trvalo 209 minut

V mém případě jsem raději použil rsync + parallel . Doufám, že tyto informace pomohou více lidem rozhodnout se mezi těmito alternativami.

Kompletní benchmark je zveřejněn zde


Linux
  1. Filtr Rsync:Kopírování pouze jednoho vzoru?

  2. Linux – efektivně odstranit velký adresář obsahující tisíce souborů?

  3. Rozdělit velký adresářový strom na bloky se specifikovanou velikostí?

  1. Rsync mění oprávnění k adresáři?

  2. Jak gzipovat adresář v Linuxu

  3. cp:vynechání adresáře – chyba při kopírování adresáře v Linuxu

  1. Vyloučení adresáře při vytváření souboru .tar.gz

  2. Lomítka a příkaz rsync

  3. rsync do/z archivu tar