“Não foi possível encontrar o dispositivo root” em uma nova instalação do ArchLinux

33

Instalei a versão mais recente do ArchLinux (2014.06.01) em um MacBook Pro 8,1 (15 ", se isso importa em relação ao hardware) com o OSX seguindo as instruções no Guia de instalação oficial No entanto, quando tentar reiniciar o sistema recém-instalado, ele me coloca em um shell de recuperação:

ERROR: device 'UUID=<snip>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<snip>'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: can't access tty: job control turned off
[rootfs /]# 

(Eu removi o UUID porque eu não queria digitá-lo, mas é o mesmo que o dado a mim por blkid (do disco de instalação) para a partição na qual o ArchLinux está instalado)

Outro on-line fontes sugira que isso se deve a um pacote desatualizado pacman , udev , filesystem ou linux . No entanto, eles descrevem esse problema somente após uma atualização do kernel de um sistema em funcionamento, não uma nova instalação. Eu forcei a reinstalação desses pacotes do ambiente arch-chroot durante a inicialização para o disco de instalação, mas isso não alterou a situação.

Em vez disso, um pouco de experimentação com meu grub.cfg mostra que o que quer que seja que se queixa é o parâmetro root para o comando linux , selecionando o arquivo vmlinuz a ser usado. De fato, alterar root=UUID=<snip> para root=LABEL=ArchLinux ou root=/dev/sda8 (ambos descrevem onde o ArchLinux está instalado e eu certamente usei a segunda versão com êxito antes com outra distribuição) fornece Unable to find root device 'LABEL=ArchLinux' e Unable to find root device '/dev/sda8' respectivamente. Além disso, o GRUB parece ser capaz de encontrar a partição pelo UUID, apenas o kernel do linux reclama que ele não foi encontrado, já que o ramdisk inicial está apropriadamente carregado (ou seja, este não é um erro do GRUB conforme descrito em here mas sim um erro do linux).

Como observação: o shell de recuperação é severamente limitado e a saída padrão parece não funcionar corretamente. No entanto, ls funciona e os arquivos de listagem mostram um sistema de arquivos básico (temporário), mas todos os dispositivos de disco parecem estar ausentes de /dev . No entanto, não sei se isso faz parte do erro ou não.

Isso é semelhante, mas não é o mesmo que o Linux não encontrar o sistema de arquivos raiz ao inicializar , já que a partição era ext4 desde o início. Também não é exatamente o mesmo, mas talvez seja relevante Impossível inicializar o ArchLinux no Macbook Pro 7.1 - cai para o shell de recuperação , no entanto, ele cai em um shell ramfs em vez de um shell rootfs e as mensagens de erro são diferentes.

    
por hlt 15.06.2014 / 13:46

2 respostas

30

Em vez de inicializar com a imagem normal, usei a versão de fallback e consegui inicializar no sistema. Como se constatou, o Linux não pôde detectar nenhuma unidade devido ao block mkinitcpio hook (responsável por dispositivos de bloco) que está faltando na imagem padrão. Isso ocorreu porque ele foi colocado após autodetect em /etc/mkinitcpio.conf . Para corrigir isso, a linha HOOKS=... nesse arquivo precisa ser alterada para que block chegue antes de autodetect

Antes da correção:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

Após a correção:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

Executando mkinitcpio -p linux para gerar novamente o initramfs e, em seguida, corrigiu o problema permanentemente.

    
por 26.07.2014 / 18:08
0

Eu me deparei com um problema semelhante, mas com uma configuração diferente. Estou usando o ArchLinux em uma máquina virtual e meu bootloader é o syslinux. Eu usei o seu truque para mudar a ordem dos ganchos do kernel, mas ainda assim acabei em um shell rootfs.

O que corrigiu o problema para mim foi alterar a linha APPEND no meu syslinux.cfg de

APPEND root=UUID=<snip>

para

APPEND root=PARTUUID=<snip>

Você pode acrescentar facilmente o PARTUUID ao syslinux.cfg usando um comando como blkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfg , supondo que sua partição raiz seja /dev/sda1

Depois, você pode usar seu editor de texto favorito para mover a linha para o espaço apropriado.

EDIT: Acabei de reconhecer que o número da coluna no pequeno script awk pode variar, então é melhor dar uma olhada na saída antes de colocá-la em syslinux.cfg

    
por 22.10.2014 / 11:12