O sistema operacional Linux Live determina a mídia de inicialização atual (CD/USB) que é usada para inicializar o kernel e os rootfs que residem na mesma mídia

O sistema operacional Linux Live determina a mídia de inicialização atual (CD/USB) que é usada para inicializar o kernel e os rootfs que residem na mesma mídia

Existe uma maneira de detectar omídia de inicialização atualusado para inicializar umSO Linux Live? Em um sistema operacional ativo, gostaria de determinar exclusivamente a mídia de inicialização atual(CD/USB) que foi usado para inicializar o disco. Eu gostaria dedetermine isso no nível do sistema operacional e não no nível do bootloader.

Mídia de inicialização atualno meu caso significa a mídiaonde reside o carregador de inicialização usado para iniciar o sistema operacional.

Eu inspecionei o seguinte, mas nenhum parece ter as informações do caminho de desenvolvimento da mídia de inicialização atual (como, por exemplo, /dev/sr0 indicando que o caminho de inicialização atual é cd)

  • Verificando o sistemajornalctlHistórico.
  • VerificandodmesgHistórico.
  • Possíveis interfaces emudeveudevadmUtilitário.
  • rdev do Busyboxcomo sugerido emhttp://free-electrons.com/blog/find-root-device/. O procedimento para comparar stat / com o número do dispositivo major:minor de /dev/sr0 não parece corresponder.

Eu também verifiquei no GRUB2,http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.conde as variáveis ​​de ambiente GRUBraizeprefixoestão prontos. Por exemplo, em um shell GRUB2 que foi inicializado a partir de um CD, se eu digitareco $ raiz, Eu recebohd31. Agora, como faço um mapeamento disso para um caminho de dispositivo de bloco Linux como/dev/sr0para CD ou algum/dev/sdb1para um pen drive? Eu também verifiqueiLinux: obtenha o nome do dispositivo do disco de inicialização atualehttps://stackoverflow.com/questions/6787819/how-to-determine-the-booting-devicemas ambos não parecem ajudar.

Idealmente eu gostariaevite montarcada CD/USB (/dev/sr0 ou /dev/sdb1 e similares) para verificar manualmente a presença de arquivos initrd e kernel. Este método não é infalível. Existe alguma maneira simples de fazer isso?

Responder1

Encontrei o seguinte, mas não tenho certeza do que o definiria. Talvez o kernel/grub, nesse caso você deve estar configurado.

"Também pode ser a referência do nó do dispositivo para o ponto de montagem de outro sistema de arquivos LiveOS,incluindo aquele em execução no momento (como um Live CD/DVD/USB inicializado, onde /run/initramfs/livedev é vinculado ao dispositivo LiveOS inicializado)."

De https://www.mankier.com/8/livecd-iso-to-disk

Responder2

O próprio kernel do Linux não se importa de onde é carregado - e considera isso o trabalho do bootloader. Idealmente, o bootloader registraria essas informações em algum lugar onde o kernel pudesse obtê-las mais tarde - o que é trivial com o bootloader U-Boot, mas não tanto com BIOS/UEFI x86.

Como resultado, eu realmente não acho que você possa obter essas informações do próprio Linux, embora o local onde o sistema de arquivos raiz reside seja provavelmente o local onde o Linux foi carregado na maior parte do tempo. É 100% possível carregar o kernel de um local e fazer com que o sistema de arquivos raiz venha de outro local, o que é comum em plataformas embarcadas.

Então, algumas coisas que você pode tentar.

  • cat /proc/cmdlineprovavelmente lhe dirá onde o sistema de arquivos raiz foi carregado - o root=parâmetro da linha de comando do kernel informa onde o kernel foi informado para encontrar o sistema de arquivos raiz quando foi carregado.

  • Você também pode emitir um mountcomando e localizar o /sistema de arquivos e observar seu dispositivo.

informação relacionada