Migrace souborového serveru pomocí Robocopy 1. část z 2
Tento blog je první částí dvoudílného seriálu. Chcete-li se podívat na 2. část, klikněte zde.
V letošním roce, kdy končí podpora různých variant operačních systémů Windows Server, jsem se setkal se slušným počtem migrací souborových serverů z jednoho systému na druhý. Někdy, pokud server nemá nainstalované jiné role nebo funkce než jen souborový server, jsem mohl jednoduše zrušit sdílení sdílených položek na původním serveru, odpojit od něj virtuální pevný disk, připojit virtuální pevný disk na nový server a znovu sdílet sdílenou položku. Tím se zachovají oprávnění NTFS, pokud jsou oba servery členy stejné domény Active Directory. Je to také obecně velmi rychlé, protože není třeba kopírovat terabajty dat z jednoho serveru na druhý. Tento postup však elegantně funguje pouze v případě, že data sdílených souborů existují na svazku, na kterém není nainstalován systém Windows ani žádné aplikace.
Pokud vznikne potřeba duplikovat data pro migraci na nový server, vždy se vracím ke starému známému – Robocopy (Robust File Copy for Windows). Robocopy existuje již od dob NT4 v roce 1996, takže o něm pravděpodobně neslyšíte poprvé. Tehdy a až do roku 2008 byla k dispozici ke stažení se sadou prostředků systému Windows. Od roku 2008 (a později) byla dodávána s operačními systémy pro stolní počítače i servery počínaje systémem Vista a Server 2008. Je tedy pravděpodobné, že pokud na svém počítači spustíte příkazový řádek a zadáte příkaz „robocopy /?“, zobrazí se vám na obrazovce výpis informací z nápovědy, jak tento nástroj používat.
Pokud jde o migraci souborových serverů pomocí Robocopy, existuje poměrně mnoho možností a možná nevíte, kde začít. Pokud to teprve zkoušíte, buďte u některých možností opatrní, protože některé z nich přesouvají data (odstraňují soubory a složky ve zdrojovém nebo cílovém umístění).
V průběhu let používání jsem zjistil, že se stále vracím k této syntaxi:
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
Rozložíme si to.
Robocopy
Inicializuje příkaz.
\\sourceserver\ShareName
Prvním parametrem je vždy zdrojové umístění. Obvykle vždy spouštím Robocopy z nového souborového serveru, protože:
- Na něm bude pravděpodobně nainstalována novější verze Robocopy a
- Na novém serveru pravděpodobně ještě nebudou vytvořeny sdílené složky.
D:\Shares\ShareName
Druhým parametrem je vždy cílové umístění. Důrazně doporučuji, abyste je pokud možno neumísťovali na svazek C:\ operačního systému. Rád bych také vytvořil kořenovou složku s názvem „Shares“ a všechny sdílené složky umístil do této složky, místo abych je ponechal v kořenovém adresáři. V průběhu let jsem zjistil, že to má více výhod.
Další parametry nemusí být v žádném konkrétním pořadí.
/e
Tento parametr kopíruje podadresáře, včetně prázdných. Zde se projeví skutečná hodnota funkce Robocopy. Pokud by kopírovala pouze soubory ve sdílené složce nejvyšší úrovně, neměla by příliš velký význam.
/b
Tato funkce kopíruje soubory v režimu zálohování. Tím se nevytvoří snímek VSS, ale naopak je to užitečné, pokud účet systému Windows, se kterým Robocopy spouštíte, nemusí mít úplný přístup ke zdrojovému umístění kvůli ACL v systému NTFS.
/copy all
Možná jste si položili otázku, proč tolik starostí? Proč nepřejít do obou umístění a kopírovat-vkládat soubory z umístění do umístění? Tento parametr zkopíruje všechny informace o souboru. Tímto způsobem se nezobrazí nové časové razítko, vlastník ani zděděná oprávnění NTFS, když by neměla být, atd. Všechny informace o souboru zahrnují:
- Data
- Atributy
- Časové značky
- Zabezpečení (NTFS ACL)
- Info o vlastníkovi
- Info o auditu
/PURGE
Tento parametr odstraní cílové soubory a složky, které již ve zdroji neexistují. Všimněte si, že technicky vzato má použití parametrů /e a /PURGE dohromady stejný efekt jako použití jednoho parametru samotného (/mir – pro „mirror“), ale já mám raději, když je v syntaxi velké písmeno „PURGE“, takže při pohledu na něj vím, že pravděpodobně něco mažu. Vyvstává zde otázka, pokud soubor nebo složka ve zdrojovém umístění již neexistuje, proč bych se ji snažil zkopírovat do cílového umístění. Navíc, proč bych měl chtít odstranit soubor, který nikdy neexistoval.
Tady je druhé místo, kde Robocopy opravdu září. Obvykle nespustím Robocopy jen jednou a hotovo, pokud nekopíruji neaktivní neaktuální data. Obvykle vytvořím naplánovanou úlohu pro spuštění dávkového souboru, který obsahuje řádky pro spuštění Robocopy. S ohledem na to a s výše uvedenými parametry bude první spuštění úlohy chvíli trvat, protože musí provést počáteční kopírování všech dat. Při dalším spuštění (obvykle ji nastavuji tak, aby se spouštěla denně po pracovní době) se však podívá na zdrojový soubor a porovná jej s cílovým, a pokud se soubor nezměnil, nebude s ním nic dělat. Pokud je soubor ve zdroji novější, přepíše soubor v cíli. Pokud byl soubor ve zdroji od posledního spuštění úlohy odstraněn, bude automaticky odstraněn i stejný soubor v cíli. Pro skutečnou migraci sdílení souborů ji nastavím asi týden předem, podívám se na vygenerované protokoly, vyřeším případné problémy a nechám ji běžet denně až do plánovaného data přechodu. V den přechodu bych zdrojovou sdílenou složku přepnul do režimu pouze pro čtení a znovu spustil úlohu Robocopy, aby se zkopírovaly všechny delty, které se od posledního spuštění změnily. Poté bych na závěr zrušil sdílení zdrojového sdílení a následně nasdílel nové sdílení.
/r:5
Tento příznak určuje, kolikrát bude Robocopy opakovat neúspěšné kopírování souboru nebo složky. Někdy se to nepodaří, protože na souboru je zámek, protože jej má otevřený uživatel nebo proces. Pokud k tomu dojde, Robocopy zopakuje kopírování, aby zjistilo, zda již zámek na souboru není. Ve výchozím nastavení (pokud tento parametr nezadáte) Robocopy zopakuje kopírování 1 milionkrát. S vědomím, že se tento soubor pokusíme zkopírovat znovu při dalším plánovaném spuštění za jeden den, se více než spokojím s tím, že zkusím pět opakování, a pokud se kopírování nezdaří, přejdu k dalšímu souboru.
/w:5
Tento příznak jde ruku v ruce s příznakem /r. Tento příznak určuje dobu v sekundách, po kterou se má čekat mezi opakovanými pokusy. Výchozí hodnota je 30 sekund. Dáme-li dohromady 2 a 2, dostaneme 1 000 000 * 30 = 30 000 000 sekund nebo 500 000 minut nebo 8 333 hodin a 20 minut nebo 347 dní a 5 hodin. To znamená, že pokud by byl jeden soubor uzamčen a zůstal uzamčen, trvalo by Robocopy téměř rok, než by pokračovalo v další úloze! Proto je nutné vhodně nastavit příznaky /r a /w.
/MT:64
Tento příznak nastaví nový maximální počet vláken při provádění vícevláknových kopií. Tím se nezkopíruje více souborů nebo složek najednou, ale místo toho se použije více vláken s procesorem k provedení nastaveného kopírování. Výchozí číslo je 8. Rád bych toto číslo zvýšil na celkových 64 (mějte to na paměti, pokud spouštíte více úloh Robocopy současně). Dochází k režii procesoru při otevírání zdrojového souboru, otevírání cílového souboru, kopírování dat, zavírání zdrojového souboru a zavírání cílového souboru. Pokud se toto všechno musí provést předtím, než se přejde k dalšímu souboru, může se stát, že subsystém I/O bude část času, kdy by mohl pracovat, nečinný. Poznámka: systém se tak pravděpodobně bude jevit jako pomalý, protože slušně pracuje procesor. Pokud je to na novém, ještě neprovozovaném souborovém serveru, nemělo by vadit, že je „pomalý“.
/tee
Při výchozím nastavení, když je tato funkce spuštěna ručně z příkazového řádku, Robocopy vypíše to, co dělá, na displej. Při potenciálně tisících kopírovaných souborů je to nepříliš efektivní způsob, jak najít něco, co se pokazilo. Zadáním parametru /tee (namísto jeho úplného vynechání) jej donutíte vypisovat data do okna konzoly a také do souboru protokolu. To je užitečné zejména v případě, že úlohu Robocopy spouštíte poprvé a řešíte problémy s něčím, co nefunguje tak, jak by mělo. Pokud vytvořím naplánovanou úlohu úlohy Robocopy, doporučuji tento příkaz vynechat.
log+:D:\Shares\log_ShareName _%date:~-10,2%“-„%date:~7,2%“-„%date:~-4,4%.txt
Ve výchozím nastavení je jediným logováním z Robocopy zobrazení na obrazovce. Pomocí parametru /log zadejte cestu k novému (nebo stávajícímu) souboru. Pokud soubor již existuje, dojde k jeho přepsání. Při provádění tohoto procesu s naplánovanou úlohou však můžete chtít zobrazit všechny iterace běhu namísto pouze poslední. Zadáním znaku + za log (/log+) se připojí k zadanému souboru místo jeho přepsání. Také vložením „_%date:~-10,2%“-„%date:~7,2%“-„%date:~-4,4%“ do názvu souboru se automaticky vytvoří nový soubor (pokud byl ten den spuštěn poprvé) s příponou _MM_DD_RRRR na konci souboru protokolu pro historické odkazy. U zvláště velkých sdílených souborů mohou i soubory protokolu narůst na několik gigabajtů, pokud jsou spuštěny několik dní, a jejich rozdělení do denních protokolů má velký smysl.
/v
Tento parametr zobrazuje výstup Verbose, který zobrazí přeskočené soubory. Obecně to opravdu chcete vidět, abyste se ujistili, že jsou vynechané soubory zaznamenány.
V druhé části tohoto blogu ukážu, jak nastavit denní úlohu Robocopy pomocí Plánovače úloh.
Máte dotazy k migraci souborových serverů? Kontaktujte společnost Sikich. Jsme připraveni vám pomoci.