Newsgroup: it.comp.os.linux.sys
Titolo: Spostare /home su disco USB: problemi al boot

Ciao a tutti,
ho un laptop con Ubuntu e vorrei spostare la /home (e magari /usr e /
var)
su un HD esterno USB che ho già e che riesco attualmente a montare e
utilizzare sotto Linux.
Partizionato il disco esterno ho copiato il contenuto della /home con
cp -a
nella nuova partizione /dev/sda3 e poi ho modificato /etc/fstab.
Attualmente, in /etc/fstab ho questa linea (che fa riferimento ad una
partizione sul disco fisso, /dev/hda7):
UUID=7ecb97c6-cc25-4492-a067-7d8c0d6d50c8  /home   ext3
defaults        0       2
che ho cambiato in questa:
/dev/sda3      /home           ext3    defaults        0       2
Il problema è che al riavvio sembra non trovare la partizione
/dev/sda3 (anche mettendo l'UUID della partizione il risultato è lo
stesso)
e mi si blocca.
Il messaggio che ottengo è:
* Activating swap...                                          [ok]
* Checking root file system...
fsck 1.39 (29-May-2006)
/dev/hda6: clean, 116933/640000 files, 690290/1279159 blocks     [ok]
* Checking file system...
fsck 1.39 (29-May-2006)
fsck.ext3: Unable to resolve '/dev/sda3'
fsck died with exit status 8                     [fail]
e poi la console di root, dalla quale riesco ad editare /etc/fstab e
far ripartire con la vecchia partizione.
man fsck non mi pare dica molto sul codice di errore 8 (- Operational
error). Ad ogni modo, se nell'ultima colonna della riga sostituisco il
2 con 0 (non faccio fare il check a fsck, ma sarà una buona idea?) il
sistema arriva alla schermata di login, ma non monta comunque la /
home.
Se mi loggo dalla shell (anche come utente normale) la /home risulta
vuota. A questo punto però posso montarla manualmente e allora tutto
riprende a funzionare, ma non mi sembra un sistema ortodosso.
Potrei anche fare uno script che lo faccia in automatico all'avvio, ma
penso che non funzionerebbe con /usr (se non la monto al boot non
troverei neanche i programmi come mount, o sbaglio?).
Le domande sono:
1) E' possibile fare quello che avevo intenzione di fare (home, var e
usr su partizioni su disco USB)? credo di si ma vorrei una conferma
(fermo restando che /boot rimane su disco fisso).
2) E' corretto il procedimento di spostamento sulla nuova partizione?
3) Se si alle precedenti, come posso fare per risolvere il problema?
Grazie in anticipo
Libra


