Mi sistema arranca bien con esto en mi configuración de GRUB 2:
linux /bzImage root=/dev/sda2 init=/usr/lib/systemd/systemd ro
Pero si lo reemplazo /dev/sda2
con el UUID correspondiente:
linux /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e init=/usr/lib/systemd/systemd ro
entonces falla durante el arranque:
kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
El UUID parece ser correcto:
# blkid
/dev/sda1: UUID="97ac3744-39de-4d6d-9a81-e3a3ea08a8bb" TYPE="ext2"
/dev/sda2: UUID="666c2eee-193d-42db-a490-4c444342bd4e" TYPE="ext4"
¿Por qué no funciona? ¿Es porque no estoy usando initramfs?
Este es x86_64 Gentoo Linux con kernel 3.10.7. Estoy usando una tabla de particiones MBR sda
y una tabla de particiones GUID sdb
.
Respuesta1
Solo para aclarar, UUID
los correos electrónicos son la única forma confiable que tiene el kernel de identificar discos duros. Hay dos tipos: UUID, que se almacena en el sistema de archivos y no está disponible para el kernel en el momento del arranque, y PARTUUID, que se almacena en la tabla de particiones y ESTÁ disponible en el momento del arranque. Entonces tienes que usar
root=PARTUUID=SSSSSSSS-PP
como /dev/sd??
puede cambiar con los dispositivos conectados/desconectados.
No olvidescapitalizar¡El número hexadecimal SSSSSSSS-PP
que obtienes blkid
!
Cuanto más fácil de usar
root=LABEL=
root=UUID=
solo trabaje con un initramfs
que recupere estos identificadores.
Entonces, si usas un no vacío initramfs
, ¡puedes tener los tres! Con un vacío initramfs
, solo tienes PARTUUID
.
Respuesta2
El parámetro que debes pasar para arrancar desde UUID es PARTUUID
. Así debería ser root=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
.
La documentación explica por qué vuelve con unknown-block(0,0)
:
parámetros-del-kernel.txt:
root= [KNL] Sistema de archivos raíz Vea el comentario de name_to_dev_t en init/do_mounts.c.
init/do_mounts.c:
/* * Convertir un nombre en número de dispositivo. Aceptamos las siguientes variantes: * * 1) el número de dispositivo en hexadecimal se representa a sí mismo * 2) /dev/nfs representa Root_NFS (0xff) * 3) /dev/<disk_name> representa el número de dispositivo del disco * 4) /dev/<disk_name><decimal> representa el número de dispositivo * de partición: número de dispositivo del disco más el número de partición * 5) /dev/<disk_name>p<decimal> - igual que el anterior, esa forma es * se utiliza cuando el nombre del disco particionado termina en un dígito. * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF que representa el * ID único de una partición si la tabla de particiones lo proporciona. * El UUID puede ser un UUID EFI/GPT o hacer referencia a un MSDOS * partición usando el formato SSSSSSSS-PP, donde SSSSSSSS es cero * representación hexadecimal rellena de la "firma de disco NT" de 32 bits y PP * es una representación hexadecimal rellena con ceros del número de partición basado en 1. * 7) PARTUUID=<UUID>/PARTNROFF=<int> para seleccionar una partición en relación con * una partición con una identificación única conocida. * * Si el nombre no pertenece a las categorías anteriores, devolvemos (0,0). * block_class se usa para verificar si algo es un nombre de disco. Si el disco * el nombre contiene barras, el nombre del dispositivo las reemplaza con * flequillo. */
El último bit al final dice que si no puede entender el valor, devuelve (0,0)
, de ahí su error.
Respuesta3
Este es un hilo de hace 5 años. Pero aún así, en mi humilde opinión, no está completamente respondido. Falta un pequeño ejemplo. Aquí lo tienes:
En este ejemplo:
/dev/sda3 = /
/dev/sda2 = swap
...usando una partición GPT. Con MBR (partición dos) los PARTUUID son más cortos pero el procedimiento es el mismo...
obtenga los PARTUUID con blkid:
blkid -s PARTUUID -o value /dev/sda3 # root
77fd7830-faa2-4e99-a48b-337ad9eded28
blkid -s PARTUUID -o value /dev/sda2 # swap
5b63167a-6fd2-4e72-948c-90832372956c
/boot/grub/grub.cfg:
search --no-floppy --part-uuid --set=root 77fd7830-faa2-4e99-a48b-337ad9eded28
menuentry "GNU/Linux, KERNEL 4.12.7-lfs-8.1" {
linux /boot/vmlinuz-4.12.7-lfs-8.1 root=PARTUUID=77fd7830-faa2-4e99-a48b-337ad9eded28 net.ifnames=0 ipv6.disable=1 ro rootwait rootfstype=ext4
}
/etc/fstab/:
PARTUUID=77fd7830-faa2-4e99-a48b-337ad9eded28 / ext4 noatime,nodiratime,errors=remount-ro 0 1
PARTUUID=5b63167a-6fd2-4e72-948c-90832372956c swap swap pri=1 0 0
Se sabe que esto FUNCIONA con lfs8.1 (kernel 4.12.7), pero creo que también debería funcionar con la mayoría de los otros kernels (antiguos y nuevos...)