Spesso ci si trova ad avere la necessità di creare una copia di file e cartelle, mantenendo tutte le relative impostazioni di sicurezza a livello NTFS senza dover andare a ri-settare tutte le permission sul file system.
Come spiegato in questa KB Microsoft, le autorizzazioni per una cartella o un file non ereditano automaticamente dal padre se la cartella viene spostata e l’origine e la destinazione si trovano sullo stesso volume NTFS. Le autorizzazioni vengono invece ereditate se la cartella viene copiata o se l’origine e la destinazione si trovano su volumi diversi.
Quindi ricapitolando ecco una tabella a tal proposito.
PERMESSI DURANTE UNA COPIA O SPOSTAMENTO
Quando un file o cartella viene copiata o spostata, si possono verificare 3 comportamenti:
- Se viene copiato un file/cartella, la nuova cartella/file acquisisce i permessi della destinazione della copia
- Se il file/cartella viene spostato all’interno dello stesso volume, mantiene i permessi
- Se si sposta da un volume ad un altro, vengono ereditati i permessi del volume/cartella di destinazione
Per superare queste limitazioni è possibile utilizzare utilizzare Robocopy (Robust File Copy), tool a riga di comando presente di default come comando nativo in Windows Vista e sistemi operativi successivi.
RoboCopy risulta essere uno strumento estremamente robusto, flessibile e configurabile, con più di 80 opzioni.
Permette di gestire qualsiasi batch e può essere utilizzato per effettuare il mirroring affidabile di directory o strutture di directory.
Come già esposto prima, tramite Robocopy sarà possibile garantire il mantenimento durante la copia o gli spostamenti di tutti gli attributi e le proprietà NTFS; durante i processi di copia/move tramite un ID specifico, permette di riavviare le procedure nel momento in cui le connessioni di rete sono soggette a interruzioni.
Principali Opzioni Robocopy
/S :: copia le sottodirectory non vuote.
/E :: copia le sottodirectory, incluse quelle vuote.
/LEV:n :: copia solo i primi n livelli dell’albero di directory di origine.
/Z :: copia i file in modalità di riavvio.
/B :: copia i file in modalità di backup.
/ZB :: usa la modalità di riavvio; in caso di accesso negato usa la modalità di backup.
/J :: copia con I/O senza buffer (consigliato per file di grandi dimensioni).
/EFSRAW :: copia tutti i file crittografati in modalità RAW EFS.
/COPY:flagcopia :: indica gli elementi dei file da copiare (impostazione predefinita /COPY:DAT).
(flag copia : D=dati, A=attributi, T=timestamp).
(S=sicurezza=ACL NTFS, O=informazioni proprietario,U=informazioni controllo).
/SEC :: copia i file con sicurezza (equivale a /COPY:DATS).
/COPYALL :: copia tutte le informazioni dei file (equivale a/COPY:DATSOU).
/NOCOPY :: non copia alcuna informazione dei file (utile con /PURGE).
/SECFIX :: aggiorna la sicurezza su tutti i file, anche quelli ignorati.
/TIMFIX :: corregge l’ora di tutti i file, anche quelli ignorati.
/PURGE :: elimina i file e le directory di destinazione non più esistenti nell’origine.
/MIR :: esegue il mirroring di un albero di directory (equivale a /E pi— /PURGE).
/MOV :: sposta i file (li elimina dall’origine dopo la copia).
/MOVE :: sposta i file e le directory (li elimina dall’origine dopo la copia).
/A+:[RASHCNET] :: aggiunge gli attributi specificati ai file copiati.
/A-:[RASHCNET] :: rimuove gli attributi specificati dai file copiati.
/CREATE :: crea solo alberi directory e file vuoti.
/FAT :: crea file di destinazione usando solo nomi FAT 8.3.
/256 :: disabilita il supporto dei percorsi pi— lunghi di 256 caratteri.
/MON:n :: monitorizza l’origine; eseguito di nuovo se rileva più di n modifiche.
/MOT:m :: monitorizza l’origine; eseguito di nuovo dopo m minuti in caso di modifiche.
/RH:hhmm-hhmm :: ore di esecuzione in cui è possibile avviare nuove copie.
/PF :: controlla le ore di esecuzione in base al file (non al passaggio).
/IPG:n :: scarto tra pacchetti (ms), per liberare larghezza di banda su linee lente.
/SL :: copia i collegamenti simbolici rispetto alla destinazione.
/MT[:n] :: esegue copie in multithreading con n thread (valore predefinito 8).
n deve essere almeno 1 e non può essere maggiore di 128.
Questa opzione non è compatibile con le opzioni /IPG e /EFSRAW.
Reindirizza l’output con l’opzione /LOG per ottenere migliori prestazioni.
/DCOPY:flag copia :: identifica cosa copiare per le directory (impostazione
predefinita: /DCOPY:DA).
(flag copia : D=dati, A=attributi, T=timestamp).
/NODCOPY :: non copia alcuna informazione delle directory. Per impostazione predefinita, viene eseguito il comando
/DCOPY:DA.
/NOOFFLOAD :: consente di copiare file senza utilizzare il meccanismo di offload della copia di Windows.
ESEMPI DI UTILIZZO DI ROBOCOPY
Ecco un esempio di sintassi Robocopy:
ROBOCOPY “C:\” “Z:\Test” /MIR /W:1 /R:1 /LOG+:C:\salvataggio.txt
Tramite questa stringa verrà effettuata una copia di tutto il disco C:\ su una cartella del disco Z:\test .
L’opzione /MIR indica che effettua una copia detta mirroring, ovvero la cartella di origine uguale alla cartella di destinazione. Nella cartella di destinazione vengono cancellati eventuali dati presenti, quindi pericoloso in questo senso. Copia tutti i file, ricrea le directory, ed in caso di ricopia effettua la copia delle sole cartelle o file modificati.
L’opzione /W:1 indica i secondi che deve aspettare il sistema prima di ricominciare l’operazione, default 30 sec, in questo caso l’ho impostato a 1 sec.
L’opzione /R:1 indica che se il file in copia è occupato deve ritentare l’operazione 1 volta.
L’opzione /LOG:C:\salvataggio.txt indica dove salvare il file di log, è importate creare la directory, in questo caso sovrascrive l’ultimo log.
/LOG+:C:\salvataggio.txt con il +, a differenza del comando sopracitato, aggiunge il log al file creato, utile per tenere traccia dei log se ricorsivi.
Robocopy è sicuramente uno strumento molto flessibile e utilizzabile in molti scenari (script, operazioni di backup, migrazione di contenuti file-system); in alternativa se la necessità è quella di migrare un file server è possibile ricorrere ai Windows Server Migration Tools a riguardo si vedano i seguenti: