7. Copiare i file del vecchio disco in quello nuovo

Dovete andare in modalità single-user prima di iniziare a copiare il disco, in modo da fermare i demoni di sistema e preservare lo stato dei log, e per impedire agli utenti di effettuare il login:

/sbin/telinit 1

Copiando il disco fisso, dovete copiare tutte le directory e i file, inclusi i collegamenti simbolici.

In ogni caso *non* dovete copiare la directory /new-disk, poiché questo copierebbe il nuovo disco su se stesso!

Inoltre, dovete creare la directory /proc nel nuovo disco, ma non dovete copiare il suo contenuto: /proc è un file system virtuale che non ha nessun file vero, ma contiene invece informazioni sui processi che vengono eseguiti nel sistema.

Mostreremo tre modi differenti per copiare il vecchio disco in quello nuovo. Questo può richiedere un po' di tempo, specialmente se avete un disco grande o poca memoria. Potete aspettarvi di riuscire a copiare 10Mb al minuto, e possibilmente molto di più.

Potete seguire lo stato della copia usando il comando df da un altro terminale. Provate watch df o watch ls -l /new-disk per vedere un rapporto aggiornato ogni due secondi; premete Ctrl-C per terminare la visualizzazione. Siate consapevoli che eseguire il programma watch stesso rallenterà la copia.

cp -ax / /new-disk

Questo è il metodo più semplice, ma funzionerà solo se il vostro sistema Linux originale è in un disco con una sola partizione.

L'opzione -a conserva il file system il più possibile. L'opzione -x limita cp a un solo file system; questo è necessario per evitare di copiare le directory /new-disk e /proc.

Solo per SuSE. Solo con questo metodo, dovete anche creare la directory /dev/pts nel nuovo disco. Usate il comando mkdir /new-disk/dev/pts".

Nota

Nota: Usando l'opzione -x le versioni recenti di cp creeranno le directory /new-disk/new-disk e /new-disk/proc, sebbene le directory saranno vuote. Se queste directory verranno create, dovreste cancellare /new-disk/new-disk, ma tenere /new-disk/proc.

cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-disk | sh

(scrivetelo tutto su una sola riga)

Questo comando va alla directory radice e poi copia tutti i file e le directory in /new-disk eccetto /new-disk e /proc . Notate che la prima opzione dopo ls è il numero 1, non la lettera L!

Questo comando dovrebbe funzionare in ogni circostanza.

cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp /usr /var /new-disk

(sempre tutto su una sola riga)

L'ultima directory, /new-disk, è la destinazione per il comando cp Tutte le altre directory sono le sorgenti. Perciò, stiamo copiando tutte le directory elencate in /new-disk.

Con questo metodo semplicemente elencate direttamente le directory che volete copiare. Qui listiamo tutte le mie directory tranne /new-disk e /proc. Se non potete usare gli altri metodi per qualsiasi motivo, potete sempre usare questo comando per specificare manualmente le directory che volete copiare.

Solo con questo metodo, se ci sono dei file nella directory radice, avete bisogno di un altro comando per copiarli. In particolare, questo è richiesto con Debian e Slackware, poiché queste distribuzioni mettono file nella directory radice:

cp -dp /* /.* /new-disk

Le versioni precedenti di questo Mini How-TO affermavano che si poteva usare anche tar per copiare il disco, ma è stato scoperto un bug in questo metodo. Ovviamente esistono molti altri sistemi per copiare il disco, ma questi tre sono i più semplici, veloci e sicuri.

Dopo aver usato uno di questi tre metodi, dovete anche creare la directory /proc nel nuovo disco, se non esiste già:

mkdir /new-disk/proc

A questo punto, potete verificare la struttura dei file nel nuovo disco, se lo desiderate:

umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk

Se il disco ha più di una partizione, dovete smontarle a partire da quella più interna prima di eseguire fsck.ext2: nell'esempio menzionato sopra, dovreste prima smontare le partizioni al terzo livello, poi quelle del secondo e infine quella del primo.

Potete anche confrontare i due dischi, per assicurarvi che i file sono stati copiati a dovere:

find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -exec cmp {} /new-disk{} \;

(scrivete tutto questo su una sola riga)

Solo per Slackware. l'installazione di base di Slackware (solo la serie "A") non include il comando cmp , perciò non potrete eseguire questo comando se avete installato solo i file di base. Il comando cmp è nella serie "AP1".)

Questo confronterà solo i file regolari, non file "speciali" a caratteri o a blocchi (nella directory /dev), sockets, etc., poiché il comando cmp non funziona bene con questi. Sarà benvenuto qualsiasi suggerimento su come verificare questi file "speciali".