technology

Como extrair initrd/initramfs para visualizar conteúdo no Linux

.

São necessárias algumas etapas simples para extrair os arquivos initramfs em seu sistema Linux para visualizar seus conteúdos.

Pode haver algumas razões pelas quais você precisa extrair initramfs ou initrd imagens, como encontrar o motivo de problemas de inicialização ou explorar o conteúdo delas.

A partir de agora, quero consertar meu computador, que não estava me permitindo usar meu laptop com o seguinte erro: “Falha ao iniciar o módulo de kernel do VirtualBox Linux”.

Após o diagnóstico, é um erro claro que está faltando o cabeçalho do Linux. Embora você saiba, podemos instalar cabeçalhos Linux lendo este guia.

No entanto, o instalador falhou ao instalar e lançou a mensagem de erro “Não foi possível localizar.”

Mais tarde, descobri que havia algum problema com a imagem do kernel. Mudei o initramfs e vmlinuz padrão para outro local e reiniciei o sistema.

Esperançosamente, o sistema agora foi reiniciado com sucesso.

E a partir daí, pensei em fazer uma autópsia com initramfs e um arquivo vmlinuz, e vou compartilhar com vocês os passos para extrair arquivos initrd/initramfs no Linux.

Portanto, antes de prosseguir, você deve saber o que são initramfs e por que o sistema exige isso.

O que é Initramfs?

Initramfs é um pequeno disco RAM que contém os arquivos necessários para carregar o sistema antes que o sistema de arquivos raiz real seja montado.

Eles fornecem as necessidades básicas para o sistema inicializar e montar o sistema de arquivos raiz real (/) quando a inicialização for bem-sucedida.

É compactado com cpio arquivos de formato junto com vários outros algoritmos de compactação, que podem ser descompactados e carregados na memória durante o processo de inicialização.

Resumindo, se você quiser entender, a resposta curta é que ele carrega módulos do kernel e monta sistemas de arquivos para inicializar o sistema operacional.

Portanto, a partir de agora, sempre que você vir o initramfs, saberá o que é e por que o sistema o requer.

Método para extrair ou exibir arquivos de conteúdo do Initramfs

Aqui você abordará dois métodos para extrair e inspecionar o conteúdo do initramfs, como

  • Forma convencional: Para extrair e visualizar o conteúdo initramfs/initrd
  • Maneira simples e conveniente: Outra maneira simples de extrair e visualizar o conteúdo initramfs/initrd

Maneira convencional: para extrair e visualizar arquivos Initramfs no Linux

Como você deve saber, initramfs ou initrd armazena-se no /bota diretório, que é protegido com permissão de gravação, e também não é aconselhável fazer alterações neste diretório.

Então, em primeiro lugar, vamos criar um diretório temporário em /tmp com o iniciar diretório.

Para criar um diretório temporário como o meu, copie e cole o seguinte comando.

$ mkdir /tmp/init
$ cd /tmp/init

Feito isso, copie o respectivo arquivo initramfs para o diretório atual e certifique-se de substituir o nome do arquivo initrd pelo disponível.

$ ls /boot
$ cp -v /boot/initrd.img-5.10.0-9-amd64 .

Após essa verificação, o tipo de arquivo, geralmente initrd ou initramfs, é compactado com vários algoritmos, portanto, é melhor verificar o tipo de arquivo usando o file comando.

$ file initrd.img-5.10.0-9-amd64 
Output:

initrd.img-5.10.0-9-amd64: gzip compressed data, was "mkinitramfs-MAIN_EYPHFu", last modified: Sat Oct 16 04:14:42 2021, from Unix, original size modulo 2^32 145369088

De acordo com a saída acima, diz que é um arquivo gzipado, mas se você tentar descompactá-lo com o gunzip comando, você não poderá fazê-lo porque o gunzip requer o a .gz extensão, que não está presente no momento.

Então você precisa renomear o initramfs com o .gz extensão.

$ mv initrd.img-5.10.0-9-amd64 initrd.img-5.10.0-9-amd64.gz

Se initrd.img-xxx-x-arch estiver diretamente no formato cpio, pule o comando abaixo e execute o último comando desta seção.

