Перепаковка initrd

Определение типа компрессии

file initrd.img
initrd.img: XZ compressed data

Вместо xz может быть gz, lzma

Распаковка

mkdir /tmp/initramfs
cd /tmp/initramfs
xz -dc ../initrd.img  | cpio -i -d -H newc --no-absolute-filenames

При других типах компрессии вместо xz -dc :

  • zcat (gz компрессия)
  • lzma -dc -S .img (lzma компрессия)
  • zstd -dc (zstd компрессия)

Для свежих initrd ubuntu или

#!/bin/bash
#https://unix.stackexchange.com/questions/163346/why-is-it-that-my-initrd-only-has-one-directory-namely-kernel
 target=$1
 offset=$(binwalk -y gzip $1 | awk '$3 ~ /gzip/ { print $1; exit }')
    shift
    dd if=$target bs=$offset skip=1 | zcat | cpio -id --no-absolute-filenames $@

Упаковка

В ранее созданном каталоге

cd /tmp/initramfs
find . |cpio -o -H newc |xz --check=crc32 --x86 --lzma2 > initrd-new.img

При других типах компрессии вместо xz –check=crc32 –x86 –lzma2 :

  • gzip -9 (gz компрессия)
  • lzma -7 (lzma компрессия)
  • zstd -f -18 (zstd компрессия)
Печать/экспорт