Migrazioni di file server con Robocopy parte 1 di 2
Questo blog è la parte 1 di una serie in 2 parti. Per vedere la parte 2, clicca qui.
Con vari gusti di sistemi operativi Windows Server che vanno fuori supporto quest’anno, mi sono trovato con un discreto numero di migrazioni di file server da un sistema all’altro. A volte, se il server non ha altri ruoli o funzioni installate oltre al semplice file server, allora potrei semplicemente rimuovere le condivisioni sul server originale, staccare il disco rigido virtuale da esso, collegare il disco rigido virtuale al nuovo server e condividere nuovamente le condivisioni. Questo mantiene i permessi NTFS se entrambi i server sono membri dello stesso dominio Active Directory. È anche generalmente molto veloce, poiché non c’è bisogno di copiare terabyte di dati da un server all’altro. Tuttavia, questo processo funziona elegantemente solo quando i dati della condivisione dei file esistono su un volume che non è dove sono installati Windows o qualsiasi applicazione.
Quando si presenta la necessità di duplicare i dati per la migrazione al nuovo server, torno sempre al vecchio fedele Robocopy (Robust File Copy for Windows). Robocopy esiste dai tempi di NT4 nel 1996, quindi probabilmente non è la prima volta che ne sentite parlare. Allora e fino al 2008, era disponibile con il download di Windows Resource Kit. A partire dal 2008 (e dopo), è stato fornito in bundle con entrambi i sistemi operativi desktop e server a partire da Vista e Server 2008. Quindi, è probabile che se avvii un prompt dei comandi sul tuo computer e digiti “robocopy /?” vedrai il dump di informazioni sullo schermo su come usare l’utilità.
Ci sono parecchie opzioni quando si tratta di migrazioni di file server usando Robocopy, e potresti non sapere da dove iniziare. Fai attenzione con alcune delle opzioni se stai solo provando, perché alcune di esse spostano i dati (cancellando i file e le cartelle nella posizione di origine o in quella di destinazione).
Negli anni di utilizzo, ho trovato questa sintassi quella a cui continuo a tornare più e più volte:
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
Distruggiamo il tutto.
Robocopy
Inizia il comando.
\sourceserver\ShareName
Il primo parametro è sempre la posizione di origine. Di solito eseguo sempre Robocopy dal nuovo file server come:
- E’ probabile che abbia una nuova versione di Robocopy installata; e
- E’ probabile che non abbia ancora costruito le condivisioni sul nuovo server.
D:\Shares\ShareName
Il secondo parametro è sempre la posizione di destinazione. Ti consiglio vivamente di non metterli sul volume del sistema operativo C:\quando possibile. Mi piace anche creare una cartella principale chiamata “Shares” e mettere tutte le cartelle condivise in questa cartella invece di lasciarle alla radice. Ci sono molteplici vantaggi che ho trovato nel corso degli anni.
I prossimi parametri non hanno bisogno di essere in nessun ordine particolare.
/e
Questo copia le sottodirectory, incluse quelle vuote. È qui che entra in gioco il vero valore di Robocopy. Se copiasse solo i file nella cartella condivisa di primo livello, non avrebbe molto valore.
/b
Copia i file in modalità Backup. Questo non crea un’istantanea VSS, ma invece, questo è utile se l’account Windows con cui stai eseguendo Robocopy potrebbe non avere accesso completo alla posizione sorgente a causa di ACL in NTFS.
/copy all
Potresti esserti chiesto, perché tutto questo fastidio? Perché non navigare in entrambe le posizioni e fare un copia-incolla dei file da una posizione all’altra? Questo parametro copia tutte le informazioni sui file. In questo modo, non c’è un nuovo timestamp, o proprietario, o permessi NTFS ereditati quando non dovrebbero esserci, ecc. Tutte le informazioni sul file includono:
- Dati
- Attributi
- Timestamps
- Sicurezza (NTFS ACLs)
- Info proprietario
- Info audit
/PURGE
Questo parametro elimina i file e le cartelle di destinazione che non esistono più nel sorgente. Notate che tecnicamente, usando i parametri /e e /PURGE insieme si ottiene lo stesso effetto che usando un parametro da solo (/mir – per “mirror”), ma io preferisco avere una grande “PURGE” maiuscola nella sintassi così quando la guardo, so che probabilmente sto cancellando qualcosa. Qui sorge la domanda: se il file o la cartella non esiste più nella posizione di origine, perché dovrei cercare di copiarlo nella destinazione. Inoltre, perché dovrei voler cancellare un file che non è mai esistito?
Questo è il secondo posto dove Robocopy brilla davvero. Di solito non eseguo Robocopy una volta e ho finito, a meno che non stia copiando dati inattivi e vecchi. Di solito creo un’attività pianificata per eseguire un file batch che include le linee di Robocopy da eseguire. Con questo in mente e con i parametri di cui sopra, la prima esecuzione del lavoro richiederà un po’ di tempo perché deve fare la copia iniziale di tutti i dati. Tuttavia, quando viene eseguito la volta successiva (di solito lo imposto per l’esecuzione quotidiana dopo l’orario di lavoro), guarderà la sorgente e la confronterà con la destinazione, e se il file non è cambiato, non farà nulla con esso. Se il file nel sorgente è più nuovo, sovrascriverà il file nella destinazione. Se il file nell’origine è stato cancellato dall’ultima esecuzione del lavoro, lo stesso file nella destinazione sarà cancellato automaticamente. Per un’effettiva migrazione di file share, lo imposto circa una settimana prima, guardo i log che genera, risolvo eventuali problemi e lo lascio funzionare quotidianamente fino alla data prevista per il cutover. Alla data del cutover, metto la condivisione sorgente in sola lettura ed eseguo il lavoro Robocopy ancora una volta per copiare qualsiasi delta che sia cambiato dall’ultima esecuzione. In seguito, per concludere, toglierei la condivisione della sorgente e poi condividerei la nuova condivisione.
/r:5
Questa bandiera specifica il numero di volte in cui Robocopy riprova una copia fallita su un file o una cartella. A volte questo fallisce perché c’è un blocco sul file perché l’utente o il processo lo ha aperto. Quando questo accade, Robocopy riproverà la copia per vedere se il blocco non è più sul file. Per impostazione predefinita (se non si specifica questo parametro), Robocopy riproverà la copia 1 milione di volte. Sapendo che proveremo a copiare di nuovo questo file durante la prossima esecuzione programmata tra un giorno, sono più che contento di provare cinque volte, e se non copia con successo, procedere al file successivo.
/w:5
Questa bandiera va di pari passo con /r. Questo flag specifica la quantità di tempo in secondi da attendere tra un tentativo e l’altro. Il valore predefinito è 30 secondi. Mettendo insieme 2 e 2, 1.000.000 * 30 = 30.000.000 secondi o 500.000 minuti o 8.333 ore e 20 minuti o 347 giorni e 5 ore. Questo significa che se un singolo file fosse bloccato e rimanesse bloccato, Robocopy impiegherebbe quasi un anno prima di procedere al compito successivo! Questo è un must per impostare i flag /r e /w in modo appropriato.
/MT:64
Questo flag imposterà un nuovo numero massimo di thread quando si fanno copie multithread. Questo non copia più file o cartelle allo stesso tempo, ma invece usa più threads con la CPU per fare la copia che è stata impostata. Il numero di default è 8. Mi piace aumentare questo numero fino a un totale di 64 (tienilo a mente se si eseguono più lavori di Robocopy contemporaneamente). C’è l’overhead della CPU nell’aprire il file sorgente, aprire il file di destinazione, copiare i dati, chiudere il file sorgente e chiudere il file di destinazione. Se tutto questo deve essere fatto prima di procedere al file successivo, c’è la possibilità che il sottosistema I/O sia inattivo per una parte del tempo che avrebbe potuto lavorare. Nota: questo probabilmente farà apparire il vostro sistema lento, dato che sta facendo lavorare la CPU decentemente. Se questo è su un nuovo file server non ancora in produzione, non dovrebbe importare se è “lento”.
/tee
Per default, quando questo viene eseguito manualmente dal prompt dei comandi, Robocopy mostrerà cosa sta facendo sullo schermo. Con potenzialmente migliaia di file da copiare, è un modo poco efficiente per trovare qualcosa che è andato storto. Specificando /tee (invece di lasciarlo fuori del tutto) lo forzerà ad emettere l’output nella finestra della console, così come il file di log. Questo è particolarmente utile se è la tua prima esecuzione del lavoro di Robocopy, e stai cercando di risolvere qualcosa che non funziona come dovrebbe. Se creo un’attività pianificata del lavoro di Robocopy, raccomando di lasciare fuori questo comando.
log+:D:\Shares\log_ShareName _%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%.txt
Di default, l’unico log di Robocopy viene visualizzato sullo schermo. Con il parametro /log, specifica il percorso di un nuovo file (o di un file esistente). Sovrascriverà il file se esiste già. Tuttavia, quando si fa questo processo con un’attività pianificata, si potrebbe voler vedere tutte le iterazioni dell’esecuzione invece che solo la più recente. Specificando il + dopo log (/log+), verrà aggiunto al file specificato invece di sovrascriverlo. Anche mettendo “_%date:~-10,2%”-“%date:~7,2%”-“%date:~-4,4%” nel nome del file creerà automaticamente un nuovo file (se eseguito per la prima volta quel giorno) con un suffisso di _MM_DD_YYYY alla fine del file di log per riferimenti storici. Per le condivisioni di file particolarmente grandi, anche i file di log possono crescere in più gigabyte se lasciati in esecuzione per giorni e dividerli in log giornalieri ha molto senso.
/v
Questo parametro mostra l’output Verbose, che mostrerà i file saltati. Generalmente, vuoi davvero vedere questo per assicurarti che i file saltati siano registrati.
Nella parte 2 di questo blog, mostrerò come impostare un lavoro giornaliero di Robocopy con Task Scheduler.
Hai domande sulla migrazione dei tuoi file server? Contatta Sikich. Siamo pronti ad aiutarvi.