Migrații de servere de fișiere cu Robocopy Partea 1 din 2
Acest blog este partea 1 a unei serii de 2 părți. Pentru a vedea partea 2, faceți clic aici.
Ca urmare a faptului că diversele variante de sisteme de operare Windows Server vor ieși din suport în acest an, m-am trezit cu un număr decent de migrări de servere de fișiere de la un sistem la altul. Uneori, dacă serverul nu are alte roluri sau funcții instalate în afară de un simplu server de fișiere, atunci aș putea pur și simplu să anulez partajările de pe serverul original, să detașez hard disk-ul virtual de acesta, să atașez hard disk-ul virtual la noul server și să reîmpărtășesc partajările. Acest lucru menține permisiunile NTFS dacă ambele servere sunt membre ale aceluiași domeniu Active Directory. De asemenea, este, în general, foarte rapidă, deoarece nu este nevoie să se copie terabytes de date de pe un server pe altul. Cu toate acestea, acest proces funcționează în mod elegant numai atunci când datele de partajare a fișierelor există pe un volum în care nu sunt instalate Windows sau alte aplicații.
Când apare necesitatea de a duplica datele pentru migrarea pe noul server, mă întorc întotdeauna la vechiul credincios-Robocopy (Robust File Copy for Windows). Robocopy există încă de pe vremea NT4 în 1996, așa că probabil că nu este prima dată când auziți de el. Pe atunci și până în 2008, a fost disponibil odată cu descărcarea Windows Resource Kit. Începând cu 2008 (și după aceea), a fost inclusă atât în sistemele de operare desktop, cât și în cele pentru servere, începând cu Vista și Server 2008. Așadar, sunt șanse ca, dacă porniți un prompt de comandă pe computerul dumneavoastră și tastați „robocopy /?”, să vedeți pe ecran o descărcare de ajutor cu informații despre modul de utilizare a utilitarului.
Există destul de multe opțiuni atunci când vine vorba de migrări de servere de fișiere folosind Robocopy, și s-ar putea să nu știți de unde să începeți. Fiți atenți la unele dintre opțiuni dacă doar încercați, deoarece unele dintre ele mută datele (ștergând fișierele și folderele din locația sursă sau din locația țintă).
De-a lungul anilor de utilizare, am descoperit că această sintaxă este cea la care mă întorc mereu și mereu:
robocopy \\sourceserver\ShareName D:\Shares\Share\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
Să descompunem asta.
Robocopy
Inițializează comanda.
\sourceserver\ShareName
Primul parametru este întotdeauna locația sursă. De obicei, întotdeauna execut Robocopy de pe noul server de fișiere deoarece:
- Probabil că acesta va avea instalată o versiune mai nouă de Robocopy; și
- Probabil că nu voi avea partajările construite încă pe noul server.
D:\Shares\ShareName
Al doilea parametru este întotdeauna locația de destinație. Vă încurajez cu tărie să nu le puneți pe volumul sistemului de operare C:\\ ori de câte ori este posibil. De asemenea, îmi place să creez un folder rădăcină numit „Shares” și să pun toate folderele partajate în acest folder în loc să le las la rădăcină. Există multiple avantaje în acest sens, pe care le-am constatat de-a lungul anilor.
Următorii parametri nu trebuie să fie într-o anumită ordine.
/e
Acest lucru copiază subdirectoarele, inclusiv cele goale. Aici intervine adevărata valoare a Robocopy. Dacă ar copia doar fișierele din folderul partajat de nivel superior, nu ar fi de mare valoare.
/b
Aceasta copiază fișierele în modul Backup. Acest lucru nu creează un instantaneu VSS, dar, în schimb, este util în cazul în care contul de Windows cu care executați Robocopy s-ar putea să nu aibă acces complet la locația sursă din cauza ACL-urilor din NTFS.
/copy all
Atunci probabil că v-ați întrebat, de ce atâta bătaie de cap? De ce să nu navigați în ambele locații și să copiați cu copy-paste fișierele din locație în locație? Acest parametru copiază toate informațiile despre fișiere. În acest fel, nu există un nou timestamp, sau proprietar, sau permisiuni NTFS moștenite când nu ar trebui să existe, etc. Toate informațiile despre fișiere includ:
- Data
- Attributes
- Timestamps
- Security (NTFS ACLs)
- Owner info
- Auditing info
/PURGE
Acest parametru șterge fișierele și folderele de destinație care nu mai există în sursa. Rețineți că, din punct de vedere tehnic, utilizarea parametrilor /e și /PURGE împreună dă același efect ca și utilizarea unui singur parametru (/mir – pentru „oglindă”), dar eu prefer să am un „PURGE” mare și cu majuscule în sintaxă, astfel încât, atunci când mă uit la el, să știu că probabil șterg ceva. Aici se pune întrebarea dacă fișierul sau dosarul nu mai există în locația sursă, de ce aș încerca să îl copiez în locația țintă. Mai mult, de ce aș vrea să șterg un fișier care nu a existat niciodată în primul rând.
Acesta este al doilea loc în care Robocopy strălucește cu adevărat. De obicei nu execut Robocopy o singură dată și gata, cu excepția cazului în care copiez date vechi inactive. De obicei, creez o sarcină programată pentru a rula un fișier batch care include liniile Robocopy de executat. Ținând cont de acest lucru și cu parametrii de mai sus, prima execuție a sarcinii va dura ceva timp, deoarece trebuie să facă copia inițială a tuturor datelor. Cu toate acestea, atunci când se execută data următoare (de obicei, îl setez să se execute zilnic după orele de lucru), se va uita la sursă și o va compara cu ținta, iar dacă fișierul nu s-a modificat, nu va face nimic cu el. Dacă fișierul din sursă este mai nou, acesta va suprascrie fișierul din țintă. În cazul în care fișierul din sursă a fost șters de la ultima execuție a lucrării, același fișier din țintă va fi, de asemenea, șters automat. Pentru o migrare reală de partajare a fișierelor, configurez acest lucru cu o săptămână înainte, mă uit la jurnalele pe care le generează, soluționez orice problemă și îl las să ruleze zilnic până la data programată pentru trecerea de la un fișier la altul. La data transferului, aș pune partajul sursă în Read-Only și aș mai rula o dată sarcina Robocopy pentru a copia orice delta care s-a modificat de la ultima execuție. După aceea, pentru a încheia, aș anula partajarea partajului sursă și apoi aș partaja noul partaj.
/r:5
Acest indicator specifică numărul de ori de câte ori Robocopy va încerca din nou o copiere eșuată a unui fișier sau a unui dosar. Uneori acest lucru eșuează deoarece există un blocaj pe fișier, deoarece utilizatorul sau procesul îl are deschis. Când se întâmplă acest lucru, Robocopy va încerca din nou copierea pentru a vedea dacă fișierul nu mai este blocat. În mod implicit (dacă nu specificați acest parametru), Robocopy va încerca din nou copierea de 1 milion de ori. Știind că vom încerca să copiem din nou acest fișier în timpul următoarei execuții programate la o zi distanță, sunt mai mult decât mulțumit să încerc cinci încercări și, dacă nu se copiază cu succes, să trec la următorul fișier.
/w:5
Acest indicator merge mână în mână cu /r. Acest indicator specifică perioada de timp în secunde care trebuie așteptată între încercări. Valoarea implicită este de 30 de secunde. Punând 2 și 2 împreună, 1.000.000 * 30 = 30.000.000 de secunde sau 500.000 de minute sau 8.333 de ore și 20 de minute sau 347 de zile și 5 ore. Acest lucru înseamnă că, dacă un singur fișier a fost blocat și a rămas blocat, Robocopy ar dura aproape un an înainte de a trece la următoarea sarcină! Aceasta este o necesitate pentru a seta în mod corespunzător stegulețele /r și /w.
/MT:64
Acest steguleț va seta un nou număr maxim de fire de execuție atunci când se fac copii cu mai multe fire de execuție. Acest lucru nu copiază mai multe fișiere sau foldere în același timp, dar în schimb folosește mai multe fire de execuție cu CPU pentru a face copia pentru care a fost setat. Numărul implicit este 8. Mie îmi place să cresc acest număr până la un total de 64 (țineți cont de acest lucru dacă executați mai multe lucrări Robocopy simultan). Există o suprasolicitare a CPU pentru deschiderea fișierului sursă, deschiderea fișierului de destinație, copierea datelor, închiderea fișierului sursă și închiderea fișierului de destinație. Dacă toate aceste operații trebuie efectuate înainte de a trece la fișierul următor, există posibilitatea ca subsistemul I/O să rămână inactiv o parte din timpul în care ar fi putut lucra. Notă: este posibil ca acest lucru să facă sistemul să pară lent, deoarece lucrează decent procesorul. Dacă acest lucru este pe un server de fișiere nou, care nu este încă în producție, nu ar trebui să conteze dacă este „lent”.”
/tee
În mod implicit, atunci când acest lucru este rulat manual din promptul de comandă, Robocopy va afișa ceea ce face pe afișajul ecranului. Cu potențial mii de fișiere de copiat, aceasta reprezintă o modalitate mai puțin eficientă de a găsi ceva ce a mers prost. Dacă se specifică /tee (în loc să se omită complet), se va forța ieșirea în fereastra de consolă, precum și în fișierul jurnal. Acest lucru este util în special dacă este prima dvs. rulare a sarcinii Robocopy și depanați ceva care nu funcționează cum ar trebui. Dacă creez o sarcină programată a lucrării Robocopy, vă recomand să omiteți această comandă.
log+:D:\Shares\log_ShareName _%date:~-10,2%”-„%date:~7,2%”-„%date:~-4,4%.txt
În mod implicit, singura jurnalizare de la Robocopy este afișarea pe ecran. Cu parametrul /log, specificați calea de acces la un fișier nou (sau la un fișier existent). Se va suprascrie fișierul dacă acesta există deja. Cu toate acestea, atunci când efectuați acest proces cu o sarcină programată, este posibil să doriți să vedeți toate iterațiile execuției în loc să o vedeți doar pe cea mai recentă. Dacă specificați + după log (/log+), se va adăuga la fișierul specificat în loc să îl suprascrieți. De asemenea, dacă introduceți „_%date:~-10,2%”-„%date:~7,2%”-„%date:~-4,4%” în numele fișierului, se va crea automat un fișier nou (dacă a fost rulat pentru prima dată în ziua respectivă) cu sufixul _MM_DD_YYYY la sfârșitul fișierului jurnal pentru referințe istorice. În cazul partajărilor de fișiere deosebit de mari, chiar și fișierele jurnal pot crește până la mai mulți gigabytes dacă sunt lăsate să ruleze zile întregi, iar împărțirea lor în jurnale zilnice are mult sens.
/v
Acest parametru afișează ieșirea Verbose, care va arăta fișierele sărite. În general, chiar doriți să vedeți acest lucru pentru a vă asigura că fișierele sărite sunt înregistrate.
În partea a doua a acestui blog, voi arăta cum să configurați o sarcină Robocopy zilnică cu Task Scheduler.
Aveți întrebări despre migrarea serverelor de fișiere? Contactați Sikich. Suntem gata să vă ajutăm.