Robocopy intelligensen?

Kipróbáltam így 20 év után a robocopy-t is. Egy forrás lemezről akarnám néhány könyvtár teljes tartalmát szinkronizálni egy másik lemezre.

Szintaxis amit eddig használtam igencsak primitív: robocopy c:\forráskönyvtár d:\célkönyvtár /MIR /J

A /MIR az mirror, azaz ami a forrásnál van, azt az állapotot állítja elő (tükrözi) a cél helyen. Ha valami új került a forrásba, azt át fogja másolni következő futásakor a célhoz. Illetve ami eltűnt (törlődött a forrásnál), azt törölni fogja a cél helyen is.

/J pedig az unbuffered másolást használ, a több gigabájtos fájlok miatt ne menjen tele haszontalanul a filesystem cache, esélyesen ettől nem lesz semmivel sem lassabb az egész másolás.

Namármost sok fájl lesz átnevezve a forrás oldalon. Ezeket első alkalommal szépen át is másolja a/MIR. Viszont ha az újabb futás előtt átnevezek egy adott fájlt, akkor ez úgy jelenik meg a szinkronizálásban, mint 1) egy felesleges fájl van a célnál, ami a forrásnál már nincs, ezért azt törli, majd 2) egy új fájl van a forrásnál ami nincs meg a célnál, ezért azt meg teljes egészében átmásolja.

Ez nagy méretű csak-átnevezett fájloknál feleslegesen tornáztatja az egész szinkronizálást. Vajon van rá mód, hogy ha az átnevezés 1 alkönyvtáron belül történt és nem áthelyezéssel két különböző alkönyvtár között, akkor a robocopy megnézze pl. fájlméret és dátum alapján az esetleges fájlegyezést? Pl. kiszámoljon egy checksum-ot, és ha az egyezik, akkor csak átnevezéssel megoldja a dolgot a felesleges törlés-másolgatás nélkül. SSD-n eléggé nem mindegy hányszáz GB, TB írást lehetne így spórolni.

Hozzászólások

Robocopyhoz nem ertek, de ez egy erdekes problema. En ugy oldanam meg, hogy a robocopy inditasa elott egy sajat scriptet inditanek. Ez a script a kovetkezoket csinalna:

- listaba szedne a forras es a cel oldali allomanyokat, es az egyforma meretu (esetleg datumu) fileok melle ha meg nincs, akkor general egy md5 sum allomanyt.

- megvizsgalja az md5 allomanyokat, es ha egyezik egy forras es egy cel oldali md5, akkor atnevezi a cel oldali allomanyt a forras nevere. (Persze elotte ellenorzi, hogy van-e a forras oldalon olyan file, mert akkor valtozas volt, es nem atnevezes)

- ezeket az md5 allomanyokat megvedi attol, hogy a robocopy legyakja csak mert nincs a tuloldalt.

Én nem tudok ilyen funkcióról, a fájl-tartalom alapú összehasonlítást tudja, de a nevekben történő eltéréseket nem hiszem hogy akár így, akár úgy le tudná követni. Ez nem dolga egy alapvetően másolásra kihegyezett, amúgy kiváló, jól paraméterezhető eszköznek. Ilyeneket általában úgy szokás megoldani hogy vezetsz katalógust az egyes oldalakon és azokat hasonlítod össze, leköveted a fájlrendszeren a módosításokat is (átnevezések). Illetve blokk szinten is deduplikálhatsz, akkor a más nevű, de ugyanolyan tartalmú adatok nem lesznek kétszer tárolva.

man rsync, --fuzzy

"The current algorithm looks in the same directory as the destination file

...

If  the  option is repeated, the fuzzy scan will also be done in any matching alternate destination directories that are specified via --compare-dest, --copy-dest, or --link-dest."

Az én esetemben elég jól működik, de csak ugyanabban a könyvtárban használom.

Érdemes hozzávenni pl. a --delete-after (és a --delete-delay) kapcsolót is.

 

BTW, nem tudom van-e számodra bármi haszna, de: https://help.resilio.com/hc/en-us/articles/209606526-What-happens-when-…

Jó cucc.

Illetve most elfogott a kíváncsiság (meg egyébként is, ez egy örökzöld probléma), és ezt találtam: https://www.syncovery.com/matrix/ Annyit tudok róla, amennyit kb. 10 másodperc alatt megtudtam.

Ja, ezt akartam én is írni, de aztán utánanéztem, és kiderült, hogy rsync nincs Windowsra, max. csak WSL-ben megy. Natív megoldásként ez a robonyomorékság van Windowsra. Nem baj, a MS majd 2099-re ebben is behozza a lemaradását, mikor ők is implementálnak egy rsync-et, persze az is egy olyan balfék, nem kompatbilis megoldás lesz, mint a MS-féle sudo, winget, stb.. Tőlük nem is várunk mást.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Unison nevű tool szerintem tudja amit akarsz. Alap működése a két irányú szinkronizáció, de beállítható tükrözésre. Hash-eket készít a file-okról, így észre veszi az átnevezést. Ha valamilyen network drive-ról szinkronizálsz, akkor célszerű úgy használni, hogy a remote gépen is fusson a tool és akkor a hash-élés "localban" törtenik a network-on meg tényleg csak az új cucc megy át.