Debian / Grub2: Déplacer la partition racine vers un nouveau lecteur?

30

Quelqu'un at-il une suggestion sur la façon de déplacer la partition racine vers un nouveau lecteur et de configurer grub2 pour démarrer sur ce lecteur? Il me semble que je n'ai aucune chance de demander à grub-mkconfig ce que je veux faire (par exemple, chroot'int dans ma nouvelle racine confond simplement tous les scripts).

Contexte J'utilise Debian Squeeze sur un NAS sans tête et de faible puissance. Ma configuration actuelle est /sur sda0et /bootsur sde0(une carte CF): Je avais besoin séparé /bootparce que le sd[a-d]besoin de faire un spin-up retardée. Maintenant, j'ai trouvé un vieux disque IDE 2.5 "à utiliser comme /y compris /bootpour me permettre de tourner tous les gros disques vers le bas.

Ce que j'ai essayé Fondamentalement, je suis allé

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

J'ai essayé

chroot /mnt/newroot
update-grub

Mais cela a échoué avec grub demandant si root était monté. Ensuite, j'ai fait une tentative sans enthousiasme de mettre en place /mnt/newroot/grub/grub.cfgpour trouver l'image du noyau sur sdf5, suivi d'un grub-install --root-directory=/mnt/newroot /dev/sdf. Mais cela m'a juste envoyé une invite de sauvetage grub lorsque j'ai essayé de démarrer sdf.

Mon plan de sauvegarde consiste simplement à réinstaller, donc une question bonus (pas de coche pour celui-ci): Que dois-je faire pour faire passer ma configuration lvm2 et mdadm? Est-ce que tout est stocké dans les systèmes de fichiers (et sera-t-il découvert automatiquement), ou dois-je en prendre moi-même?

Solution (merci à Maciej Piechotka): Comme le souligne Maciej, j'ai besoin d'un chroot approprié pour que tous les outils grub fonctionnent. Pour référence, voici comment je l'ai fait:

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

Tous les fichiers sont maintenant copiés (voir ici pour une discussion sur les stratégies de copie). Fixez le nouveau etc/fstabpour pointer vers la nouvelle racine:

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

Enfin, montez dev, syset procvers la nouvelle racine et le nouveau 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 .

Nous sommes maintenant chrootés vers la future racine exactement comme elle apparaîtra. Selon Maciej, il devrait être correct d'appeler grub-install, mais j'ai fait une update-grubpremière pour jeter un œil au fichier généré /boot/grub/grub.cfgavant d'installer le chargeur de démarrage. Je ne suis pas sûr qu'il sera automatiquement mis à jour?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Janus
la source
Publiez le contenu /etc/default/grubet la transcription exacte de update-grub.
Gilles 'SO- arrête d'être méchant'
(réflexions après avoir ajouté la solution): Il se peut que le problème soit que je n'ai pas mis /etc/fstabà jour le chroot(ce serait cohérent avec le fait de se update-grubplaindre que "\ n'est pas monté"). Si je devais recommencer, j'essaierais d'abord sans prendre la peine de monter les systèmes de fichiers spéciaux dans le chroot.
Janus
juste une note: n'oubliez pas de démonter / mnt / newroot avant de redémarrer!
Giacomo Tesio
Voici des instructions sur la façon de déplacer votre partition racine / vers le nouveau lecteur nvme, tout en conservant / home sur le disque dur. lucasmanual.com/blog/…
Lucas

Réponses:

20

Montez des systèmes de fichiers de base et copiez / modifiez des fichiers tout en chrootant comme:

  • / 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 qui a fonctionné pour moi lors de l'installation de Grub 2 dans arch et à plusieurs reprises sur Gentoo. Ensuite, après chroot to /path/to/chrootcommander était simplement:

grub-install /dev/<boot_disk>

Depuis lvm2 (et je crois que madm mais je ne l'ai pas utilisé) la configuration est stockée sur le disque. Il y a une configuration qui doit être lue pour découvrir les périphériques. En supposant que vos appareils se trouvent dans des emplacements standard ( /dev/sd*ou /dev/hd*), il ne devrait y avoir aucun problème.


PS Je ne ferais pas confiance à un simple cp de système live car il y a plusieurs endroits où cela peut mal tourner:

  • Vous avez oublié de modifier /etc/fstabet d'autres fichiers utiles
  • Fichiers modifiés lors de l'accès
  • Faire face aux ordures ( /tmpetc.)
Maciej Piechotka
la source
Merci. Donc, fondamentalement, vous dites que je fais un chroot bâclé :) Je vais essayer avec un chroot approprié. cp -axdevrait être bien (peut - être après la chute de mode utilisateur seul) selon ce vieux howto: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus
A fonctionné un charme! Merci beaucoup pour l'aide.
Janus
1
@Janus: Je copierais les données de la distribution en direct pour être sûr. Je suis content cependant que cela ait fonctionné.
Maciej Piechotka
Je devais le faire update-grubavant install-grub.
Aryeh Leib Taurog
3

vous pouvez installer grub à partir de la distribution en direct sans chrooter:

grub-install /dev/hda --root-directory=/mnt/guest/
jet
la source
Merci. Je ne suis pas sûr que cela fonctionnerait ici: si je comprends bien, grub-installne met à jour que les fichiers d'image grub et écrit le MBR: en particulier, grub.cfgn'est pas mis à jour. Comme je l'ai commenté ci-dessus, le montage des répertoires spéciaux peut être exagéré, mais je pense toujours que le chroot est le moyen de mettre à jour grub.cfgde manière simple?
Janus
Oui, cela n'a pas fonctionné pour moi non plus. Vous devez vous mettre update-grubau travail et que l'on n'a pas --root-directoryou quelque chose, non?
Mitar
0

BTW si vous ajoutez une partition (comme une fenêtre) sur laquelle vous ne voulez pas que grub écrive un dans le secteur de démarrage, mais que vous voulez que grub le sache lorsque votre ordinateur démarre, vous pouvez analyser à nouveau les partitions et générer un nouveau fichier grub.cfg en utilisant la commande grub_mkconfig comme suit dans une session de terminal

cd / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

Maintenant, lorsque vous démarrez de votre partition Linux actuelle (qui avait démarré grub), il connaîtra maintenant l'autre partition.

user129087
la source