Kopiranje datotek s hitrim večnitnim procesom parsyncfp | INTROSERV
EUR
european

EUR

usa

USD

Slovenia Sl
Ex. VAT Ex. VAT 0%

Kopiranje datotek s hitrim večnitnim procesom parsyncfp

Uvod

parsyncfp je vzporedni ovoj okoli rsync, ki pospeši prenos velikih zbirk datotek z hkratnim izvajanjem več procesov rsync. Vsak proces sinhronizira svoj kos datotek, zato sta razpoložljiva pasovna širina in CPU izkoriščena učinkoviteje kot pri enem samem toku rsync.

Ta vodnik opisuje, kdaj je parsyncfp koristen, kako ga namestiti in kako izvesti osnovni prenos med dvema strežnikoma.

Warning

Vzporedno kopiranje pospeši prenose le na hitrih diskih in stabilnem omrežju. Na počasnih diskih ali omrežno priklopljenih datotečnih sistemih (NFS, SMB, FUSE) povečanje števila vzporednih procesov pogosto ne prinese nobenega pridobitka hitrosti in lahko namesto tega dodatno obremeni vir, cilj ali povezavo med njima. Začnite z majhnim številom procesov, izmerite rezultat in število povečajte le, če diski in omrežje zmorejo slediti.

Kako deluje parsyncfp

parsyncfp uporablja pripomoček fpart za razdelitev drevesa izvornih datotek na kose približno enake velikosti, nato pa vzporedno zažene več procesov rsync, enega na kos. Ker fpart drevo razdeli postopno, lahko parsyncfp začne prenašati datoteke, preden se konča celoten pregled izvornega drevesa, kar je pomembno pri zelo velikih drevesih imenikov.

Orodje je treba namestiti samo na izvorni strežnik. rsync kot običajno obravnava sprejemno stran.

Isti avtor vzdržuje naslednika z imenom parsyncfp2 (pfp2), ki vključuje popravke napak in izboljšave glede na parsyncfp ter dodatno podpira pošiljanje z več izvornih gostiteljev hkrati. Za nove postavitve je parsyncfp2 priporočena izbira. Ta vodnik obravnava klasični parsyncfp; sintaksa ukazov pfp2 je v veliki meri združljiva.

Kdaj je parsyncfp koristen

parsyncfp prinese največjo korist, kadar:

  • vir vsebuje milijone majhnih datotek, pri katerih rsync večino časa porabi za operacije z metapodatki namesto za dejanski prenos podatkov;
  • tako vir kot cilj podpira hitra shramba (NVMe, SSD ali dobro nastavljen RAID);
  • omrežje med virom in ciljem je hitro in stabilno (1 Gbps ali več, nizka izguba paketov);
  • en sam proces rsync je omejen s CPU ali pretočnostjo na tok, ne pa z diskom ali povezavo.

Za majhne imenike, počasne vrteče diske ali zasičeno omrežje običajno zadošča navadni rsync.

Imenik ~/.parsyncfp

parsyncfp ustvari predpomnilniški imenik z imenom ~/.parsyncfp na izvornem strežniku. V njem najdete podimenik fpcache, ki vsebuje dnevnik fpart, datoteke PID delujočih procesov rsync in datoteke kosov, ki naštevajo, katere poti naj kopira vsak rsync. Dnevniške datoteke so označene z datumom in se med zagoni ne prepišejo, zato je mogoče prejšnje zagone pozneje pregledati.

Če želite hkrati izvajati več primerkov parsyncfp, vsakemu z možnostjo --altcache določite ločeno lokacijo predpomnilnika. parsyncfp ob zagonu zazna druge delujoče primerke in opozori nanje, tako da so naključno prekrivajoči se zagoni vidni zgodaj.

Namestitev odvisnosti

parsyncfp sam temelji na rsync (transport) in fpart (za razdelitev izvornega drevesa na kose). Namestite oba na izvorni strežnik.

V Debian in Ubuntu:

apt-get install rsync fpart

