Spostare la home in un'altra partizione o in un altro disco

Intro
Nei giorni scorsi stavo scaricando una nuova distro su uno dei pc che utilizzo per gli esperimenti, quando, improvvisamente è apparso l'alert: spazio su disco insufficiente!
Confesso che non c'ero più abituato. Le mostruose capacità degli hard disk odierni (che riusciamo egualmente a riempire - a volte c'è anche da chiedersi di cosa) tendono a farci scordare quanto possano incidere pochi Giga in sistemi più datati.
Sono così stato costretto a "ricordarmi" che, in effetti, il povero vecchio pc (che pure fa la sua parte come server) aveva un hard disk che, per gli standard di oggi, può essere definito miserello. Sperimenta oggi, sperimenta domani, ho finito per occuparlo tutto.

Che fare? La cosa più ovvia poteva sembrare quella di aggiungere un secondo hard disk da usare come deposito. Ma ho considerato che questo non avrebbe risolto il problema a lungo. La home di questo pc, infatti, contiene i dati di vari utenti (thin client) e avrebbe comunque finito col riempirsi assai presto. Ecco all'ora l'idea di spostare la home da un'altra parte, sul secondo hard disk, appunto. Tra l'altro (salvo nei casi in cui la home sia già installata su una partizione separata), lo spostamento della home libera automaticamente spazio anche per il sistema operativo, i programmi, etc.
L'unico dubbio (una volta eseguito il backup) era la praticabilità dell'operazione in tempi relativamente brevi.
Caccia su internet e soluzione trovata.


Premessa
L'operazione può essere eseguita in varie modalità. Quella descritta di seguito sfrutta le peculiarità del file system di Linux (in questo caso ext3) che permette di montare dischi, dispositivi e partizioni come fossero cartelle.

Questa mini-guida non è tutta farina del mio sacco, anzi: mi sono limitato a ricostruire la giusta sequenza estrapolandola da un carteggio trovato in un forum, ad eliminare alcuni refusi e un paio di errori (banali, ma determinanti), a riscrivere il testo in un Italiano comprensibile e, infine, a testare la validità della procedura.

Ho effettuato la prova su una Ubuntu 8.04 (server LTSP), "spostando" la home dalla partizione del file system (8GB totali) ad una partizione separata (12GB per la sola home), collocata in un altro disco.

Giudizio sull'operazione: funziona, è abbastanza facile da eseguire ed è piuttosto rapida.


Preparazione

a)

Preparate/create la partizione nella quale spostare la cartella home.
Ad es. usate gparted  per stabilirne le dimensioni e per formattarla con file system ext3 (o reiserfs).
Annotatevi il modo in cui viene identificata la nuova partizione
(ad es. /dev/sda7 cioè disco 1, partizione 7).  
Nel caso qui descritto, assumiamo sia /dev/sdb1 cioè disco 2, partizione 1.
Ovviamente sostituite questo valore con quello della vostra nuova partizione.

b)

Il resto dell'operazione si effettua da console.
Tutti i comandi vanno eseguiti da root
.

c)

E' consigliabile eseguire la procedura senza interfaccia grafica.

Ci sono vari modi per eseguire i passi b) e c)
Io ho preferito avviare Ubuntu direttamente come root in modalità testuale:
- scegliendo all'avvio l'opzione "recovery mode"
  (se grub non appare, premete esc all'avvio del sistema);
- poi, nel "Recovery Menu", scegliendo l'opzione "root   Drop to root shell prompt".


 

Procedura

1)

Create una directory (spesso indicata anche come cartella) temporanea "/Tmp" (attenzione a maiuscole e minuscole) e montatevi temporaneamente la nuova partizione:
cd /
mkdir Tmp
mount /dev/sdb1 /Tmp

(dove "sdb1" va sostituito col valore della vostra nuova partizione).

2)

Ora che Tmp contiene la vostra nuova partizione,
copiatevi tutto il contenuto della home:

cd /home
cp -dpr * /Tmp

(può volerci del tempo: attendete).

3)

Una volta completata la copia, rinominate la vecchia directory home
(serve solo temporaneamente, per sicurezza. Una volta accertato il buon esito dell'operazione, si provvederà a cancellarla).

mv /home /home_old

4)

Create una nuova directory home
mkdir /home

5)

Smontate la directory temporanea e rimontate la nuova partizione nella nuova home 
umount /Tmp
mount /dev/sdb1 /home

(dove "sdb1" va sostituito col valore della vostra nuova partizione).

6)

Controllate che le dimensioni della nuova e della vecchia home coincidano.
Annotatevi i valori restituiti da questi comandi:

du -sk /home
du -sk /home_old
NOTA: dovrebbero coincidere. In realtà, a me sono risultati leggermente differenti.
Confrontando i contenuti della nuova "/home" e della vecchia "/home_old" ho trovato che la differenza consisteva nella presenza di "lost+found" nella nuova /home.

7)

Fate una copia di sicurezza di fstab (il file che indica i dispositivi che devono essere montati, con le rispettive opzioni):
cp /etc/fstab /etc/fstab.ORIG

8)

Aprite fstab con un editor (in questo caso "nano"):  
nano /etc/fstab
e aggiungete in coda la seguente riga:
/dev/sdb1 /home ext3 defaults,errors=remount-ro 0 2
(Attenzione: in precedenza avevo erroneamente scritto "/dev/sda3" anziché "/dev/sdb1" - ringrazio Filippo Giunchedi per la segnalazione).
NOTA: sdb1 va sostituito col valore della vostra nuova partizione.
se la partizione è formattata con reiserfs come file system, nella riga sostituite ext3 con reiserfs.


Per salvare: Crtl+X poi Yes poi Invio

9)

Riavviate normalmente:
reboot

10)

Fate delle prove (non abbiate fretta).
Se tutto ok, accedete alla console e cancellate la vecchia "/home_old" e la directory temporanea "/Tmp" (attenzione a maiuscole e minuscole):

sudo su
quindi immettete la password di root, poi
cd /
rm -r /home_old
rm -r /Tmp



Sono convinto ci siano modi più eleganti per compiere la stessa operazione.
Indicateli, se li conoscete.
Per cortesia, segnalate eventuali errori: correggendoli offriremo un miglior supporto ad altri utenti.

Joris Rossi