Penso che sia una questione di sincronismi.
Così su due piedi mi viene in mente un trucchetto:
1) su fstab metti noauto al posto giusto, per evitare il montaggio della
/home durante il boot
2) Crea un semplice script e salvalo come /etc/init.d/monta.home:
#!/bin/bash
mount /home
3) sudo chmod 755 /etc/init.d/monta.home
4) sudo update-rc.d monta.home defaults 99
In altre parole, in questo modo il montaggio di tal filesytem avverrà, si
spera, dopo che i device usb sono stati inizializzati.
Probabilmente ci sono altre strade migliori, ma questa dovrebbe funzionare.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 precedenti, come posso fare per risolvere il problema?
Devi assicurarti che il disco USB venga riconosciuto PRIMA della lettura 
di fstab, quindi devi avere il sottosistema USB compilato statico (o 
nell'initrd).
Inoltre ti conviene dare un UUID alla partizione /home, e montarla con 
quello, perche` il disco potrebbe avere un nome diverso, se hai altri 
storage usb attaccati al momento del boot.
Bye.

 nell'initrd).
Mi era venuto in mente di suggerirgli una cosa così, ma poi avevo
liquidato la questione, fra me e me, pensando al fatto che, parlando
di filesystem, l'unico che ha bisogno di un supporto compilato
statico è quello di / (anche in assenza di initrd - almeno così ho
sempre letto: a dire il vero, a me senza initrd, pur compilando
staticamente il mondo, non è mai partito un fico secco, mah...).
Pensavo che, se si può aspettare per il modulo del filesystem di
/home (che parimenti mi sembra necessario sia caricato prima della
lettura di fstab, no?), altrettanto si può fare per i moduli relativi
all'USB. Pertanto avevo suggerito solo di disabilitare il check del
fs in fase di boot, ma la cosa non risolve (arriva al login, ma /home
non si monta).
Perché è sbagliato il mio ragionamento? Grazie mille.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/

 nell'initrd).
Mi era venuto in mente di suggerirgli una cosa così, ma poi avevo
liquidato la questione, fra me e me, pensando al fatto che, parlando
di filesystem, l'unico che ha bisogno di un supporto compilato
statico è quello di / (anche in assenza di initrd - almeno così ho
sempre letto: a dire il vero, a me senza initrd, pur compilando
staticamente il mondo, non è mai partito un fico secco, mah...).
Pensavo che, se si può aspettare per il modulo del filesystem di
/home (che parimenti mi sembra necessario sia caricato prima della
lettura della corrispondente riga di fstab, no?), altrettanto si può


 Inviato viahttp://
arianna.libero.it/usenet/

 nell'initrd).
Ecco, infatti.
Per compilarlo statico nel kernel non dovrebbero esserci problemi, ma
non mi è chiaro cosa intendi per "averlo nell'initrd"?
Mi puoi dare qualche ulteriore indicazione in merito?
Grazie
Libra

 non mi è chiaro cosa intendi per "averlo nell'initrd"?
è un file dove metti moduli kernel (che per un motivo o l'altro nno avevi
compilati statici) che abbisogni di caricare all'inizio della sequenza di
boot
man mkinitrd
ciao

 nell'initrd).
Il problema seguente è che il riconoscimento della periferica USB non è
immediato, c'è un ritardo (hardware e software) che assicura che il bus
sia stabile.
Luca
-- 
Io sono un uomo che non deve chiedere mai. Di solito imploro.

 sia stabile.
A questo riguardo, e più in generale per sistemare correttamente
l'initrd, mi pare si possa fare così:
modificare il file /etc/initramfs-tools/module, inserendo all'ultima
riga:
ehci-hcd usb-storage scsi_mod sd_mod
Modificare il file /etc/initramfs-tools/initramfs.conf, inserendo
all'inizio del file la riga
WAIT=12
E poi ricreare il file initrd per la versione del kernel che
s'intende usare, usando il comando update-initramfs (man per
dettagli).
Allora è per questo che l'usb è particolare? Per il ritardo di cui
necessita?


 sia stabile.
A questo riguardo, e più in generale per sistemare correttamente
l'initrd, mi pare si possa fare così:
modificare il file /etc/initramfs-tools/modules, inserendo all'ultima


 O sbaglio?
Sbagli, il comando mount si trova in /bin (ovvero, una delle directory
indispensabili per l'avvio del sistema)
Enrico

 WAIT=12
La man page di /etc/initramfs-tools/initramfs.conf non mi pare ne
parli: a che serve?
Grazie
Ciao
R


 parli: a che serve?
WAIT=12
o
DELAY=12
dovrebbero appunto inserire un ritardo di 12 secondi, per dar tempo
all'USB di inizializzarsi per benino. Scopro ora che si dovrebbe
anche poter manipolare il tempo che l'USB chiede, per controllare di
essere a posto, intervenendo sul parametro (modparam) "delay_use=nn"
del modulo usb-storage, magari portando nn ad 1 (generalmente, leggo,
il ritardo che l'USB chiede è molto sovradimensionato, e poco utile).
Riguardo a WAIT e DELAY, hai ragione: generalmente non si trovano
riferimenti nei man (però si trovano un sacco di tutorial e simili
che dicono di inserirli nel file di configurazione).
Dopo un bel po' di ricerca, ho trovato queste pagine:
http://bardolph.ling.ohio-state.edu/cgi-bin/dwww?type=runman&location=MKINITRD.CONF/5
http://bardolph.ling.ohio-state.edu/cgi-bin/dwww?type=runman&location=MKINITRD/8
!
Nella prima si fa riferimento a DELAY, nella seconda si spiega che il
ritardo viene inserito prima del caricamento dei moduli:
|        When the system boots using an initrd image created by mkinitrd(8), the
|        linuxrc will wait for an amount of time  which  is  configured  through
|        mkinitrd.conf(5), during which it may be interrupted by pressing ENTER.
|        After that, the modules specified in confdir/modules (and possibly oth-
|        ers if ROOT is not null) will be loaded


 parli: a che serve?
Ad aspettare un tot di secondi. Penso che però dipenda dagli script
delle varie distro. Io ho fatto una cosa del tipo:
for i in `seq 0 $timeout`; do
        if [ -b /dev/whatever ]; then
                found=1
                break;
        fi
        sleep 1
done
(ma era per il root device, e con un ramdisk custom)
Luca
-- 
La differenza fra l'intelligenza e la stupidita`?
All'intelligenza c'e` un limite.