Fájlkiszolgáló-migráció a Robocopy segítségével 1. rész a 2-ből

Ez a blog egy 2 részes sorozat 1. része. A 2. rész megtekintéséhez kattintson ide.

Mivel a Windows Server operációs rendszerek különböző ízesítésű változatai idén kifutnak a támogatásból, elég sok fájlkiszolgáló migrációval találtam magam szembe egyik rendszerről a másikra. Néha, ha a kiszolgálóra nincs más szerepkör vagy funkció telepítve a fájlkiszolgálón kívül, akkor egyszerűen le tudtam venni a megosztásokat az eredeti kiszolgálón, leválasztani róla a virtuális merevlemezt, csatlakoztatni a virtuális merevlemezt az új kiszolgálóhoz, és újra megosztani a megosztásokat. Ez fenntartja az NTFS-jogosultságokat, ha mindkét kiszolgáló ugyanannak az Active Directory tartománynak a tagja. Általában nagyon gyors is, mivel nem kell több terabájtnyi adatot átmásolni az egyik kiszolgálóról a másikra. Ez a folyamat azonban csak akkor működik elegánsan, ha a fájlmegosztás adatai olyan köteten vannak, amelyre nem a Windows vagy bármilyen alkalmazás van telepítve.

Amikor az adatok duplikálására van szükség az új kiszolgálóra történő áttelepítéshez, mindig visszatérek a régi hűséges Robocopy (Robust File Copy for Windows) programhoz. A Robocopy az 1996-os NT4-es napok óta létezik, így valószínűleg nem most hallasz róla először. Akkoriban és 2008-ig a Windows Resource Kit letöltésével együtt volt elérhető. A 2008-as évtől kezdve (és azt követően) a Vista és a Server 2008 operációs rendszerekkel kezdődően mind az asztali, mind a kiszolgáló operációs rendszerekhez mellékelték. Tehát jó eséllyel, ha elindít egy parancssort a számítógépén, és beírja a “robocopy /?” parancsot, akkor a képernyőjére megjelenik a segédprogram használatával kapcsolatos információk dömpingje.

A Robocopy használatával történő fájlkiszolgáló-migrációknál elég sok lehetőség van, és lehet, hogy nem tudja, hol kezdje. Legyen óvatos néhány lehetőséggel, ha csak próbálgatja, mivel némelyikük áthelyezi az adatokat (törli a fájlokat és mappákat a forráshelyen vagy a célhelyen).

Az évek során ezt a szintaxist találtam, amelyhez újra és újra visszatérek:

robocopy \\\\sourceserver\ShareName D:\Shares\ShareName /e /b /copyall /PURGE /r:5 /w:5 /MT:64 /tee /log+:D:\Shares\log_ShareName _%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%.txt /v

Bontjuk le ezt.

Robocopy
Elindítja a parancsot.

\\\sourceserver\ShareName
Az első paraméter mindig a forrás helye. Általában mindig az új fájlkiszolgálóról futtatom a Robocopy-t, mivel:

  • Ez valószínűleg a Robocopy újabb verzióját fogja telepíteni; és
  • Valószínűleg az új kiszolgálón még nem épültek be a megosztások.

D:\Shares\ShareName
A második paraméter mindig a célhely. Erősen ajánlom, hogy ezeket lehetőleg ne a C:\ operációs rendszer kötetére tegye. Azt is szeretem, ha létrehozok egy “Shares” nevű gyökérmappát, és az összes megosztott mappát ebbe a mappába teszem, ahelyett, hogy a gyökérben hagynám őket. Ennek több előnye is van, amit az évek során tapasztaltam.

A következő paramétereknek nem kell meghatározott sorrendben lenniük.

/e

Ez az alkönyvtárakat másolja, beleértve az Üreseket is. Itt jön be a Robocopy igazi értéke. Ha csak a legfelső szintű megosztott mappában lévő fájlokat másolná, nem sok haszna lenne.

