Как извлечь данные из файла uInitrd

В файле uInitrd, как правило, содержится корневая файловая система той или иной системы.

Если посмотреть информацию о файле, используя стандартную утилиту linux - file, то увидим примерно следующее:

$ file uInitrd 
uInitrd: u-boot legacy uImage, debian-installer ramdisk, Linux/ARM, RAMDisk Image (gzip), 19068823 bytes, Thu Apr 24 12:07:39 2014, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0x7CC7FE2B, Data CRC: 0x1847C3DF

Файл представляет собой образ рамдиска, подготовленный с помощью утилиты mkimage:

$ mkimage -l ./uInitrd 
Image Name:   debian-installer ramdisk
Created:      Thu Apr 24 12:03:25 2014
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    4839295 Bytes = 4725.87 kB = 4.62 MB
Load Address: 00000000
Entry Point:  00000000

Утилита mkimage просто добавляет к началу файла свой заголовок, который нужно убрать. Удалить заголовок можно следующим образом:

$ dd if=./uInitrd of=initrd skip=64 bs=1

Смотрим на полученный файл опять утилитой file:

$ file initrd 
initrd: gzip compressed data, was "initrd", from Unix, last modified: Thu Apr 24 12:03:14 2014, max compression

Пытаемся разархивировать:

$ gunzip initrd
gzip: initrd: unknown suffix -- ignored

Не получается по причине того, что расширение у файла должно быть gz. Исправляем эту проблему так:

$ mv initrd initrd.gz
$ gunzip initrd.gz 

Смотрим информацию на извлеченный из архива файл:

$ file initrd 
initrd: ASCII cpio archive (SVR4 with no CRC)

Для извлечения данных из архива cpio можно использовать команду:

$ cpio -i -F initrd

Либо в файловом менеджере правый клик на файле и потом "Извлечь сюда"