リンクされたcpioファイルの抽出

リンクされたcpioファイルの抽出

Linuxのinitramfsアーカイブは、一連のリンクされたgzip圧縮cpioファイルで構成できます。

そのようなアーカイブが与えられた場合の抽出方法みんな最初の代わりに組み込まれたアーカイブ?

これはうまくいくかもしれませんが、最初のアーカイブだけを抽出するパターンの例です。

while gunzip -c | cpio -i; do :; done <input.cgz

私も試しましたdracutのSkipcpioアシスタント最初のcpioイメージを通過してファイルポインタを移動しますが、次のようにして破損したストリームがcpioに送信されます(入力の正しい場所ではありません)。

# this isn't ideal -- presumably would need to rerun with an extra skipcpio in the pipeline
# ...until all files in the archive have been reached.
gunzip -c <input.cgz | skipcpio /dev/stdin | cpio -i

ベストアンサー1

/usr/lib/dracut/skipcpio $your-initrd-img | zcat | cpio -id --no-absolute-file-names

そうでなければ

/usr/lib/dracut/skipcpio $your-img | gunzip -c | cpio -id

(FreeBSDでは、cpioに--no-absolute-file-namesオプションがありません)

このアプレットはskipcpiodracutパッケージの一部です。ただし、コード(skipcpio.c)をダウンロードしてFreeBSDでコンパイルすることもできます。

これは、少なくともRedHat対応のディストリビューション(Fedoraなど)からdracutで作成されたinitrdイメージを抽出する場合に必要です。 「early_cpio」というファイルをイメージに入れるので、以前に知られている一般的な方法でinitramfsを抽出すると機能しません。

おすすめ記事