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.