You are on page 1of 5

Copia & Backup

Copy-On-Write
Un file Copy-On-Write (.cow) è un tipo di file immagine che viene utilizzato come disco virtuale
per una macchina virtuale o un sistema operativo in esecuzione in un ambiente virtualizzato.
A differenza di un'immagine completa di un disco virtuale, un file cow conserva solo le modifiche
apportate all'immagine originale, riducendo quindi le dimensioni del file e il tempo necessario per
la creazione e l'uso del disco virtuale.
Ad esempio, se si ha un'immagine di un disco virtuale di 10 GB e si utilizza un file cow per le
modifiche apportate a questo disco virtuale, il file .cow conterrà solo le modifiche apportate
all'immagine originale e non tutto il disco virtuale di 10 GB.
Ciò consente di risparmiare spazio su disco, velocizzare la creazione e l'uso dei dischi virtuali e
semplificare la gestione dei dischi virtuali. Inoltre, i file cow sono utilizzati per la creazione di
snapshot di dischi virtuali, in quanto possono essere facilmente creati copiando il file cow e
permettono di effettuare backup dei dati senza interrompere il normale funzionamento del
sistema in esecuzione.
In sintesi, i file cow sono utilizzati per migliorare l'efficienza dell'utilizzo dei dischi virtuali e
semplificare la gestione dei dati nei sistemi virtualizzati. Consentono di non sovrascrivere le
immagini di dischi originali, l'immagine originale (backing file) viene usata in modalità read-only.

Riassumendo, dato un file .cow questo contiene le differenze con il file originale:
§ Una stessa immagine originale può essere condivisa tra tanti sistemi virtuali
§ Ciascuno di questi sistemi scriverà le sue differenze sul suo file .cow
§ Questo consente di risparmiare spazio perché i file .cow sono scattered-file
§ Attenzione al timestamp dei file, il file originale deve essere più vecchio del file .cow

1
Copia & Backup
Copy-On-Write
Le utility uml_mkcow e uml_moo sono due strumenti utilizzati nel contesto delle macchine
virtuali basate su User-Mode Linux (UML) per creare e gestire i file cow (copy-on-write).
§ uml_mkcow
La utility uml_mkcow viene utilizzata per creare un nuovo file cow a partire da un'immagine
disco esistente. Invece di copiare l'intero contenuto dell'immagine originale, uml_mkcow crea
un file cow vuoto e lo associa all'immagine originale. Tutte le modifiche successive
all'immagine originale vengono salvate solo nel file cow.
Esempio:
Crea un file cow (Copy-On-Write) a partire da un file di immagine di sistema rootfs.ext4
$ uml_mkcow rootfs.ext4 rootfs.cow
Il file .cow creato conterrà solo le differenze rispetto all'immagine di sistema originale,
permettendo di risparmiare spazio su disco quando si creano molte istanze di una stessa
immagine di sistema. In pratica, il file .cow memorizza solo le modifiche che vengono
effettuate durante l'esecuzione del sistema virtuale.
§ uml_moo
La utility uml_moo viene utilizzata per gestire i file cow esistenti. In particolare, uml_moo
permette di unire il contenuto di un file cow con l'immagine disco originale, producendo una
nuova immagine disco completa. Questa operazione può essere utile per consolidare le modifiche
apportate a un'immagine virtuale in un'unica immagine completa e più facile da gestire.
Esempio:
Supponiamo di avere un file .cow chiamato "rootfs.cow" e vogliamo creare una nuova
immagine ext3 chiamata "rootfs_new.ext3".
$ uml_moo rootfs.cow rootfs_new.ext3
Questo comando utilizzerà il file cow "rootfs.cow" per creare una nuova immagine ext3
chiamata "rootfs_new.ext3". Il processo di conversione può richiedere alcuni minuti a
seconda delle dimensioni dell'immagine originale. Una volta completata la conversione, il nuovo
file "rootfs_new.ext3" sarà pronto per essere utilizzato come immagine root per UML.

2
Copia & Backup
Archiviazione
Il comando tar è un'utility di archiviazione dei file che consente di creare, modificare, visualizzare
e estrarre file di archivio in formato .tar. Di seguito alcune delle opzioni più comuni di tar e
alcuni esempi di utilizzo (Per maggiori informazioni è possibile consultare la pagina del manuale).
§ c
Crea un nuovo file di archivio tar.
$ tar -cvf myarchive.tar file1 file2
Crea un nuovo file di archivio chiamato myarchive.tar contenente i file file1 e file2.
§ x
Estrae i file dall'archivio tar.
$ tar -xvf myarchive.tar
Estrae tutti i file dall'archivio myarchive.tar nella directory corrente.
§ r
Aggiunge file all'archivio tar.
$ tar -rvf myarchive.tar file3
Aggiunge il file file3 all'archivio myarchive.tar.
§ t
Visualizza il contenuto dell'archivio tar.
$ tar -tvf myarchive.tar
Elenca tutti i file contenuti nell'archivio myarchive.tar.
§ z
Compressione/decompressione gzip.
$ tar -czvf myarchive.tar.gz file1 file2
Crea un nuovo file di archivio compresso myarchive.tar.gz contenente i file file1 e file2.
$ tar -xzvf myarchive.tar.gz
Estrae tutti i file dall'archivio compresso myarchive.tar.gz nella directory corrente.
§ j
Compressione/decompressione bzip2.
$ tar -cjvf myarchive.tar.bz2 file1 file2
Crea un nuovo file di archivio compresso myarchive.tar.bz2 contenente i file file1 e file2.
$ tar -xjvf myarchive.tar.bz2
Estrae tutti i file dall'archivio compresso "myarchive.tar.bz2" nella directory corrente.
§ f
Specifica il nome del file di archivio tar.
$ tar -cvf myarchive.tar file1 file2
Crea un nuovo file di archivio chiamato myarchive.tar contenente i file file1 e file2.
§ p
Preserva i permessi dei file durante l'estrazione.
$ tar -xvpf myarchive.tar
Estrae tutti i file dall'archivio myarchive.tar nella directory corrente preservando i
permessi dei file.

