cpioについて
概要
cpioは、tarと同様、複数のファイルやディレクトリを1つにまとめるコマンド。古くはバックアップ用途にも使用されていたようだが、この用途においてはSquashfs*1のほうが優れていると思われる。
現在でも初期RAMディスクイメージ(initrd/initramfs)では使用されている。
tar形式と同様、アクセス権情報(所有者情報と「読み取り/書き込み/実行」の属性)を保存することができる。
形式
cpioファイルにはデータ形式が幾つかあり、作成時に必要に応じて-H [形式名]オプションで指定する。Gentoo Linuxのinitrd*2の場合、「newc」形式のcpioファイルをgzip圧縮しているため、-H newcというオプションが付く。種類はfileコマンドで確認できる。「newc」では下のようになる。
$ file [cpioファイル] [cpioファイル]: ASCII cpio archive (SVR4 with no CRC)
既定の形式(-Hオプションなし)で出力したものは「cpio archive」とのみ表示された。
展開
現在の作業ディレクトリ以下に展開される。(無圧縮のcpioファイルを展開) $ cpio -idm --quiet [cpioファイル] (gzip圧縮されたcpioファイルを展開) $ zcat [cpio.gzファイル] | cpio -idm --quiet
2つ目の例はgzip圧縮されたファイルを展開する場合だが、initrdのファイルでは「.gz」や「.img」といった拡張子の場合もある(むしろ「.cpio.gz」と書かれることは少ない気がする)。
また、一般ユーザでinitrdファイルを展開した場合、
cpio: dev/console: Cannot mknod: 許可されていない操作です (以下、同様のエラーが続く)
のように、デバイスファイルが作成できないエラーになるため、偽の管理者権限*3で操作を実行するfakerootというコマンドでシェルを起動し、その中で処理する。*4「Gentoo Linux上のuswsuspについての覚え書き(復帰デバイス名を直接指定する方法)」や「Gentoo Linux上のuswsuspについての覚え書き(UUID指定による休止を行う)」などでも使用している。fakerootはinitrdのcpioファイルを作成する場合にも役に立つ。
cpioファイルの作成
cpioファイルに含めたいディレクトリ構造の最上位ディレクトリで実行する。(無圧縮のまま出力する場合) $ find | cpio --quiet -o -H newc > [出力ファイル].cpio (gzip圧縮して出力する場合) $ find | cpio --quiet -o -H newc | gzip -9 > [出力ファイル].cpio.gz
関連URL:
使用したバージョン:
- cpio 2.9(2.9-r1)
- file 4.23