/b
Ez a fájlokat másolja biztonsági mentés üzemmódban. Ez nem hoz létre VSS pillanatképet, hanem akkor hasznos, ha a Windows fiók, amellyel a Robocopy-t futtatod, az NTFS ACL-ek miatt esetleg nem rendelkezik teljes hozzáféréssel a forráshelyhez.

/copy all
Ezzel kapcsolatban felmerülhetett benned a kérdés, minek ez a sok vesződség? Miért nem navigál mindkét helyre, és miért nem másolja be a fájlokat helyről helyre? Ez a paraméter az összes fájlinformációt másolja. Így nem lesz új időbélyegző, vagy tulajdonos, vagy örökölt NTFS-jogosultságok, amikor nem kellene, stb. Az összes fájlinformáció a következőket tartalmazza:

  • Adatok
  • Attribútumok
  • Időbélyegek
  • Biztonság (NTFS ACL-ek)
  • Tulajdonos információ
  • Auditálás információ

/PURGE
Ez a paraméter törli a célfájlokat és mappákat, amelyek már nem léteznek a forrásban. Vegye figyelembe, hogy technikailag a /e és a /PURGE paraméterek együttes használata ugyanazt a hatást eredményezi, mintha az egyik paramétert önmagában használná (/mir – a “tükrözésre”), de én jobban szeretem, ha egy nagy “PURGE” van a szintaxisban, így amikor ránézek, tudom, hogy valószínűleg törlök valamit. Itt felmerül a kérdés, hogy ha a fájl vagy mappa már nem létezik a forráshelyen, akkor miért próbálnám meg átmásolni a célhelyre. Továbbá, miért akarnék törölni egy olyan fájlt, ami eleve nem is létezett.

Ez a második hely, ahol a Robocopy igazán ragyog. Általában nem szoktam csak egyszer futtatni a Robocopy-t és kész, kivéve, ha inaktív, elavult adatokat másolok. Általában létrehozok egy ütemezett feladatot egy kötegelt fájl futtatására, amely tartalmazza a futtatandó Robocopy sorokat. Ezt szem előtt tartva és a fenti paraméterekkel a feladat első végrehajtása eltart egy ideig, mivel az összes adat kezdeti másolását el kell végeznie. A következő futtatáskor azonban (én általában úgy állítom be, hogy naponta, munkaidő után fusson), megnézi a forrást, összehasonlítja azt a céllal, és ha a fájl nem változott, akkor nem csinál vele semmit. Ha a forrásban lévő fájl újabb, akkor felülírja a célban lévő fájlt. Ha a forrásban lévő fájl a feladat legutóbbi futtatása óta törlődött, akkor a célban lévő fájl is automatikusan törlődik. Egy tényleges fájlmegosztás-migráció esetén ezt körülbelül egy héttel előre beállítom, megnézem a generált naplókat, elhárítom az esetleges problémákat, és hagyom, hogy naponta fusson az átállás tervezett időpontjáig. Az átadás napján a forrásmegosztást írásvédetté teszem, és még egyszer lefuttatom a Robocopy feladatot, hogy átmásoljam a legutóbbi futtatás óta megváltozott deltákat. Ezután a befejezéshez feloldanám a forrásmegosztás megosztását, majd megosztanám az új megosztást.

/r:5
Ez a jelző megadja, hogy a Robocopy hányszor próbálja meg újra a sikertelen másolást egy fájlon vagy mappán. Néha ez azért nem sikerül, mert a fájl zárolva van, mert a felhasználó vagy a folyamat nyitva tartja. Ilyenkor a Robocopy újra megkísérli a másolást, hogy megnézze, nincs-e már zár a fájlon. Alapértelmezés szerint (ha nem adja meg ezt a paramétert) a Robocopy 1 milliószor próbálja meg újra a másolást. Tudva, hogy az egy nap múlva esedékes következő ütemezett futtatás során újra megpróbáljuk lemásolni ezt a fájlt, bőven elég, ha ötször próbálkozunk újra, és ha nem sikerül a másolás, akkor folytassuk a következő fájlhoz.