V RHEL, CentOS Stream, AlmaLinux in Rocky Linux fpart ni v osnovnih repozitorijih. Najprej omogočite repozitorij EPEL, nato namestite oba paketa:

dnf install epel-release dnf install rsync fpart

Nekateri paketi EPEL so odvisni od paketov iz repozitorija PowerTools ali CRB, ki je privzeto onemogočen. Omogočite pravega za svojo različico:

# RHEL/AlmaLinux/Rocky Linux 9 in novejši dnf config-manager --set-enabled crb # RHEL/AlmaLinux/Rocky Linux 8 dnf config-manager --set-enabled powertools

Info

Če vaša distribucija fpart sploh ne vključuje (na primer RHEL 10 ali njegove ponovne izgradnje v času pisanja) ali raje ne uporabljate EPEL, prevedite fpart iz izvorne kode. Uradni repozitorij je repozitorij fpart na GitHubu; README navaja majhen nabor odvisnosti za izgradnjo (prevajalnik C, make in standardne glave knjižnice C).

Namestitev parsyncfp

parsyncfp je ena sama skripta Perl, gostovana na GitHubu. Prenesite jo, naredite izvedljivo in jo premaknite v imenik v vašem PATH, da jo lahko pokličete brez vnosa celotne poti:

wget https://raw.githubusercontent.com/hjmangalam/parsyncfp/master/parsyncfp chmod +x parsyncfp sudo mv parsyncfp /usr/local/bin/

Preverite, ali se skripta zažene:

parsyncfp --help

Če se prikaže zaslon s pomočjo, je parsyncfp pripravljen za uporabo.

Nastavitev dostopa SSH do cilja

parsyncfp izvaja rsync prek SSH, zato se mora izvorni strežnik znati prijaviti v cilj brez gesla. Ustvarite par ključev na viru (če še ne obstaja) in javni ključ kopirajte na cilj:

ssh-keygen ssh-copy-id user@target_host

Zamenjajte user@target_host z uporabniškim imenom in IP-jem ali imenom gostitelja vašega ciljnega strežnika. Po tem koraku bi se moral spodnji ukaz povezati brez zahteve po geslu:

ssh user@target_host

Izvajanje prenosa

Tipičen ukaz parsyncfp je videti takole:

parsyncfp --NP=8 --altcache=/dir/local/tmp --startdir=/dir/local/ www/ [email protected]:/var/dir/

Ta ukaz zažene 8 procesov rsync, uporabi /dir/local/tmp kot predpomnilniški imenik in kopira vsebino /dir/local/www v /var/dir/ na ciljnem gostitelju 192.168.67.1.

Info

Bodite pozorni na zaključno poševnico v argumentu vira: www/ kopira vsebino imenika www v cilj (kot v zgornjem primeru), medtem ko www (brez poševnice) kopira sam imenik www in na cilju ustvari /var/dir/www/. To je enako vedenje kot pri navadnem rsync.

Ključni parametri ukaza

  • --NP nastavi število vzporednih procesov rsync. Razumno izhodišče je od 4 do 8; število povečujte postopno in le, če diski in omrežje še niso zasičeni. Nastavitev --NP na število jeder CPU sama po sebi redko pomeni pravo izbiro.
  • --altcache določa nadomestni predpomnilniški imenik. Koristen je, kadar hkrati izvajate več primerkov parsyncfp ali kadar je privzeta lokacija na počasni shrambi. Izogibajte se usmerjanju na lokacijo, ki temelji na tmpfs (kot je /tmp v mnogih distribucijah), saj lahko seznami kosov za zelo velika izvorna drevesa narastejo in ne želite, da bi zasedli RAM.
  • --startdir nastavi delovni imenik, ki se uporablja kot osnova za izvorne poti, ki mu sledijo.

Argumenti za --startdir so izvorni imeniki za kopiranje (eden ali več, ločeni s presledkom), ki jim sledi cilj v slogu rsync v obliki user@host:/path/.

Za celoten seznam možnosti zaženite parsyncfp --help ali si oglejte dokumentacijo upstream.

Uporabne dodatne možnosti

