Boot di una usb 3.0 da una usb 2.0

7 risposte [Ultimo contenuto]
Ritratto di TheDiamond
TheDiamond
(Junior)
Offline
Junior
Iscritto: 26/02/2014
Messaggi: 6

Ciao ragazzi, dopo la mia presentazione vi spiego subito un mio problema: ho una asus P5K-E in cui ho inserito una scheda PCI express usb 3.0 (Atlantis Land P001-USB30-PCX) dove ho collegato una memoria usb.
Il mio intento è far partire Debian 7.4 da li ma siccome questa scheda non viene rilevata dalla motherboard all'avvio, non riesco a fare il boot dalla memoria. Sono riuscito a installare l'os partendo da una seconda usb 2.0 ma ovviamente se non posso partire dalla 3.0 non mi serve a molto.
Come posso fare? Credo di dover in qualche modo installare un kernel e dire a grub di partire dalla usb 3.0 ma forse sto sbagliando. Sad
Grazie

Where there is a shell there is a way.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Se il BIOS non riconosce la scheda, non potrai mai fare il boot da lì.

Potresti usare due chiavette USB: una piccola da inserire nella porta 2.0 con sopra Grub, il kernel e l'initrd e una seconda da inserire nella porta 3.0 con il resto del SO. All'avvio, Grub carica in memoria l'initrd , poi esegue il kernel. Questi riconosce la scheda e carica il diver giusto (che dev'essere nell'initrd), dopodiché sposta la root sulla seconda chiavetta.

Ritratto di TheDiamond
TheDiamond
(Junior)
Offline
Junior
Iscritto: 26/02/2014
Messaggi: 6

Esatto pensavo di fare una cosa del genere ma non saprei come fare praticamente. Potete aiutarmi?

Where there is a shell there is a way.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Diciamo che la chiavetta USB 3.0 con il SO sia vista dal kernel come /dev/WWW e quella USB 2.0
minimale con solo il necessario per l'avvio si chiami /dev/XXX.

Quello che bisogna fare è preparare la chiavetta minimale così:

mke2fs /dev/XXX
mount -t ext2 /dev/XXX /mnt
mkdir /mnt/boot
cp /boot/initrd.img-ZZZ /mnt/boot
cp /boot/vmlinuz-ZZZ /mnt/boot
grub-install --boot-directory=/mnt/boot /dev/XXX

In pratica la formattiamo in ext2, la montiamo per poterci copiare dentro kernel e initrd e infine ci installiamo sopra Grub. Ovviamente ZZZ va sostituito con la versione del kernel che hai.

Ora bisogna personalizzare la configurazione di Grub in questo modo:

cat >/mnt/boot/grub/grub.cfg <<EOF
# FILE DI CONFIGURAZIONE DI GRUB
#
insmod part_msdoc
insmod ext2
insmod gzio
 
menuentry 'Eccomi qui' {
	echo 'Carico Linux...'
	linux /boot/vmlinuz-ZZZ root=/dev/WWW rootwait ro
	echo 'Carico initrd...'
	initrd /boot/initrd.img-ZZZ
	echo 'Avvio...'
	boot
}
EOF
Grub dovrebbe caricare prima il kernel, poi l'initrd dalla chiavetta, ma passando al kernel due parametri interessanti: root= dice che, dopo l'inizializzazione, la root dev'essere spostata su /dev/WWW; invece rootwait dice che quel dispositivo potrebbe non essere presente fin dall'inizio e di aspettare che compaia.

Il problema è garantire che /dev/WWW rappresenti sempre la chiavetta giusta. Forse la soluzione migliore è usare un percorso tipo /dev/disk/by-uuid/UUU dove UUU devi scoprirlo tu, ad esempio con "ls -l /dev/disk/by-uuid".

Ovviamente dico tutto questo in via del tutto teorica: spero non ti spaventi l'idea di sperimentare! Wink

Ritratto di TheDiamond
TheDiamond
(Junior)
Offline
Junior
Iscritto: 26/02/2014
Messaggi: 6

Grazie mille oggi sperimento e ti faccio sapere, purtroppo posso solo verso sera. Speriamo di non fare casini! Smile

Where there is a shell there is a way.

Ritratto di TheDiamond
TheDiamond
(Junior)
Offline
Junior
Iscritto: 26/02/2014
Messaggi: 6

Grazie mcortese! Funziona alla grande!
Ho dovuto solo aggiungere l'opzione --force al grub-install: "grub-install --boot-directory=/mnt/boot /dev/XXX --force" e ho usato il "/dev/disk/by-uuid/UUU". Sei stato molto preciso e gentile! grazie ancora. Big Grin

Where there is a shell there is a way.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Per completare la discussione potresti riassumere in un post conclusivo le operazioni esatte che hai fatto o almeno riportare il tuo grub.cfg: sarebbe un ottimo servizio per chi in futuro avesse il tuo stesso problema.

Ritratto di TheDiamond
TheDiamond
(Junior)
Offline
Junior
Iscritto: 26/02/2014
Messaggi: 6

Tenendo le lettere identificative come le tue le operazioni sono queste:

mke2fs /dev/XXX
mount -t ext2 /dev/XXX /mnt
mkdir /mnt/boot
cp /boot/initrd.img-ZZZ /mnt/boot
cp /boot/vmlinuz-ZZZ /mnt/boot
grub-install --boot-directory=/mnt/boot /dev/XXX --force
ls -l /dev/disk/by-uuid

Io il grub.cfg ho dovuto crearlo, non era presente.
nano /mnt/boot/grub/grub.cfg

e questo è il suo codice dove inserisco l'UUID della partizione dove risiede l'installazione:

insmod part_msdoc
insmod ext2
insmod gzio
 
menuentry 'Avvia Usb 3.0' {
        echo 'Carico Linux...'
        linux /boot/vmlinuz-ZZZ root=/dev/disk/by-uuid/UUUUUUUU-UUUU-UUUU-UUUU-UUUUUUUUUUUU  rootwait ro
        echo 'Carico initrd...'
        initrd /boot/initrd.img-ZZZ 
        echo 'Avvio...'
        boot
}

Where there is a shell there is a way.