3
Copia & Backup
Salvataggio
Alla fine di una sessione di lavoro può far comodo salvare le proprie immagini UML. Il meccanismo
Copy-On-Write è molto pignolo sulla consistenza dei file.
file cow ↔ file ext4
L'età dei file deve corrispondere, in caso contrario UML si rifiuterà all'avvio successivo di montare i
dischi, occorre quindi preservare le date di accesso:
§ Opzione -p (preserve) o -a (archive) del comando cp
§ Opzione --atime-preserve del comando tar
Ed è meglio sfruttare le caratteristiche dei sparse file
§ Opzione --sparse=always del comando cp
§ Opzione -S (S maiuscola) del comando tar

Sparse File
Un file sparsificato è un tipo di file in cui le regioni vuote o non allocate vengono rappresentate in
modo efficiente senza occupare spazio fisico sul disco. Solo i blocchi di dati effettivamente scritti
occupano spazio, mentre le sezioni vuote vengono "riempite" virtualmente con zeri quando viene
letto il file. Ciò consente di risparmiare spazio di archiviazione per i file con grandi regioni di dati
non utilizzati o con zeri.

Attenzione:
Operare sui file sempre a macchine (guest) spente.

Esempi:
Creare un archivio contenente tutti i file COW e le immagini disco originali.
$ tar -cSzvf my_images.tgz *.cow *.ext4 --atime-preserve

§ -c
Specifica l'operazione di creazione di un nuovo archivio.
§ -S
Abilita la modalità di compressione per l'archivio creato.
§ -z
Utilizza il formato di compressione gzip per comprimere l'archivio.
§ -v
Abilita la modalità verbosa, che visualizza l'output dettagliato durante l'esecuzione del
comando (mostra i file che vengono compressi/inclusi nell'archivio).
§ -f my_images.tgz
Specifica il nome dell'archivio di output e il suo formato, in questo caso my_images.tgz (un
file di archivio compresso in formato tar gzip).
§ *.cow *.ext4
Indica i file da includere nell'archivio. In questo caso, vengono inclusi tutti i file con estensione
.cow e .ext4 presenti nella directory corrente.
§ --atime-preserve
Preserva gli attributi di accesso (atime) dei file durante l'archiviazione, questo mantiene
intatta l'informazione relativa all'ultimo accesso ai file all'interno dell'archivio.

4
Copia & Backup
Salvataggio
Esempio:
Copiare tutti i file COW nella sottocartella backup.
$ mkdir backup
$ cp -p --sparse=always *.cow ./backup/
Oppure:
$ cp -a --sparse=always *.cow ./backup/
§ -p
L'opzione -p (o --preserve) viene utilizzata per preservare gli attributi originali dei file
durante la copia. Questi attributi possono includere le autorizzazioni di accesso, le date di
modifica e i proprietari dei file.
§ -a
L'opzione -a (o --archive) viene utilizzata per effettuare una copia ricorsiva dei file e delle
directory, mantenendo le proprietà originali dei file. Questo include i permessi di accesso, i
timestamp (data e ora di creazione, modifica e accesso) e altre informazioni.
§ --sparse=always
L'opzione --sparse=always viene utilizzata per creare i file di copia in modo sparsificato,
anche se i file originali non erano sparsificati. Ciò significa che i file di copia utilizzeranno la
tecnica di allocazione sparsa per ridurre l'utilizzo dello spazio su disco se ci sono regioni vuote
o non allocate nel file originale.
§ *.cow
Specifica che verranno copiati tutti i file con estensione .cow presenti nella directory
corrente.
§ ./backup/
Indica la directory di destinazione in cui verranno copiati i file. In questo caso, i file .cow
saranno copiati nella directory di backup appena creata.

Fondere i File
Per fondere i file .cow con le immagini disco originali, UML mette a disposizione il comando uml_moo.
$ ls -lsh
total 1,5G
1,5G -rw-r--r-- 1 user user 1,5G mag 16 21:59 h1.cow
0 lrwxrwxrwx 1 user user 45 mag 16 22:00 rootfs.ext4
$ uml_moo -b rootfs.ext4 h1.cow merged_disk.ext4
$ ls -lsh
total 2,4G
1,5G -rw-r--r-- 1 user user 1,5G mag 16 21:59 h1.cow
885M -rw-r--r-- 1 user user 1,5G mag 16 22:13 merged_disk.ext4
0 lrwxrwxrwx 1 user user 45 mag 16 22:00 rootfs.ext4

You might also like