GNU/Linux >> Znalost Linux >  >> Linux

Chytřejší přenos souborů než Rsync?

Zavřeno . Tato otázka vyžaduje podrobnosti nebo jasnost. Momentálně nepřijímá odpovědi.

Chcete zlepšit tuto otázku? Přidejte podrobnosti a objasněte problém úpravou tohoto příspěvku.

Zavřeno před 6 lety.


Vylepšete tuto otázku

Mám velký soubor (2-3 GB, binární, nezdokumentovaný formát), který používám na dvou různých počítačích (normálně ho používám na stolním systému, ale když cestuji, dám si ho na svůj notebook). K přenosu tohoto souboru tam a zpět používám rsync.

Čas od času dělám malé aktualizace tohoto souboru, měním méně než 100 kB. To se děje v obou systémech.

Problém s rsync, jak tomu rozumím, je ten, že pokud si myslí, že se soubor změnil mezi zdrojem a cílem, přenese celý soubor. V mé situaci mi to přijde jako velká ztráta času, když se změní jen malá část souboru. Předpokládám protokol, kde přenosoví agenti na zdrojovém a cílovém místě nejprve zkontrolují celý soubor a poté porovnají výsledek. Když zjistí, že kontrolní součet pro celý soubor je jiný, rozdělí soubor na dvě části, A a B, a kontrolní součet je odděleně.

Aha, B je na obou strojích identické, tu polovinu ignorujme. Nyní rozdělí A na A1 a A2. Dobře, změnila se pouze A2. Rozdělte A2 na A2I a A2II a porovnejte atd. Dělejte to rekurzivně, dokud nenajde např. tři části, každá o velikosti 1 MB, které se liší mezi zdrojem a cílem, a pak přeneste pouze tyto části a vložte je na správnou pozici do cílového souboru. Dnes s rychlými SSD a vícejádrovými CPU by taková paralelizace měla být velmi efektivní.

Moje otázka tedy zní, jsou dnes k dispozici nějaké nástroje, které fungují takto (nebo jiným způsobem, který jsem si nedokázal představit, ale s podobným výsledkem)?

Byla odeslána žádost o vysvětlení. Většinou používám Mac, takže souborový systém je HFS+. Obvykle spouštím rsync takto

rsync -av --delete --progress --stats – v těchto případech někdy používám SSH a někdy rsyncd. Když používám rsyncd, spustím to takto rsync --daemon --verbose --no-detach .

Druhé upřesnění:Žádám buď o nástroj, který pouze přenese delta pro soubor, který existuje na dvou místech s malými změnami a/nebo jestli to rsync skutečně nabízí. Moje zkušenost s rsync je, že přenáší soubory v plném rozsahu (ale nyní existuje odpověď, která to vysvětluje:rsync potřebuje server rsync, aby mohl přenášet pouze deltas, jinak (např. pomocí ssh-shell) přenáší celý jakkoli se mnoho změnilo).

Související:Kdy byste použili další deskriptor souboru?

Přijatá odpověď:

Rsync nebude používat deltas, ale přenese celý soubor jako celek, pokud je jako jediný proces zodpovědný za zdrojové a cílové soubory. Může přenášet delty, když na zdrojovém a cílovém počítači běží samostatný proces klienta a serveru.

Důvod, proč rsync neposílá delta, když je to jediný proces, je ten, že aby bylo možné určit, zda potřebuje odeslat delta, potřebuje přečíst zdrojové a cílové soubory. Ve chvíli, kdy to bude hotové, mohl soubor rovnou zkopírovat.

Pokud používáte příkaz tohoto formuláře, máte pouze jeden proces rsync:

rsync /path/to/local/file /network/path/to/remote/file

Pokud používáte příkaz tohoto formuláře, máte dva procesy rsync (jeden na místním hostiteli a jeden na vzdáleném) a lze použít deltas:

rsync /path/to/local/file remote_host:/path/to/remote/file

Linux
  1. Je používání Rsync během aktualizace zdroje bezpečné?

  2. Je>&- efektivnější než>/dev/null?

  3. Proč používat Install Rather than Cp And Mkdir?

  1. Jak RSYNC jeden soubor?

  2. Je algoritmus pro kopírování souborů (Ubuntu) Linux lepší než Windows 7?

  3. Existuje způsob, jak obnovit přerušený scp souboru?

  1. rsync v systému Windows + názvy souborů jiné než ASCII

  2. Chování rsync se souborem, který se stále zapisuje?

  3. Zachování oprávnění souborů a složek pomocí rsync