Ko osnovni prenos deluje, je za produkcijske zagone vredno poznati nekaj možnosti:

  • --maxbw=500000 omeji skupno pasovno širino, ki jo uporabljajo vsi procesi rsync, v KB/s. Koristno, kadar je povezava deljena z drugimi storitvami.
  • --maxload=12 ustavi zagon novih procesov rsync, ko povprečna obremenitev sistema preseže dano vrednost. Koristno na obremenjenih izvornih strežnikih, vendar pred uporabo preberite spodnje opozorilo.
  • --chunksize=5G nadzira, kako velik je vsak kos fpart. Večji kosi zmanjšajo režijske stroške na kos pri prenosih z mnogo majhnimi datotekami; manjši kosi izboljšajo vzporednost pri prenosih z nekaj zelo velikimi datotekami.
  • --rsyncopts="-a -s -x" omogoča posredovanje dodatnih zastavic neposredno osnovnim procesom rsync. Uporabite ga za omogočanje stiskanja (-z), nastavitev velikosti bloka po meri ali uporabo drugih nastavitev rsync. Ne posredujte --delete prek --rsyncopts; glejte spodnji razdelek "Omejitve", zakaj to ni varno.
  • --verbose=2 poveča podrobnost beleženja, kar olajša odpravljanje težav pri prvih zagonih.

Warning

Avtor upstream je dokumentiral znano težavo z --maxload: ko parsyncfp prehaja skozi ponavljajoče se cikle prekinitve in nadaljevanja, nekatere izvorne datoteke morda ne bodo prenesene na cilj. Če uporabljate --maxload, nastavite prag dovolj visoko, da se prekinitve nikoli ne sprožijo, ali pa po končanem prenosu rezultat preverite z ločenim preverjanjem doslednosti.

Omejitve

Tudi na ustrezni strojni opremi ima parsyncfp kompromise, ki jih je vredno poznati pred povečanjem števila procesov:

  • parsyncfp varno ne podpira možnosti --delete rsync. Vsak vzporedni proces rsync vidi le svoj kos vira, zato če je --delete posredovan, bo vsak proces poskusil izbrisati datoteke na cilju, ki niso v njegovem kosu, torej datoteke, ki upravičeno pripadajo drugim kosom. To lahko izbriše velike dele cilja. Uporabite navadni rsync (ali ločen prehod čiščenja), kadar potrebujete semantiko --delete.
  • parsyncfp ne ohranja globalnega vrstnega reda datotek med vzporednimi procesi rsync, zato vrstni red, v katerem se datoteke pojavijo na cilju, ni predvidljiv. To je pomembno le za delovne tokove, ki so med samim kopiranjem odvisni od časovnih žigov datotek ali vrstnega reda izpisa imenikov.
  • Na poljih HDD veliko vzporednih procesov rsync spremeni tisto, kar bi bil zaporedni vzorec branja, v skoraj naključnega, kar je lahko počasnejše od enega samega rsync. Pogoni SSD in NVMe so prizadeti veliko manj.
  • Na datotečnih sistemih z zelo velikim številom majhnih datotek lahko režijski stroški metapodatkov na datoteko prevladajo nad časom prenosa. Vzporednost pomaga do določene mere, nato doseže plato.
  • Vsak proces rsync odpre svojo povezavo SSH s ciljem, zato visoke vrednosti --NP pomnožijo režijske stroške vzpostavljanja povezave. Na povezavah WAN z izgubo paketov ali visoko zakasnitvijo lahko to poslabša zamašitev, namesto da bi jo izboljšalo. V tem primeru manj procesov z nastavljenim rsync (stiskanje, večja velikost bloka) pogosto deluje bolje kot mnogo vzporednih.

Glejte tudi

Če se parsyncfp izkaže za težjega, kot potrebujete, paket fpart vključuje tudi fpsync, preprostejši vzporedni ovoj rsync istega avtorja. Uporablja isto zamisel drobljenja, vendar z manj možnostmi, in pogosto zadošča za enkratne prenose.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA