Debian / Grub2: spostare la partizione di root su una nuova unità?


30

Qualcuno ha un suggerimento su come spostare la partizione di root su una nuova unità e impostare grub2 per l'avvio su quella unità? Sembra che non abbia fortuna nel dare istruzioni a grub-mkconfig su cosa voglio fare (es. Chroot'int nella mia nuova radice confonde solo tutti gli script).

Sfondo Sto eseguendo Debian Squeeze su un NAS a bassa potenza senza testa. La mia configurazione attuale è /accesa sda0e /bootaccesa sde0(una scheda CF): avevo bisogno del separato /bootperché ho sd[a-d]bisogno di fare un spin-up ritardato. Ora ho trovato un vecchio disco IDE da 2,5 "da utilizzare come /incluso /bootper permettermi di far girare tutti i dischi grandi.

Quello che ho provato Fondamentalmente sono andato

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

Poi ho provato

chroot /mnt/newroot
update-grub

Ma ciò fallì con grub che chiedeva se root fosse montato. Poi ho fatto un tentativo sincero di impostare /mnt/newroot/grub/grub.cfgper trovare l'immagine del kernel sdf5, seguito da un grub-install --root-directory=/mnt/newroot /dev/sdf. Ma questo mi ha appena lanciato un prompt di salvataggio di grub quando ho provato a fare il boot sdf.

Il mio piano di backup è semplicemente reinstallare, quindi una domanda bonus (nessun segno di spunta per questo): cosa devo fare per ottenere la configurazione di lvm2 e mdadm? È tutto memorizzato nei filesystem (e verrà scoperto automaticamente) o devo occuparmene da solo?

Soluzione (grazie a Maciej Piechotka): Come sottolinea Maciej, ho bisogno di un chroot adeguato per far funzionare tutti gli strumenti di grub. Per riferimento, ecco come l'ho fatto:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

Tutti i file sono ora copiati (vedi qui per una discussione sulle strategie di copia). Correggi il nuovo etc/fstabin modo che punti alla nuova radice:

janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old  etc/fstab
    -UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 /     ext3 errors=remount-ro         0 1
    -UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults                  0 2
    +UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 /     ext3 noatime,errors=remount-ro 0 1

Infine, monta dev, syse procalla nuova radice e chroot:

janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none  /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on 
janus@nasguld:/mnt/newroot$ sudo chroot .

Ora siamo passati alla radice futura esattamente come apparirà. Secondo Maciej, dovrebbe essere ok solo per chiamare grub-install, ma ho fatto una update-grubprima occhiata al generato /boot/grub/grub.cfgprima di installare il bootloader. Non sono sicuro che verrà aggiornato automaticamente?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb

Pubblica il contenuto /etc/default/grube l'esatta trascrizione di update-grub.
Gilles 'SO- smetti di essere malvagio' il

(pensieri dopo aver aggiunto la soluzione): In realtà potrebbe essere che il problema non fosse stato aggiornato /etc/fstabin chroot(questo sarebbe coerente con il update-grublamentarsi che "\ non è montato"). Se dovessi farlo di nuovo, proverei prima senza preoccuparmi di montare i file system speciali nel chroot.
Janus

solo una nota: non dimenticare di smontare / mnt / newroot prima di riavviare!
Giacomo Tesio,

Ecco le istruzioni su come spostare la partizione di root / sulla nuova unità nvme, mantenendo / home su hdd. lucasmanual.com/blog/…
Lucas

Risposte:


20

Monta filesystem di base e copia / modifica file mentre chrooting come:

  • / dev ( mount -o bind /dev/ /path/to/chroot/dev)
  • / proc ( mount -t proc none /path/to/chroot/proc)
  • / sys ( mount -t sysfs none /path/to/chroot/sys)

IIRC che ha funzionato per me durante l'installazione di Grub 2 in arch e numerose volte su Gentoo. Quindi dopo chroot da /path/to/chrootcomandare era semplicemente:

grub-install /dev/<boot_disk>

A partire da lvm2 (e credo che Madm non l'abbia usato) la configurazione è memorizzata su disco. C'è una configurazione che dovrebbe essere letta per scoprire i dispositivi. Supponendo che i tuoi dispositivi si trovino in posizioni standard ( /dev/sd*o /dev/hd*) non dovrebbero esserci problemi.


PS. Non mi fiderei del semplice cp del sistema live in quanto ci sono diversi posti in cui può andare storto:

  • Hai dimenticato di cambiare /etc/fstabe altri file utili
  • File modificati durante l'accesso
  • Coping spazzatura ( /tmpecc.)

Grazie. Quindi, in pratica, stai dicendo che faccio un chroot sciatto :) Ci proverò con un chroot adeguato. cp -axdovrebbe andare bene (forse dopo essere passato al runlevel per singolo utente) secondo questo vecchio howto: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus

Ha funzionato un incanto! Grazie mille per l'aiuto.
Giano

1
@Janus: vorrei copiare i dati dalla distribuzione Live per essere al sicuro. Sono contento comunque abbia funzionato.
Maciej Piechotka,

update-grubPrima dovevo farlo install-grub.
Aryeh Leib Taurog,

3

puoi installare grub dalla live distro senza chrooting:

grub-install /dev/hda --root-directory=/mnt/guest/

Grazie. Non sono sicuro che funzionerebbe qui: a quanto ho capito, grub-installaggiorna solo i file di immagine grub e scrive l'MBR: In particolare, grub.cfgnon viene aggiornato. Come ho commentato sopra, montare le directory speciali potrebbe essere eccessivo, ma penso ancora che il chroot sia il modo di aggiornare grub.cfgin modo semplice?
Giano

Sì, non ha funzionato neanche per me. Devi andare update-grubal lavoro e quello non ha --root-directoryo qualcosa del genere, no?
Mitar,

0

A proposito se stai aggiungendo una partizione (come una windows) su cui non vuoi che grub scriva a nel settore di avvio, ma vuoi che grub lo sappia quando il tuo computer si avvia, puoi ripetere la scansione delle partizioni e generare un nuovo file grub.cfg usando il comando grub_mkconfig come segue in una sessione terminale

cd / boot / grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

Ora, quando esegui l'avvio della tua attuale partizione Linux (che aveva l'avvio di GRUB) ora saprà dell'altra partizione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.