Migreringar av filservrar med Robocopy del 1 av 2

Den här bloggen är del 1 av en serie i två delar. För att se del 2, klicka här.

Med olika varianter av Windows Server-operativsystem som slutar att stödjas i år har jag befunnit mig med ett hyfsat antal filservermigreringar från ett system till ett annat. Ibland, om servern inte har några andra roller eller funktioner installerade än bara en filserver, kan jag helt enkelt ta bort delningen av resurserna på den ursprungliga servern, ta bort den virtuella hårddisken från den, koppla den virtuella hårddisken till den nya servern och dela resurserna på nytt. På så sätt bibehålls NTFS-behörigheterna om båda servrarna är medlemmar i samma Active Directory-domän. Det går också i allmänhet mycket snabbt eftersom det inte finns något behov av att kopiera terabyte av data från en server till en annan. Den här processen fungerar dock bara elegant när fildelningsdata finns på en volym som inte är där Windows eller några program är installerade.

När behovet uppstår att duplicera data för migreringen till den nya servern går jag alltid tillbaka till gamla trogna-Robocopy (Robust File Copy for Windows). Robocopy har funnits sedan NT4-dagarna 1996, så det är troligen inte första gången du hör talas om det. På den tiden och fram till 2008 fanns det tillgängligt i Windows Resource Kit som kunde laddas ner. Från och med 2008 (och därefter) ingår det i både skrivbords- och serveroperativsystem från och med Vista och Server 2008. Så om du startar en kommandotolk på din dator och skriver ”robocopy /?” är chansen stor att du får se hjälpdumpen med information på skärmen om hur du använder verktyget.

Det finns en hel del alternativ när det gäller migreringar av filservrar med hjälp av Robocopy, och du kanske inte vet var du ska börja. Var försiktig med några av alternativen om du bara provar, eftersom vissa av dem flyttar data (raderar filer och mappar på källplatsen eller målplatsen).

Under årens användning har jag funnit att den här syntaxen är den som jag återkommer till gång på gång:

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

Låt oss dela upp det.

Robocopy
Initierar kommandot.

\\sourceserver\ShareName
Den första parametern är alltid källplatsen. Jag kör vanligtvis alltid Robocopy från den nya filservern eftersom:

  • Den kommer troligen att ha en nyare version av Robocopy installerad; och
  • Jag kommer troligen inte att ha delarna byggda ännu på den nya servern.

D:\Shares\ShareName
Den andra parametern är alltid målplatsen. Jag rekommenderar starkt att du inte lägger dessa på operativsystemsvolymen C:\ när det är möjligt. Jag gillar också att skapa en rotmapp som heter ”Shares” och lägga alla delade mappar i denna mapp i stället för att lämna dem i roten. Det finns flera fördelar med detta som jag har upptäckt genom åren.

Nästa parametrar behöver inte vara i någon särskild ordning.

/e

Detta kopierar underkataloger, inklusive Tomt. Det är här som det verkliga värdet av Robocopy kommer in i bilden. Om den bara kopierade filerna i den översta delade mappen skulle den inte vara särskilt värdefull.

/b
Detta kopierar filer i Backup-läge. Detta skapar inte en VSS-ögonblicksbild, utan är istället användbart om Windows-kontot du kör Robocopy med kanske inte har fullständig åtkomst till källplatsen på grund av ACL:er i NTFS.

/copy all
Så du kanske har frågat dig själv, varför allt det här krånglet? Varför inte navigera till båda platserna och kopiera och klistra in filerna från plats till plats? Den här parametern kopierar all filinformation. På så sätt finns det ingen ny tidsstämpel, ingen ny ägare eller ärvda NTFS-behörigheter när det inte borde finnas, osv. All filinformation omfattar:

  • Data
  • Attribut
  • Timestamps
  • Säkerhet (NTFS ACLs)
  • Ägarinformation
  • Auditeringsinformation

/PURGE
Den här parametern raderar målfiler och mappar som inte längre finns i källan. Observera att tekniskt sett ger användningen av parametrarna /e och /PURGE tillsammans samma effekt som att använda en parameter för sig själv (/mir – för ”mirror”), men jag föredrar att ha ett stort, versalt ”PURGE” i syntaxen så att jag när jag tittar på den vet att jag troligen raderar något. Här uppstår frågan om filen eller mappen inte längre finns på källplatsen, varför skulle jag då försöka kopiera den till målplatsen? Dessutom, varför skulle jag vilja ta bort en fil som aldrig existerade från början.