De qualquer forma, vamos voltar ao terminal e passar o comando subseqüente para extrair o arquivo .gz e verificar o resultado.

$ gunzip initrd.img-5.10.0-9-amd64.gz
$ file initrd.img-5.10.0-9-amd64
Output

initrd.img-5.10.0-9-amd64: ASCII cpio archive (SVR4 with no CRC)

Agora estamos quase terminando aqui.

Depois de obter o “Arquivo CPIO,” digite o comando abaixo para extrair o arquivo no diretório atual.

$ cpio -idv < initrd.img-5.10.0-9-amd64
Output

usr/bin/awk
usr/bin/ash
usr/bin/arch
cpio: usr/sbin/watchdog linked to usr/bin/[

*****[TRIMMED OUTPUT]******

var/cache/fontconfig/befa2b5d-41df-461b-8d18-246762b8c3e3-le64.cache-7
283924 blocks

A parte de extração é aqui.

Agora você pode fazer o que quiser com um arquivo de imagem initramfs extraído.

O método acima pode ser um pouco complicado para alguns usuários.

No entanto, você pode obter o mesmo resultado com um único comando, o que pode ser conveniente e fácil de usar sem memorizar as etapas.

Você pode usar o lsinitrd comando para executar todas as etapas em uma. Agora abra a janela do terminal do sistema, digite o seguinte comando e substitua o nome do arquivo.

$ mkdir /tmp/init && cd /tmp/init
$ cd /tmp/init
$ cp -v /boot/initrd.img-5.10.0-9-amd64 .

$ lsinitrd --unpack /boot/initrd.img-5.10.0-9-amd64

Verifique se o arquivo foi extraído com sucesso.

$ ls 
Output

bin@  conf/  etc/  init*  lib@  lib32@  lib64@  libx32@  run/  sbin@  scripts/  usr/  var/

Se o lsinitrd comando não está disponível em seu sistema, então você pode usar o comando unmkinitramfs comando para extrair o kernel atual para um novo diretório chamado initramfs como mostrado abaixo:

$ unmkinitramfs /boot/initrd.img-$(uname -r) initramfs/
or
$ unmkinitramfs /boot/initrd.img-5.10.0-9-amd64 initramfs/

Como inspecionar ou visualizar o Initramfs

Tudo o que foi dito acima foi para extrair a imagem e inspecionar o conteúdo do arquivo, mas se você não estiver interessado na parte de extração e quiser apenas inspecionar o conteúdo initrd/initramfs, o que fazer?

Simplesmente você pode usar olsinitrd ou lsinitramfs comandos para visualizar o conteúdo de um arquivo de imagem individual, conforme mostrado abaixo:

$ lsinitrd initrd.img-5.10.0-9-amd64
Output

Image: initrd.img-5.10.0-9-amd64: 40M
========================================================================
-rwxr-xr-x 247 root     root            0 Jul 26  2021 usr/sbin/syslogd
-rwxr-xr-x 247 root     root            0 Jul 26  2021 usr/sbin/ubirename
-rwxr-xr-x 247 root     root            0 Jul 26  2021 usr/sbin/udhcpc
-rwxr-xr-x 247 root     root            0 Jul 26  2021 usr/sbin/udhcpd
-rwxr-xr-x 247 root     root            0 Jul 26  2021 usr/sbin/uevent

******(TRIMMED OUTPUT******

-rw-r--r--   1 root     root          200 Oct 16 09:44 var/cache/fontconfig/CACHEDIR.TAG
========================================================================

Aqui você pode apenas visualizar o conteúdo do arquivo, e no Linux Mint mais recente não encontrei o lsinitrd então ao invés disso eu usei lsinitramfs comando.

$ lsinitramfs /boot/initrd.img-5.10.0-9-amd64

Embrulhar

Isso é tudo para descompactar ou extrair initrd/initramfs para visualizar o conteúdo no Linux.

Cobrimos maneiras convencionais e simples de extrair arquivos initrd/initramfs. Junto com isso, você aprendeu a inspecionar conteúdo sem extrair arquivos.

Se você enfrentar alguma dificuldade ao seguir nosso artigo, informe-nos na seção de comentários.

Até lá, aproveite!

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo