.
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!
Um homem com uma tecnologia efusiva que explorou algumas das incríveis coisas da tecnologia e está explorando mais. Enquanto avançava, tive a chance de trabalhar no desenvolvimento Android, Linux, AWS e DevOps com várias ferramentas de código aberto.
.