Debian / Grub2: ¿Mover la partición raíz a la nueva unidad?

30

¿Alguien tiene una sugerencia sobre cómo mover la partición raíz a una nueva unidad y configurar grub2 para que arranque en esa unidad? Parece que no tuve suerte al instruir a grub-mkconfig qué es lo que quiero hacer (por ejemplo, chroot'int en mi nueva raíz simplemente confunde todos los scripts).

Antecedentes Estoy ejecutando Debian Squeeze en un NAS de baja potencia sin cabeza. Mi configuración actual está /encendida sda0y /bootencendida sde0(una tarjeta CF): necesitaba la separación /bootporque sd[a-d]necesitaba hacer una rotación retardada. Ahora he encontrado un viejo disco IDE de 2.5 "para usar como /incluido /bootpara permitirme girar todos los discos grandes.

Lo que he intentado Básicamente fui

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

Entonces intenté

chroot /mnt/newroot
update-grub

Pero eso falló cuando grub preguntó si la raíz estaba montada. Luego hice un intento poco entusiasta de configurar /mnt/newroot/grub/grub.cfgpara encontrar la imagen del kernel sdf5, seguido de a grub-install --root-directory=/mnt/newroot /dev/sdf. Pero esto me dio un mensaje de rescate cuando intenté arrancar sdf.

Mi plan de copia de seguridad es simplemente reinstalar, así que una pregunta adicional (sin marcas de verificación para esta): ¿Qué debo hacer para obtener mi configuración de lvm2 y mdadm? ¿Está todo almacenado en los sistemas de archivos (y se descubrirá automáticamente) o necesito sacarlo yo mismo?

Solución (gracias a Maciej Piechotka): Como señala Maciej, necesito un chroot adecuado para que todas las herramientas de grub funcionen. Como referencia, así es como lo hice:

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

Todos los archivos ahora se copian (ver aquí para una discusión de estrategias de copia). Arregle el nuevo etc/fstabpara apuntar a una nueva raíz

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

Finalmente, monte dev, sysy proca la nueva raíz y 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 .

Ahora estamos en la raíz del futuro exactamente como se verá. Según Maciej, debería estar bien simplemente llamar grub-install, pero hice un update-grubprimer intento para ver el generado /boot/grub/grub.cfgantes de instalar el gestor de arranque. ¿No estoy seguro de que se actualizará automáticamente?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Janus
fuente
Publique el contenido /etc/default/gruby la transcripción exacta de update-grub.
Gilles 'SO- deja de ser malvado' el
(pensamientos después de agregar la solución): En realidad, podría ser que el problema era que no había actualizado /etc/fstaben el chroot(esto sería consistente con update-grubquejarse de que "\ no está montado"). Si volviera a hacer esto, lo intentaría primero sin molestarme en montar los sistemas de archivos especiales en el chroot.
Janus
solo una nota: ¡no olvide desmontar / mnt / newroot antes de reiniciar!
Giacomo Tesio
Aquí hay instrucciones sobre cómo mover su partición raíz / a la nueva unidad nvme, mientras mantiene / home en el disco duro. lucasmanual.com/blog/…
Lucas

Respuestas:

20

Montar sistemas de archivos básicos y copiar / modificar archivos mientras se procesa como:

  • / 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 que funcionó para mí mientras instalaba Grub 2 en Arch y numerosas veces en Gentoo. Luego, después de chroot al /path/to/chrootcomando fue simplemente:

grub-install /dev/<boot_disk>

A partir de lvm2 (y creo que madm pero no lo he usado) la configuración se almacena en el disco. Hay una configuración de lo que se debe leer para descubrir dispositivos. Suponiendo que sus dispositivos estén en ubicaciones estándar ( /dev/sd*o /dev/hd*) no debería haber ningún problema.


PD. No confiaría en el simple cp del sistema en vivo, ya que hay varios lugares donde puede salir mal:

  • Olvidé cambiar /etc/fstaby otros archivos útiles
  • Archivos modificados durante el acceso
  • Hacer frente a la basura ( /tmpetc.)
Maciej Piechotka
fuente
Gracias. Básicamente, estás diciendo que hago un chroot descuidado :) Lo intentaré con un chroot adecuado. cp -axdebería estar bien (tal vez después de caer al nivel de ejecución de un solo usuario) de acuerdo con este viejo tutorial
Janus
Trabajó un encanto! Muchas gracias por la ayuda.
Janus
1
@ Janus: Copiaría datos de la distribución en vivo para estar seguro. Me alegro sin embargo funcionó.
Maciej Piechotka
Tenía que hacer update-grubantes install-grub.
Aryeh Leib Taurog
3

puedes instalar grub desde live distro sin hacer chrooting:

grub-install /dev/hda --root-directory=/mnt/guest/
chorro
fuente
Gracias. No estoy seguro de que esto funcione aquí: según tengo entendido, grub-installsolo actualiza los archivos de imagen grub y escribe el MBR: en particular, grub.cfgno está actualizado. Como comenté anteriormente, montar los directorios especiales puede ser exagerado, pero sigo pensando que el chroot es la forma de actualizar grub.cfgde una manera simple.
Janus
Sí, esto tampoco funcionó para mí. Tienes que ir update-gruba trabajar y ese no tiene --root-directoryo algo, ¿no?
Mitar
0

Por cierto, si está agregando una partición (como una ventana) en la que no desea que grub escriba un en el sector de arranque, pero quiere que grub lo sepa cuando su computadora arranque, puede volver a escanear las particiones y generar un nuevo archivo grub.cfg utilizando el comando grub_mkconfig de la siguiente manera en una sesión de terminal

cd / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

Ahora, cuando arranque desde su partición de Linux actual (que tenía arranque de grub), ahora sabrá sobre la otra partición.

usuario129087
fuente