Tiedostopalvelimen migraatiot Robocopyn avulla osa 1 2:sta
Tämä blogi on osa 1 2-osaisesta sarjasta. Jos haluat nähdä osan 2, klikkaa tästä.
Kun Windows Server -käyttöjärjestelmien eri makujen tuki loppuu tänä vuonna, olen huomannut, että minulla on kohtuullinen määrä tiedostopalvelinsiirtoja järjestelmästä toiseen. Joskus, jos palvelimelle ei ole asennettu muita rooleja tai toimintoja kuin pelkkä tiedostopalvelin, voin yksinkertaisesti poistaa alkuperäisen palvelimen jako-osuudet, irrottaa virtuaalisen kiintolevyn siitä, liittää virtuaalisen kiintolevyn uuteen palvelimeen ja jakaa jako-osuudet uudelleen. Näin NTFS-oikeudet säilyvät, jos molemmat palvelimet ovat saman Active Directory -toimialueen jäseniä. Se on yleensä myös hyvin nopeaa, koska ei tarvitse kopioida teratavuja tietoja palvelimelta toiselle. Tämä prosessi toimii kuitenkin tyylikkäästi vain silloin, kun tiedostojen jakotiedot ovat sellaisella tietovälineellä, johon ei ole asennettu Windowsia tai mitään sovelluksia.
Kun tulee tarve kopioida tietoja siirtymistä varten uudelle palvelimelle, palaan aina vanhaan uskolliseen Robocopyyn (Robust File Copy for Windows). Robocopy on ollut olemassa NT4:n päivistä 1996 lähtien, joten et todennäköisesti kuule siitä ensimmäistä kertaa. Silloin ja vuoteen 2008 asti se oli saatavilla Windows Resource Kit -latauksen yhteydessä. Vuodesta 2008 alkaen (ja sen jälkeen) se oli mukana sekä työpöytä- että palvelinkäyttöjärjestelmissä Vistasta ja Server 2008:sta alkaen. Jos siis käynnistät tietokoneen komentorivin ja kirjoitat ”robocopy /?”, saat todennäköisesti näytöllesi help-dumppia, jossa kerrotaan, miten apuohjelmaa käytetään.
Vaihtoehtoja tiedostopalvelinsiirtoihin Robocopy-ohjelman avulla on melko paljon, etkä ehkä tiedä, mistä aloittaa. Ole varovainen joidenkin vaihtoehtojen kanssa, jos olet vasta kokeilemassa, sillä jotkin niistä siirtävät tietoja (poistavat tiedostoja ja kansioita lähde- tai kohdesijainnissa).
Vuosien käytön aikana olen havainnut tämän syntaksin olevan se, johon palaan yhä uudelleen ja uudelleen:
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
Kerrotaanpa tuo alaspäin.
Robocopy
Aloittaa komennon.
\\\sourceserver\ShareName
Ensimmäinen parametri on aina lähteen sijainti. Käynnistän Robocopyn yleensä aina uudelta tiedostopalvelimelta, koska:
- Se on todennäköisesti asentanut uudemman version Robocopysta; ja
- Uudelle palvelimelle ei todennäköisesti ole vielä rakennettu jakoja.
D:\Shares\ShareName
Kakkosparametrina on aina määränpään sijainti. Suosittelen lämpimästi, ettet laita näitä käyttöjärjestelmän C:\-tietueelle aina kun mahdollista. Tykkään myös luoda juurikansiota nimeltä ”Shares” ja laittaa kaikki jaetut kansiot tähän kansioon sen sijaan, että jättäisin ne juurikansioon. Siitä on useita etuja, jotka olen havainnut vuosien varrella.
Seuraavien parametrien ei tarvitse olla missään tietyssä järjestyksessä.
/e
Tämä kopioi alihakemistot, myös Tyhjät. Tässä Robocopyn todellinen arvo tulee esiin. Jos se kopioisi vain ylimmän tason jaetun kansion tiedostot, sillä ei olisi suurta arvoa.
/b
Tämä kopioi tiedostot varmuuskopiointitilassa. Tämä ei luo VSS-tilannekuvaa, mutta sen sijaan tämä on hyödyllinen, jos Windows-tilillä, jolla käytät Robocopya, ei ehkä ole täydellistä pääsyä lähdepaikkaan NTFS:n ACL:ien vuoksi.
/copy all
Olet ehkä kysynyt itseltäsi, miksi kaikki tämä vaiva? Miksi et navigoi molempiin sijainteihin ja kopioi ja liitä tiedostoja sijainnista toiseen? Tämä parametri kopioi kaikki tiedostojen tiedot. Näin ei tule uutta aikaleimaa tai omistajaa tai periytyviä NTFS-oikeuksia, vaikka niitä ei pitäisi olla, jne. Kaikki tiedostotiedot sisältävät:
- Data
- Attribuutit
- Aikaleimat
- Turvallisuus (NTFS ACL:t)
- Omistajan tiedot
- Auditointitiedot
/PURGE
Tämä parametri poistaa kohdetiedostot ja -kansiot, joita ei ole enää olemassa lähdetiedostossa. Huomaa, että teknisesti parametrien /e ja /PURGE käyttäminen yhdessä antaa saman vaikutuksen kuin yhden parametrin käyttäminen yksinään (/mir – tarkoittaa ”peiliä”), mutta haluan mieluummin ison ison ”PURGE”-kirjaimen syntaksissa, jotta tiedän sitä katsoessani, että todennäköisesti poistan jotain. Tässä yhteydessä herää kysymys, että jos tiedostoa tai kansiota ei enää ole olemassa lähdepaikassa, miksi yrittäisin kopioida sen kohteeseen. Lisäksi, miksi haluaisin poistaa tiedoston, jota ei ole koskaan ollut olemassa.
Tämä on toinen kohta, jossa Robocopy todella loistaa. En yleensä suorita Robocopy-ohjelmaa vain kerran ja se on valmis, paitsi jos kopioin inaktiivista vanhentunutta dataa. Luon yleensä ajastetun tehtävän ajamaan erätiedoston, joka sisältää Robocopy-rivit suoritettavaksi. Tätä silmällä pitäen ja edellä mainituilla parametreilla tehtävän ensimmäinen suoritus kestää jonkin aikaa, koska sen on kopioitava ensin kaikki tiedot. Kun se kuitenkin suoritetaan seuraavan kerran (asetan sen yleensä suoritettavaksi päivittäin työajan jälkeen), se tarkastelee lähdetiedostoa ja vertaa sitä kohdetiedostoon, ja jos tiedosto ei ole muuttunut, se ei tee sille mitään. Jos lähdetiedosto on uudempi, se korvaa kohdetiedoston. Jos lähdetiedosto on poistettu työn viimeisimmän suorituksen jälkeen, sama tiedosto poistetaan automaattisesti myös kohdetiedostosta. Kun kyseessä on varsinainen tiedostojakojen siirto, asetan tämän noin viikkoa etukäteen, katson sen tuottamat lokit, korjaan mahdolliset ongelmat ja annan sen toimia päivittäin suunniteltuun siirtopäivään asti. Siirtopäivänä asetan lähdeosion lukukieltoon ja suoritan Robocopy-työn vielä kerran kopioidakseni kaikki deltat, jotka ovat muuttuneet edellisen ajon jälkeen. Sen jälkeen poistaisin lähdejaon jakamisen ja jakaisin uuden jaon.
/r:5
Tämä lippu määrittää, kuinka monta kertaa Robocopy yrittää uudelleen epäonnistunutta tiedoston tai kansion kopiointia. Joskus tämä epäonnistuu, koska tiedosto on lukittu, koska käyttäjä tai prosessi on avannut sen. Kun näin käy, Robocopy yrittää kopiointia uudelleen nähdäkseen, onko tiedosto enää lukittu. Oletusarvoisesti (jos et määritä tätä parametria) Robocopy yrittää kopiointia uudelleen 1 miljoona kertaa. Tietäen, että yritämme kopioida tätä tiedostoa uudelleen seuraavan ajastetun ajon aikana, joka on päivän päässä, olen enemmän kuin tyytyväinen kokeilemalla viittä uusintayritystä, ja jos kopiointi ei onnistu, siirrymme seuraavaan tiedostoon.
/w:5
Tämä lippu kulkee käsi kädessä /r:n kanssa. Tämä lippu määrittää sekunteina ajan, joka odotetaan uusintayritysten välillä. Oletusarvo on 30 sekuntia. Laskemalla 2 ja 2 yhteen saadaan 1 000 000 * 30 = 30 000 000 sekuntia tai 500 000 minuuttia tai 8 333 tuntia ja 20 minuuttia tai 347 päivää ja 5 tuntia. Tämä tarkoittaa, että jos yksittäinen tiedosto olisi lukittu ja pysyisi lukittuna, Robocopy tarvitsisi lähes vuoden ennen kuin se siirtyisi seuraavaan tehtävään! Tämä on välttämätöntä, jotta /r- ja /w-liput voidaan asettaa asianmukaisesti.
/MT:64
Tämä lippu asettaa uuden säikeiden enimmäismäärän, kun tehdään monisäikeisiä kopioita. Tämä ei kopioi useita tiedostoja tai kansioita samanaikaisesti, vaan käyttää sen sijaan useampia säikeitä CPU:lla suorittaakseen asetetun kopioinnin. Oletusluku on 8. Haluan nostaa tämän luvun 64:ään (pidä tämä mielessä, jos käytät useita Robocopy-töitä samanaikaisesti). Lähdetiedoston avaaminen, kohdetiedoston avaaminen, tietojen kopioiminen, lähdetiedoston sulkeminen ja kohdetiedoston sulkeminen aiheuttavat prosessorikuluja. Jos kaikki tämä on tehtävä ennen kuin siirrytään seuraavaan tiedostoon, on mahdollista, että I/O-alijärjestelmä on käyttämättömänä osan ajasta, jonka se olisi voinut työskennellä. Huomautus: tämä saa järjestelmän todennäköisesti näyttämään hitaalta, koska se käyttää prosessoria kunnolla. Jos tämä on uudella tiedostopalvelimella, joka ei ole vielä tuotannossa, ei pitäisi olla väliä, jos se on ”hidas.”
/tee
Oletusarvoisesti, kun tämä ajetaan manuaalisesti komentoriviltä, Robocopy tulostaa näytölle, mitä se tekee. Kun kopioitavia tiedostoja voi olla tuhansia, se tekee siitä vähemmän tehokkaan tavan löytää jotain, joka meni pieleen. Määrittämällä /tee (sen sijaan, että jättäisit sen kokonaan pois) se pakottaa sen tulostamaan konsoli-ikkunaan sekä lokitiedostoon. Tämä on erityisen hyödyllistä, jos Robocopy-tehtävä suoritetaan ensimmäistä kertaa ja etsit vikaa jostain, joka ei toimi niin kuin pitäisi. Jos luon ajastetun tehtävän Robocopy-työstä, suosittelen jättämään tämän komennon pois.
log+:D:\Shares\log_ShareName _%päivämäärä:~-10,2%”-”%päivämäärä:~7,2%”-”%päivämäärä:~-4,4%.txt
Oletusarvoisesti Robocopy-työn ainoa lokitietojen tallennus on näytön näyttäminen näytölle. Määritä tiedoston polku uuteen tiedostoon (tai olemassa olevaan tiedostoon) parametrilla /log. Se korvaa tiedoston, jos se on jo olemassa. Kun teet tämän prosessin ajastetun tehtävän avulla, voit kuitenkin haluta nähdä kaikki suorituksen iteraatiot viimeisimmän iteraation sijaan. Määrittämällä + login perään (/log+), se liitetään määritettyyn tiedostoon sen sijaan, että se kirjoittaisi sen yli. Myös lisäämällä tiedoston nimeen ”_%date:~-10,2%”-”%date:~7,2%”-”%date:~-4,4%” luodaan automaattisesti uusi tiedosto (jos se ajetaan ensimmäisen kerran kyseisenä päivänä), jonka jälkiliite on _MM_DD_YYYYYY lokitiedoston loppuun historiallista viittausta varten. Erityisen suurissa tiedosto-osuuksissa jopa lokitiedostot voivat kasvaa useisiin gigatavuihin, jos ne jätetään ajettaviksi päiviksi, ja niiden jakaminen päivittäisiin lokitiedostoihin on järkevää.
/v
Tämä parametri näyttää Verbose-tulosteen, joka näyttää ohitetut tiedostot. Yleensä haluat todella nähdä tämän varmistaaksesi, että ohitetut tiedostot kirjataan lokiin.
Tämän blogin toisessa osassa näytän, miten päivittäinen Robocopy-tehtävä asetetaan Task Schedulerilla.
Onko sinulla kysyttävää tiedostopalvelimien siirtämisestä? Ota yhteyttä Sikichiin. Olemme valmiita auttamaan.