/w:5
Ez a flag együtt jár a /r-rel. Ez a flag megadja az újbóli próbálkozások közötti várakozási időt másodpercben. Az alapértelmezett érték 30 másodperc. Összeadva 2 és 2, 1,000,000 * 30 = 30,000,000 másodperc vagy 500,000 perc vagy 8,333 óra és 20 perc vagy 347 nap és 5 óra. Ez azt jelenti, hogy ha egyetlen fájl zárolt lenne és zárolva maradna, a Robocopy majdnem egy évig tartana, mielőtt a következő feladatra lépne! Ez elengedhetetlen a /r és /w flagek megfelelő beállításához.

/MT:64
Ez a flag beállítja a szálak új maximális számát, ha többszálas másolást végzünk. Ez nem másol egyszerre több fájlt vagy mappát, hanem több szálat használ a CPU-val a beállított másolás elvégzésére. Az alapértelmezett szám 8. Én ezt a számot 64-re szeretem növelni (ezt tartsa szem előtt, ha több Robocopy feladatot futtat egyszerre). CPU-költséget jelent a forrásfájl megnyitása, a célfájl megnyitása, az adatok másolása, a forrásfájl bezárása és a célfájl bezárása. Ha mindezt el kell végezni a következő fájlra való áttérés előtt, akkor előfordulhat, hogy az I/O alrendszer üresjáratban lesz az idő egy részében, amikor dolgozhatna. Megjegyzés: ettől a rendszer valószínűleg lassúnak fog tűnni, mivel a CPU-t tisztességesen dolgoztatja. Ha ez egy új, még nem termelésben lévő fájlkiszolgálón történik, akkor nem számít, ha “lassú”.”

/tee
Alapértelmezés szerint, amikor ez manuálisan fut a parancssorból, a Robocopy kiírja a képernyő kijelzőjére, hogy mit csinál. A potenciálisan több ezer másolandó fájl esetén ez nem túl hatékony módja annak, hogy megtaláljuk, mi ment rosszul. A /tee megadása (ahelyett, hogy teljesen elhagynánk) kikényszeríti, hogy a konzol ablakba és a naplófájlba is kimenjen. Ez különösen akkor hasznos, ha ez az első futtatása a Robocopy feladatnak, és a hiba elhárításakor valami nem úgy működik, ahogy kellene. Ha ütemezett feladatot hozok létre a Robocopy feladatból, javaslom, hogy hagyja ki ezt a parancsot.

log+:D:\Shares\log_ShareName _%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%.txt

A Robocopy alapértelmezés szerint csak a képernyőn való megjelenítés a naplózás. A /log paraméterrel adja meg egy új (vagy meglévő) fájl elérési útvonalát. A program felülírja a fájlt, ha az már létezik. Ha azonban ezt a folyamatot egy ütemezett feladattal végezzük, előfordulhat, hogy a futás összes iterációját látni szeretné, nem csak a legutóbbiat. A log után a + megadásával (/log+) a megadott fájlhoz csatolja, ahelyett, hogy felülírná azt. Szintén a “_%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%” beírásával a fájl nevébe automatikusan létrehoz egy új fájlt (ha aznap futott először) _MM_DD_YYYYYY utótaggal a naplófájl végén a múltbeli hivatkozásokhoz. Különösen nagy fájlmegosztások esetén még a naplófájlok is több gigabájtosra nőhetnek, ha napokig futnak, és a napi naplókra való felosztásuknak sok értelme van.

/v
Ez a paraméter Verbose outputot jelenít meg, amely megmutatja a kihagyott fájlokat. Általában tényleg látni szeretné ezt, hogy megbizonyosodjon arról, hogy a kihagyott fájlok naplózásra kerülnek.

A blog 2. részében megmutatom, hogyan állíthat be egy napi Robocopy feladatot a Feladatütemezővel.

Kérdése van a fájlkiszolgálók migrálásával kapcsolatban? Vegye fel a kapcsolatot a Sikich céggel. Készen állunk segíteni.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.