Kernel entra em pânico com o erro "Não é possível abrir o dispositivo raiz", onde anexo a opção "root ="?

9

sempre que tento inicializar com o kernel do linux 3.0.0.13 (o instalado pelas atualizações), recebo um erro do Kernel Panic:

VFS: Não é possível abrir o dispositivo raiz "sda1" ou bloco desconhecido (0,0). Anexe uma opção de inicialização correta "root =";

Felizmente, se eu inicializar usando a versão anterior, não tenho nenhum problema. Como posso resolver isso? Onde devo acrescentar o correto root= option? Se eu não conseguir que este Kernel funcione, como posso removê-lo como padrão e seguir o anterior?

lucacerona
fonte
Mesmo problema aqui. A principal diferença que eu observo é que até 3.0.0.12, o conf grub tenta identificar o disco rígido usando o UUID, 3.0.0.13 agora usa / dev / sda6 .. estranho ...
Dan Soap

Respostas:

11

Você não forneceu muitas informações com logs e assim por diante, mas acho que provavelmente esse erro está ocorrendo porque o kernel está confuso por uma unidade IDE / SATA. Fazer uma pesquisa rápida no Google me levou ao link 1 , link 2 , link 3

A seguir, o trecho de um link referido por um dos links acima :

Provavelmente, um dos problemas mais comuns (mas depois de resolvido, você provavelmente nunca mais o verá):

Unable to mount root fs on unknown-block(0,0)

ou

VFS: Cannot open root device "sda3" or unknown-block(8,3)
Please append a correct "root=" boot option; here are the available partitions:
  sda driver: sd
    sda1 sda2

Os dígitos 0,0ou 8,3podem ser diferentes no seu caso - refere-se ao dispositivo que o kernel tenta acessar (e que falha). De um modo geral, pode-se dizer que, se o primeiro dígito for 0, o kernel não conseguirá identificar o hardware. Se tiver outro dígito (como 8), não poderá identificar o sistema de arquivos (mas poderá acessar o hardware).

O problema aqui é que o kernel que você está inicializando não pode converter o root=/dev/...parâmetro que você forneceu (dentro da configuração do gerenciador de inicialização) em um sistema de arquivos real e acessível. Vários motivos podem resultar em tal falha:

  • faltam na configuração do kernel drivers para o seu controlador de disco rígido (casos 1, 4, 5)
  • faltam na configuração do kernel drivers para o barramento usado pelo seu controlador de disco rígido
  • faltam na configuração do kernel drivers para o sistema de arquivos que você está usando
  • o dispositivo foi identificado incorretamente no seu parâmetro root = (casos 2, 3)

Resolver o problema é fácil se você souber qual é o motivo. Você provavelmente não, então aqui está uma verificação rápida.

Abra o assistente de configuração do kernel (a parte make menuconfig ) para que você possa atualizar a configuração do kernel adequadamente.

  • Verifique se você incorporou (e não como um módulo) suporte para o barramento / protocolo usado pelo seu controlador de disco rígido.
  • Provavelmente, este é o suporte PCI, suporte SATA (abaixo do suporte ao dispositivo SCSI), ...
  • Verifique se você incorporou (e não como um módulo) suporte para o controlador HDD que você usa. Um dos casos mais frequentes: você selecionou o suporte para o protocolo do seu controlador de disco rígido (IDE, SATA, SCSI, ...), mas esqueceu de
    selecionar o próprio driver do controlador de disco rígido (como o Intel PIIX). Tente
    executar o seguinte comando lscpi e cole sua saída em
    http://kmuto.jp/debian/hcl/ . O site mostrará quais drivers do kernel você precisa selecionar para o seu sistema. No menu menuconfig,
    você pode digitar "/" para abrir a função de pesquisa e digitar o
    nome do driver para descobrir onde ele reside. # lspci -n
  • Verifique se você incorporou (e não como um módulo) o suporte para os sistemas de arquivos que você usa.
  • Digamos que seu sistema de arquivos raiz use btrfs (o que eu definitivamente não recomendo), mas você não o selecionou ou o selecionou para ser construído como um
    módulo, então você receberá o erro que vê. Verifique se o
    suporte ao sistema de arquivos está embutido no kernel.
  • Verifique se o parâmetro do kernel root=está apontando para a partição correta.

    Isso não é tão estúpido quanto parece. Quando você é inicializado com um kernel, ele pode listar seus discos como sendo / dev / sda, enquanto seu kernel (configurado) espera que seja / dev / hda. Isso não ocorre porque os kernels são inconsistentes entre si, mas por causa dos drivers usados: drivers mais antigos usam a sintaxe hda, sda mais recente.

    Tente alternar hda com sda (e hdb com sdb e ...).

    Além disso, os kernels recentes oferecem uma visão geral das partições encontradas no dispositivo. Caso isso aconteça, poderá ajudá-lo a identificar se você selecionou incorretamente uma partição (no exemplo dado no início desta seção, apenas duas partições são encontradas, enquanto o kernel foi instruído a inicializar a terceira). Caso contrário, é mais provável que o kernel não conheça o dispositivo (portanto, não pode tentar exibir partições).

  • Verifique se o kernel que está sendo inicializado pelo carregador de inicialização é o kernel correto. Eu tenho visto pessoas que, depois de construir um primeiro kernel (que não inicializa), esquecem que precisam montar /bootantes de sobrescrever o kernel por um novo. Como resultado, eles copiam o kernel no sistema de arquivos raiz ( /) enquanto o carregador de inicialização ainda espera que a imagem do kernel esteja na /bootpartição.

Nitin Venkatesh
fonte
11
Olá, passou muito tempo, mas obrigado. Eu tinha um CD-Rom com defeito, removendo que tudo funcionava bem!
lucacerone
Link 1, Link 4 e Link 5 estão todos mortos agora.
Questionmark
0

Depois de ler esta resposta que explica o que está acontecendo, tente usar o [Boot-Reapir CD] [1] [1]: https://help.ubuntu.com/community/Boot-Repair

Funcionou muito bem na reparação do "o dispositivo está identificado incorretamente no seu parâmetro root = (casos 2, 3)".

madcap66
fonte