Detta är det andra stället där Robocopy verkligen briljerar. Jag brukar inte bara köra Robocopy en gång och vara klar om jag inte kopierar inaktiva föråldrade data. Jag brukar skapa en schemalagd aktivitet för att köra en batchfil som innehåller de Robocopy-linjer som ska köras. Med detta i åtanke och med ovanstående parametrar kommer den första exekveringen av jobbet att ta ett tag eftersom den måste göra den första kopian av alla data. När det körs nästa gång (jag brukar ställa in det så att det körs dagligen efter kontorstid) kommer det dock att titta på källan och jämföra den med målet, och om filen inte har ändrats kommer det inte att göra något med den. Om filen i källan är nyare kommer den att skriva över filen i målet. Om filen i källan har tagits bort sedan den senaste körningen av jobbet kommer samma fil i målet att tas bort automatiskt också. När det gäller en faktisk migrering av en fildelning ställer jag in detta ungefär en vecka i förväg, tittar på de loggar som genereras, löser eventuella problem och låter det köras dagligen fram till det schemalagda övergångsdatumet. På övergångsdatumet skulle jag sätta källdelningen till Read-Only och köra Robocopy-jobbet en gång till för att kopiera över alla deltas som har ändrats sedan den senaste körningen. Efteråt, för att avsluta, skulle jag ta bort delningen av källdelningen och sedan dela ut den nya delningen.

/r:5
Den här flaggan anger hur många gånger Robocopy ska försöka igen en misslyckad kopiering av en fil eller en mapp. Ibland misslyckas detta eftersom det finns ett lås på filen eftersom användaren eller processen har den öppen. När detta inträffar kommer Robocopy att försöka kopiera på nytt för att se om låset inte längre finns på filen. Som standard (om du inte anger den här parametern) kommer Robocopy att försöka kopiera 1 miljon gånger. Eftersom jag vet att vi kommer att försöka kopiera den här filen igen under nästa schemalagda körning om en dag, är jag mer än nöjd med att försöka fem försök, och om kopieringen inte lyckas fortsätter jag till nästa fil.

/w:5
Den här flaggan går hand i hand med /r. Den här flaggan anger hur lång tid i sekunder som ska vänta mellan två försök. Standardvärdet är 30 sekunder. Om man lägger ihop 2 och 2 blir det 1 000 000 000 * 30 = 30 000 000 000 sekunder eller 500 000 minuter eller 8 333 timmar och 20 minuter eller 347 dagar och 5 timmar. Detta innebär att om en enda fil var låst och förblev låst skulle det ta nästan ett år innan Robocopy kunde gå vidare till nästa uppgift! Detta är ett måste för att ställa in flaggorna /r och /w på rätt sätt.

/MT:64
Denna flagga ställer in ett nytt maximalt antal trådar när man gör flertrådiga kopior. Detta kopierar inte flera filer eller mappar samtidigt, utan använder istället fler trådar med CPU:n för att göra kopian som den har ställts in för att göra. Standardantalet är 8. Jag gillar att öka detta antal till totalt 64 (tänk på detta om du kör flera Robocopy-jobb samtidigt). Det finns CPU-överskott för att öppna källfilen, öppna destinationsfilen, kopiera data, stänga källfilen och stänga destinationsfilen. Om allt detta måste göras innan man går vidare till nästa fil finns det en risk för att I/O-undersystemet kommer att vara inaktivt en del av den tid som det kunde ha arbetat. Observera: Detta kommer troligen att få systemet att verka trögt eftersom det arbetar hyggligt med processorn. Om detta är på en ny filserver som ännu inte är i produktion bör det inte spela någon roll om den är ”långsam.”

/tee
Som standard, när detta körs manuellt från kommandotolken, kommer Robocopy att skriva ut vad den gör på skärmen. Med potentiellt tusentals filer att kopiera blir det ett mindre effektivt sätt att hitta något som gick fel. Genom att ange /tee (istället för att utelämna det helt och hållet) tvingas den att ge utdata till konsolfönstret, liksom till loggfilen. Detta är särskilt användbart om det är din första körning av Robocopy-jobbet och du felsöker något som inte riktigt fungerar som det ska. Om jag skapar en schemalagd uppgift för Robocopy-jobbet rekommenderar jag att du lämnar bort det här kommandot.

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

Som standard är det bara visning till skärmen som är den enda loggningen från Robocopy. Med parametern /log anger du filvägen till en ny fil (eller en befintlig fil). Filen skrivs över om den redan finns. När du gör den här processen med en schemalagd uppgift kan du dock vilja se alla iterationer av körningen i stället för bara den senaste. Genom att ange + efter logg (/log+) kommer den att lägga till i den angivna filen i stället för att skriva över den. Genom att skriva ”_%date:~-10,2%”-”%date:~7,2%”-”%date:~-4,4%” i filnamnet skapas automatiskt en ny fil (om den kördes för första gången den dagen) med suffixet _MM_DD_YYYYYY i slutet av loggfilen för historiska referenser. För särskilt stora fildelningar kan även loggfilerna växa till flera gigabyte om de körs i flera dagar och att dela upp dem i dagliga loggar är mycket vettigt.

/v
Den här parametern visar Verbose-utmatningen, som visar överhoppade filer. Generellt sett vill du verkligen se detta för att försäkra dig om att överhoppade filer loggas.

I del 2 av den här bloggen kommer jag att visa hur du ställer in ett dagligt Robocopy-jobb med Task Scheduler.

Har du frågor om migrering av dina filservrar? Kontakta Sikich. Vi är redo att hjälpa dig.

Lämna ett svar

Din e-postadress kommer inte publiceras.