Migracje serwera plików przy użyciu Robocopy część 1 z 2
Ten blog jest częścią 1 dwuczęściowej serii. Aby zobaczyć część 2, kliknij tutaj.
W związku z tym, że różne wersje systemów operacyjnych Windows Server przestają być wspierane w tym roku, spotkałem się z dużą liczbą migracji serwerów plików z jednego systemu do drugiego. Czasami, jeśli serwer nie ma zainstalowanych żadnych innych ról ani funkcji poza serwerem plików, mogę po prostu usunąć udziały z oryginalnego serwera, odłączyć od niego wirtualny dysk twardy, dołączyć wirtualny dysk twardy do nowego serwera i ponownie udostępnić udziały. Zachowuje to uprawnienia NTFS, jeśli oba serwery są członkami tej samej domeny Active Directory. Jest to również ogólnie bardzo szybkie, ponieważ nie ma potrzeby kopiowania terabajtów danych z jednego serwera na drugi. Jednak proces ten działa elegancko tylko wtedy, gdy dane udziału w plikach istnieją na woluminie, na którym nie jest zainstalowany system Windows ani żadne aplikacje.
Gdy pojawia się potrzeba zduplikowania danych do migracji na nowy serwer, zawsze wracam do starego wiernego narzędzia – Robocopy (Robust File Copy for Windows). Robocopy istnieje od czasów NT4 w 1996 roku, więc prawdopodobnie nie jest to pierwszy raz, kiedy o nim słyszysz. W tamtych czasach, aż do 2008 roku, był on dostępny do pobrania z Windows Resource Kit. Począwszy od 2008 roku (i później), został dołączony zarówno do systemów operacyjnych komputerów stacjonarnych, jak i serwerów, począwszy od Vista i Server 2008. Jeśli więc uruchomisz wiersz poleceń na swoim komputerze i wpiszesz „robocopy /?”, zobaczysz na ekranie zrzut pomocy z informacjami, jak używać tego narzędzia.
Istnieje całkiem sporo opcji, jeśli chodzi o migrację serwerów plików przy użyciu Robocopy i możesz nie wiedzieć, od czego zacząć. Uważaj na niektóre z opcji, jeśli dopiero je wypróbowujesz, ponieważ niektóre z nich przenoszą dane (usuwając pliki i foldery w lokalizacji źródłowej lub docelowej).
Przez lata użytkowania znalazłem tę składnię, do której wracam w kółko:
robocopy \\źródło\ Nazwa D:\Shares\ShareName /e /b /copyall /PURGE /r:5 /w:5 /MT:64 /tee /log+:D:\Shares\_ShareName _%date:~-10,2%”-„%date:~7,2%”-„%date:~-4,4%.txt /v
Rozłóżmy to na czynniki pierwsze.
Robocopy
Inicjuje polecenie.
Nazwa źródła
Pierwszym parametrem jest zawsze lokalizacja źródła. Zazwyczaj zawsze uruchamiam Robocopy z nowego serwera plików, ponieważ:
- Prawdopodobnie będzie on miał zainstalowaną nowszą wersję Robocopy; i
- Prawdopodobnie nie będę miał jeszcze zbudowanych udziałów na nowym serwerze.
D:\Shares\ShareName
Drugi parametr jest zawsze lokalizacją docelową. Gorąco zachęcam, aby nie umieszczać ich na woluminie systemu operacyjnego C:™, jeśli to tylko możliwe. Lubię też utworzyć folder główny o nazwie „Shares” i umieścić wszystkie foldery współdzielone w tym folderze, zamiast pozostawiać je w korzeniu. Z biegiem lat przekonałem się, że ma to wiele zalet.
Następne parametry nie muszą być w żadnej konkretnej kolejności.
/e
Kopiuje to podkatalogi, w tym puste. W tym miejscu ujawnia się prawdziwa wartość Robocopy. Gdyby kopiowała tylko pliki w folderze współdzielonym najwyższego poziomu, nie miałaby dużej wartości.
/b
Kopiuje pliki w trybie kopii zapasowej. Nie tworzy to migawki VSS, ale jest użyteczne, jeśli konto Windows, z którego korzystasz z Robocopy, może nie mieć pełnego dostępu do lokalizacji źródłowej z powodu ACL w NTFS.
/copy all
Więc pewnie zadajesz sobie pytanie, po co ten cały kłopot? Dlaczego nie nawigować do obu lokalizacji i nie wkleić plików z jednej lokalizacji do drugiej? Ten parametr kopiuje wszystkie informacje o plikach. W ten sposób nie ma nowego znacznika czasu, właściciela, czy odziedziczonych uprawnień NTFS, gdy nie powinno ich być, itd. Wszystkie informacje o pliku zawierają:
- Data
- Attributes
- Timestamps
- Security (NTFS ACLs)
- Owner info
- Auditing info
/PURGE
Ten parametr usuwa pliki i foldery docelowe, które już nie istnieją w źródle. Zauważ, że technicznie rzecz biorąc, użycie parametrów /e i /PURGE razem daje taki sam efekt jak użycie jednego parametru osobno (/mir – dla „mirror”), ale wolę mieć duże „PURGE” w składni, więc kiedy patrzę na to, wiem, że prawdopodobnie coś usuwam. Pojawia się tutaj pytanie, czy jeśli plik lub folder nie istnieje już w lokalizacji źródłowej, dlaczego miałbym próbować skopiować go do docelowej. Ponadto, dlaczego miałbym usuwać plik, który nigdy nie istniał w pierwszej kolejności.
To jest drugie miejsce, w którym Robocopy naprawdę błyszczy. Zwykle nie uruchamiam Robocopy raz i już, chyba że kopiuję nieaktywne, nieaktualne dane. Zazwyczaj tworzę zaplanowane zadanie, aby uruchomić plik wsadowy, który zawiera linie Robocopy do uruchomienia. Biorąc to pod uwagę oraz powyższe parametry, pierwsze wykonanie zadania zajmie trochę czasu, ponieważ musi ono wykonać wstępną kopię wszystkich danych. Jednakże, gdy zadanie zostanie uruchomione następnym razem (zwykle ustawiam je tak, aby było uruchamiane codziennie po godzinach pracy), spojrzy na źródło i porówna je z celem, i jeśli plik nie uległ zmianie, nic z nim nie zrobi. Jeśli plik w źródle jest nowszy, nadpisze plik w miejscu docelowym. Jeśli plik w źródle został usunięty od ostatniego uruchomienia zadania, ten sam plik w miejscu docelowym zostanie automatycznie usunięty. Dla rzeczywistej migracji udziału plików, ustawiam to około tydzień wcześniej, patrzę na logi, które generuje, rozwiązuję wszelkie problemy i pozwalam mu działać codziennie aż do zaplanowanej daty połączenia. W dniu migracji źródłowy udział zostaje przełączony do trybu tylko do odczytu i uruchamiam Robocopy, aby skopiować wszystkie delty, które zmieniły się od ostatniego uruchomienia. Następnie, aby zakończyć, usunąłbym udział źródłowy, a następnie udostępniłbym nowy udział.
/r:5
Ta flaga określa liczbę powtórzeń nieudanej próby kopiowania pliku lub folderu przez Robocopy. Czasami się to nie udaje, ponieważ na pliku jest blokada, ponieważ użytkownik lub proces ma go otwartego. W takim przypadku Robocopy ponawia próbę kopiowania, aby sprawdzić, czy blokada nie jest już zdjęta z pliku. Domyślnie (jeśli nie określisz tego parametru) Robocopy ponawia próbę kopiowania 1 milion razy. Wiedząc, że będziemy próbować skopiować ten plik ponownie podczas następnego zaplanowanego uruchomienia za jeden dzień, jestem bardziej niż zadowolony z próby pięciu prób, a jeśli nie uda się skopiować pomyślnie, przejdź do następnego pliku.
/w:5
Ta flaga idzie w parze z /r. Ta flaga określa ilość czasu w sekundach, jaką należy odczekać między kolejnymi próbami. Domyślnie jest to 30 sekund. Składając 2 i 2 razem, 1,000,000 * 30 = 30,000,000 sekund lub 500,000 minut lub 8,333 godzin i 20 minut lub 347 dni i 5 godzin. Oznacza to, że jeśli pojedynczy plik zostałby zablokowany i pozostałby zablokowany, Robocopy potrzebowałby prawie roku zanim przeszedłby do następnego zadania! Jest to konieczne, aby odpowiednio ustawić flagi /r i /w.
/MT:64
Ta flaga ustawi nową maksymalną liczbę wątków podczas wykonywania kopii wielowątkowych. To nie kopiuje wielu plików lub folderów w tym samym czasie, ale zamiast tego używa więcej wątków z CPU do wykonania kopii, która została ustawiona do wykonania. Domyślnie jest to 8, ja lubię zwiększać tę liczbę do 64 (pamiętaj o tym, jeśli wykonujesz kilka zadań Robocopy jednocześnie). Istnieje narzut procesora związany z otwieraniem pliku źródłowego, otwieraniem pliku docelowego, kopiowaniem danych, zamykaniem pliku źródłowego i zamykaniem pliku docelowego. Jeżeli wszystkie te czynności muszą być wykonane przed przejściem do następnego pliku, istnieje możliwość, że podsystem I/O będzie bezczynny przez część czasu, w którym mógłby pracować. Uwaga: to prawdopodobnie sprawi, że twój system będzie wydawał się powolny, ponieważ procesor pracuje przyzwoicie. Jeśli jest to nowy, jeszcze nieprodukcyjny serwer plików, nie powinno mieć znaczenia, czy jest „powolny”.”
/tee
Domyślnie, kiedy Robocopy jest uruchamiany ręcznie z wiersza poleceń, wyświetla na ekranie to, co robi. Przy potencjalnie tysiącach plików do skopiowania, jest to mało efektywny sposób na znalezienie czegoś, co poszło nie tak. Określenie /tee (zamiast całkowitego pominięcia tej opcji) wymusi wyświetlanie danych do okna konsoli, jak również do pliku dziennika. Jest to szczególnie przydatne, jeśli jest to pierwsze uruchomienie Robocopy i chcesz rozwiązać problem z czymś, co nie do końca działa tak jak powinno. Jeśli tworzę zaplanowane zadanie Robocopy, zalecam pominięcie tego polecenia.
log+:D:D:\Nlog_ShareName _%date:~-10,2%”-„%date:~7,2%”-„%date:~-4,4%.txt
Domyślnie Robocopy wyświetla tylko logi na ekranie. Z parametrem /log, określ ścieżkę do nowego pliku (lub istniejącego). Plik ten zostanie nadpisany, jeżeli już istnieje. Jednakże, gdy wykonujemy ten proces za pomocą zaplanowanego zadania, możemy chcieć zobaczyć wszystkie iteracje przebiegu, a nie tylko ostatnią. Przez podanie znaku + po log (/log+), zostanie on dołączony do podanego pliku, zamiast go nadpisywać. Również przez umieszczenie „_%date:~-10,2%”-„%date:~7,2%”-„%date:~-4,4%” w nazwie pliku, automatycznie utworzy nowy plik (jeśli został uruchomiony po raz pierwszy tego dnia) z końcówką _MM_DD_YYY na końcu pliku dziennika dla odniesień historycznych. W przypadku szczególnie dużych udziałów plików, nawet pliki dziennika mogą rosnąć do wielu gigabajtów, jeśli są uruchamiane przez kilka dni, a dzielenie ich na dzienne dzienniki ma wiele sensu.
/v
Ten parametr pokazuje wyjście Verbose, które pokaże pominięte pliki. Ogólnie rzecz biorąc, naprawdę chcesz to zobaczyć, aby upewnić się, że pominięte pliki są rejestrowane.
W części 2 tego bloga pokażę, jak skonfigurować codzienne zadanie Robocopy za pomocą Harmonogramu zadań.
Masz pytania dotyczące migracji serwerów plików? Skontaktuj się z firmą Sikich. Jesteśmy gotowi do pomocy.