sistema de arquivos raiz no dispositivo NVMe

4

Eu tenho uma unidade Intel 750 NVMe. Funciona bem. Bem ... mais ou menos. Eu gostaria de usar este dispositivo como meu sistema de arquivos raiz.

Eu não tenho suporte a BIOS para dispositivos NVMe.

  1. Eu tenho o driver nvme ativado no kernel e não em um módulo. Eu posso montar o dispositivo nmve. Eu copiei o sistema de arquivos raiz para ele.

Quando tento usar este dispositivo como um sistema de arquivos raiz no grub2, recebo um dispositivo desconhecido.

Esta é a linha do grub2 para o kernel e parâmetros:

linux   /boot/kernel-4.1.6-gentoo root=/dev/nvme0n1p1 ro quiet

por que isso acontece? O driver está no kernel. Não é um módulo. Não precisa de nada do sistema de arquivos raiz. Está usando bios para acessar / dev / nvme0n1p1?

  1. Minha segunda tentativa foi usar um initramfs. Eu usei o genkernel para criar o initramfs.

    Isso também tem um problema com / dev / nvme0n1p1. Ele inicializa no linux usando o initramfs. Mas, quando ele tenta montar o sistema de arquivos raiz real via script linuxrc falha na verificação do dispositivo de bloco

....  Verifique se há um dispositivo de bloco ou / dev / nfs  elif [-b "$ {REAL_ROOT}"] || ["$ {REAL_ROOT}"="/ dev / nfs"] ...

REAL_ROOT está definido como dev / nvme0n1p1 (adicionei algum código de depuração)

Eu hackeei o script acima para apenas montar / dev / nvme0n1p1 e também falha. Não está lá.

O mais estranho é ... depois de falhar, ele pede ao usuário para entrar no sistema de arquivos raiz ... e ... Eu entro em "/ dev / nvme0n1p1" e funciona bem. Chuteiras.

Além disso, permitirá que você digite um shell .. e / dev / nvme0n1p1 está lá ... e o teste

elif [ -b "${REAL_ROOT}" ]

passa no shell.

Então, o que está acontecendo no # 1. Isso deveria funcionar? O BIOS está sendo usado? (o que falharia porque o meu BIOS não suporta NVMe)?

# 2 é muito estranho e parece um bug para mim. Dito isto ... como pode qualquer um usa um NVMe como um dispositivo raiz. Tenho certeza que o google teria retornou algo da minha pesquisa.

    
por p brown 28.08.2015 / 03:43

1 resposta

2

Os dispositivos Nvme, alinhados com muitos outros dispositivos MTD no kernel do Linux, contam com a inicialização assíncrona. Após o controlador ser descoberto pelo kernel, a camada de bloco iniciará a varredura da partição, mas o kernel não esperará por ela (por padrão). Isso significa que uma tentativa de montar um sistema de arquivos raiz em tal dispositivo falhará ou será vigorosa, porque, quando o kernel tentar montar o root fs, o layout da partição pode ainda não ser conhecido.

Para garantir que o kernel aguarde que o dispositivo raiz apareça em vez de avançar para um pânico inevitável, ele deve receber uma opção rootwait no gerenciador de inicialização / linha de comando integrada ( rootdelay com tempo limite explícito é outra opção , mas rootwait é claramente mais simples e seguro).

O problema só se manifesta com kernels de inicialização direta, porque a ativação do initramfs garante a conclusão das tarefas de inicialização (ou pode simplesmente introduzir atraso suficiente, não tenho certeza) para concluir a varredura da partição e todas as partições se tornarem registradas e disponíveis. / p>     

por 27.11.2017 / 08:53