Meu sistema inicializa bem com isso na minha configuração do GRUB 2:
linux /bzImage root=/dev/sda2 init=/usr/lib/systemd/systemd ro
Mas se eu substituir /dev/sda2
pelo UUID correspondente:
linux /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e init=/usr/lib/systemd/systemd ro
então ele falha durante a inicialização:
kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
O UUID parece estar correto:
# blkid
/dev/sda1: UUID="97ac3744-39de-4d6d-9a81-e3a3ea08a8bb" TYPE="ext2"
/dev/sda2: UUID="666c2eee-193d-42db-a490-4c444342bd4e" TYPE="ext4"
Por que não funciona? É porque não estou usando um initramfs?
Este é o Gentoo Linux x86_64 com kernel 3.10.7. Estou usando uma tabela de partição MBR sda
e uma tabela de partição GUID em sdb
.
Responder1
Só para esclarecer, UUID
s são a única maneira confiável de o kernel identificar discos rígidos. Existem dois tipos: UUID, que é armazenado no sistema de arquivos e não está disponível para o kernel no momento da inicialização, e PARTUUID, que é armazenado na tabela de partição e ESTÁ disponível no momento da inicialização. Então você tem que usar
root=PARTUUID=SSSSSSSS-PP
como /dev/sd??
pode mudar com dispositivos conectados/desconectados.
Não se esqueça decapitalizaro número hexadecimal SSSSSSSS-PP
que você obtém blkid
!
Quanto mais fácil de usar
root=LABEL=
root=UUID=
só funciona com um initramfs
que busca esses identificadores.
Então, se você usar um non-empty initramfs
, poderá ter todos os três! Com um vazio initramfs
, você só tem PARTUUID
.
Responder2
O parâmetro que você deve passar para inicializar a partir do UUID é PARTUUID
. Assim deveria ser root=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
.
A documentação explica por que está voltando com unknown-block(0,0)
:
parâmetros do kernel.txt:
root= [KNL] Sistema de arquivos raiz Veja o comentário name_to_dev_t em init/do_mounts.c.
init/do_mounts.c:
/* * Converta um nome em número do dispositivo. Aceitamos as seguintes variantes: * * 1) o número do dispositivo em hexadecimal representa a si mesmo * 2) /dev/nfs representa Root_NFS (0xff) * 3) /dev/<disk_name> representa o número do dispositivo do disco * 4) /dev/<disk_name><decimal> representa o número do dispositivo * da partição - número do dispositivo do disco mais o número da partição * 5) /dev/<disk_name>p<decimal> - igual ao acima, esse formato é * usado quando o nome do disco particionado termina em um dígito. * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representando o * id exclusivo de uma partição se a tabela de partição fornecer. * O UUID pode ser um UUID EFI/GPT ou referir-se a um MSDOS * partição usando o formato SSSSSSSS-PP, onde SSSSSSSS é um zero- * representação hexadecimal preenchida da "assinatura de disco NT" de 32 bits e PP * é uma representação hexadecimal preenchida com zero do número da partição baseada em 1. * 7) PARTUUID=<UUID>/PARTNROFF=<int> para selecionar uma partição em relação a * uma partição com um ID exclusivo conhecido. * * Se o nome não se enquadrar nas categorias acima, retornamos (0,0). * block_class é usado para verificar se algo é um nome de disco. Se o disco * o nome contém barras, o nome do dispositivo as substitui por * franja. */
O último bit no final diz que se não conseguir entender o valor, ele retornará (0,0)
, daí o seu erro.
Responder3
Este é um tópico de 5 anos. Mas ainda assim não foi totalmente respondido. Falta um pequeno exemplo. Aqui está:
Neste exemplo:
/dev/sda3 = /
/dev/sda2 = swap
...usando uma partição GPT. Com MBR (partição DOS) os PARTUUID's são mais curtos mas o procedimento é o mesmo...
obtenha os PARTUUIDs com 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
Sabe-se que isso FUNCIONA com lfs8.1 (kernel 4.12.7). Mas acho que também deve funcionar com a maioria dos outros kernels (antigos e mais recentes ...)