Jeffrey Cross
Jeffrey Cross

Linux Tip: superrychlá kopie síťového souboru

Pokud jste někdy museli přemístit obrovský adresář obsahující mnoho souborů z jednoho serveru do druhého, možná jste se setkali se situací, kdy rychlost kopírování byla podstatně nižší než to, co byste mohli očekávat, že by síť mohla podporovat. Rsync dělá fantastickou práci rychlého synchronizování dvou relativně podobných adresářových struktur, ale počáteční klon může trvat poměrně dlouho, zejména když se počet souborů zvyšuje.

Problém je v tom, že při použití scp nebo rsync ke kopírování souborů z jednoho počítače do druhého existuje určité množství režijních nákladů na soubor. Ve většině případů se nejedná o problém, ale pokud se pokoušíte duplikovat desítky tisíc souborů (záloha, zálohování serveru nebo databáze), může tato režie za soubor skutečně sčítat. Řešením je zkopírovat soubory v jednom streamu, což obvykle znamená, že je tartuje na jednom serveru, kopíruje tarball a poté na cílovém místě. Pokud na zdrojovém serveru nepoužíváte 50% využití disku, mohlo by to způsobit nedostatek místa.

Brett Jones má alternativní řešení, které využívá užitečný nástroj netcat:

Poté, co jsme odstranili 10 GB logovacích souborů, zůstali nám stovky tisíc malých souborů, které nás zpomalily. Soubor nelze archivovat z důvodu nedostatku místa na zdrojovém serveru. Začal jsem hledat kolem a našel tento šikovný tip, který bere naše šifrování a streamuje všechny soubory jako jeden velký soubor:

To vyžaduje netcat na obou serverech.

Cílové pole: nc -l -p 2342 | tar -C / target / dir -xzf - Zdrojová schránka: tar -cz / source / dir | nc Target_Box 2342

To způsobí, že zdrojový stroj tar soubory nahoru a odeslat je přes netcat potrubí, kde jsou extrahovány na cílovém počítači, to vše bez použití na disku vyjednávání nebo zbytečné místo na disku. Je to také rychlejší než obvyklá scp nebo rsync přes scp, protože neexistuje žádné šifrování. Pokud se nacházíte v místní chráněné síti, bude to fungovat mnohem lépe, a to i pro velké kopie jednoho souboru.

Pokud se nacházíte v nechráněné síti, můžete stále chtít, aby byla vaše data šifrována při přenosu. O stejném úkolu můžete provádět přes ssh:

Spustit v cílovém počítači: cd / path / to / extract / to / ssh [chráněno e-mailem] 'tar -cz -C / source / path / *' | tar -zxv

Tento příkaz vydá příkaz tar přes síť na zdrojovém počítači, což způsobí, že bude stdout tar odeslán zpět po síti. To je pak piped na stdin na cílovém počítači a soubory se magicky objeví v adresáři, ve kterém se právě nacházíte.

Trasa ssh je o něco pomalejší než používání netcat kvůli režii šifrování, ale je stále ještě rychlejší než individuálně procházet soubory. Má také další výhodu v tom, že je potenciálně kompatibilní se servery Windows za předpokladu, že máte na svém serveru Windows nainstalovány několik unixových nástrojů, jako je ssh a tar (pomocí dostupných binárních souborů připojených k cygwin).

Rychlé kopírování souborů - Linux!

Podíl

Zanechat Komentář