Tengo una caja virtual ejecutándose con CentOS.
He adjuntado un nuevo disco virtual a la VM de CentOS existente y «m ahora estoy tratando de instalar GRUB en este disco recién adjunto.
Más adelante, mostraré una segunda VM con un disco duro de arranque recién preparado con un sistema de archivos raíz personalizado y kernel.
I He probado los siguientes pasos:
- Adjunto un nuevo disco virtual a la máquina CentOS en funcionamiento existente.
- Creé una nueva partición con
fdisk /dev/sdb
. Mientras particionaba, elegí las opciones partición primaria, partición número 1 y otras opciones predeterminadas. - Formateé el disco con
mkfs.ext3 /dev/sdb1
. - Se montó el disco en
/media/new_drive
. - Se instaló GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Después de esto, la segunda VM con el disco duro recién preparado no arrancó; Recibí el error: could not read from the boot medium
. Parece que el MBR no se actualiza después de grub-install
, pero puedo ver GRUB instalado en /boot/grub
en la nueva unidad.
Pero lo peor es que ha corrompido mi CentOS GRUB existente: la VM de CentOS se cuelga mostrando una pantalla negra con el único texto que es GRUB
.
Por qué ¿grub-install /dev/sdb1
no modifica el MBR de sdb1? ¿No es esta la forma correcta de instalar GRUB en una nueva unidad?
Comentarios
Respuesta
No soy un experto en grub2 (lo siento) pero intente agregar --skip-fs-probe
a su línea grub-install, he descubierto que esto evita la creación de /boot/grub/device.map
que puede provocar el arranque en un indicador de grub. Creo que sin esto parámetro grub-install, en lugar de hacer lo que le dice, piensa que es más inteligente que usted y puede hacer algo diferente.
Otra cosa es asegurarse de que está usando el grub-install correcto (es decir, para grub2 y no para grub original). Esto no es un problema si estás dentro de Centos pero con SystemRecoveryCD ambas versiones están disponibles y entonces tienes que usar grub2-install
. Aprendí por las malas …
Y como señaló @wurtel (felicitaciones), debe especificar una unidad, no una partición. Grub2 se instala en el sector 0 de toda la unidad de disco, y este «stub» es lo que se ejecuta en el momento del arranque, pero necesita saber dónde se encuentra en el disco, debería instalar los archivos para la siguiente etapa de arranque; esto es lo que --root-directory
El parámetro es para. (Creo.)
Al leer man grub-install
y buscar en Google, veo que --root-directory
no está realmente destinado a grub2 versiones 1.99 ++, aunque funciona en mi experiencia. Debe usar --boot-directory
y hacer referencia al directorio de inicio real, por lo que esto le daría:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Comentarios
- Mi primer intento fue sin particionar y formatear
grub-install /dev/sdb
pero dio un error. Más tarde probé con un disco particionado y formateado, con un disco formateado que siempre estaba usando / dev / sdb1, intentaré con –skip-fs-probe - @Renjith oh y el directorio raíz debería referirse a el punto de montaje montado cuando ejecuta grub-install, por lo que debe montar la partición en la nueva unidad, por ejemplo en
/mnt/sys2
y luego en su línea grub-install especifique--root-directory=/mnt/sys2
. Es ‘ contrario a la intuición (como muchas cosas de grub, creo), pero ‘ es cómo funciona. - he editado mi respuesta un poco …
- El grub en este momento estoy usando 0.97, que no ‘ t admite –skip-fs-probe . pero sin eso funcionó. sdb1 fue el error.
- ok, me alegro de que lo hayas resuelto, es grub antiguo, no el nuevo ‘ shiny ‘ grub2. No ‘ no me di cuenta de que RedHat era tan lento para pasar a grub2. CentOS 7 usa grub2 pero CentOS 6 (y versiones anteriores) usa grub.
Respuesta
Así es como moví una instalación de Debian que consiste en una partición de arranque /boot
y una partición raíz /
a una nueva unidad y la hizo arrancable usando GNU GRUB :
Clonar particiones
- Con el GParted Live CD , cree la partición de inicio y raíz en el nuevo unidad.
- Usando una consola raíz en GParted, monte la antigua partición de arranque (digamos que es
/dev/sda1
) y la nueva partición (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Copie los datos de la partición de arranque anterior a la nueva:
cp -afv /mnt/oldBoot /mnt/newBoot
. Explicación decp -afv
:-
a
significa » archivo » lo que significa:- no elimine las referencias de los enlaces
- copie de forma recursiva (como
-R
) - conservar todos los atributos (marca de tiempo, propietario, permiso)
-
f
: forzar, si es un archivo de destino existente no se puede abrir, elimínelo y vuelva a intentarlo -
v
: detallado, explique lo que se está haciendo
-
- Esto generará un resultado en su consola que le mostrará qué archivo se está copiando actualmente y si
cp
avanza - Monte y copie los archivos de su antigua partición raíz a la nueva:
- Por seguridad:
umount /mnt/oldBoot && umount /mnt/newBoot
- Monte la vieja y la nueva partición raíz (asumiendo que es «s
/dev/sda2
y/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Copie el dat una de la antigua partición raíz a la nueva partición raíz:
cp -afv /mnt/oldRoot /mnt/newRoot
- Por seguridad:
- Edite el tabla del sistema de archivos que define qué particiones se montan en el arranque (usaré Vim para eso):
-
vi /etc/fstab
-
Notará que aquí se hace referencia a sus particiones antiguas. Utilice los UUID de las nuevas particiones en su lugar
-
Puede insertar temporalmente todos los UUID en fstab para copiar y pegar más fácilmente con
:r !blkid
-
Utilice los UUID de sus nuevas particiones para cambiar las entradas en fstab. Deberían verse así:
`# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2`
- Elimina la salida de
blkid
del fstab que insertaste anteriormente con:r !blkid
- Elimina la salida de
-
Instalar GRUB
-
Monte los sistemas de archivos virtuales del CD en vivo de GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Haga las utilidades de GRUB del CD en vivo de GParted disponibles para la partición raíz:
mount --bind /usr/ /mnt/newRoot/usr
-
Monte la partición de arranque en la partición raíz desde GRUB almacenará su configuración en
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Use
chroot /mnt/newRoot
para hacer que la nueva partición raíz sea temporalmente la raíz del sistema de archivos -
Cree un archivo de configuración de GRUB en
/boot/grub/grub.cfg
usandoupdate-grub2
-
Instale GRUB en la nueva unidad:
grub-install /dev/sdb
. No debe especificar un número de partición aquí -
Regrese al sistema de archivos del CD en vivo de GParted:
exit
-
Desmontar particiones:
umount /mnt/newRoot/*
-
Apagar la máquina
-
Si tiene varias unidades conectadas, asegúrese de que la unidad más nueva aparezca primero en el orden de inicio
-
Inicie la máquina
Estas instrucciones están inspiradas en las de oaktreepeak.com .
Alternativamente, puede dar Clonezilla un intento de lograr lo mismo.
/dev/sdb1
no es donde el BIOS busca MBR, ‘ s en/dev/sdb
es decir, el primer sector del disco.grub-install /dev/sdb --root-directory=/media/new_drive/
en lugar de sdb1