使用 file 指令準確識別映像檔真實格式:
| 檔案類型 | file 輸出範例 | 處理方式 |
|---|---|---|
| gzip 壓縮 | initramfs.gz: gzip compressed data, from Unix, last modified: ... | gunzip 或 zcat 解壓 |
| cpio 封存 (ASCII) | tinycore.cpio: ASCII cpio archive (SVR4 with no CRC) | cpio -id < file 解壓 |
| cpio 封存 (新格式) | initramfs.cpio: ASCII cpio archive (SVR4 with no CRC) | 同左 |
| ext2/ext3/ext4 檔案系統映像 | redhat-initrd: Linux rev 1.0 ext2 filesystem data | mount -o loop 掛載 |
| 未知/原始資料 | rootfs.gz: data | 需進一步分析 (可能為壓縮後的 cpio/ext2) |
# 1. 確認類型
file initrd.img
# 輸出: gzip compressed data -> 先解壓
# 輸出: Linux rev 1.0 ext2 filesystem data -> 直接掛載
# 2. 若為 gzip,解壓
gunzip -c initrd.img > initrd.img.dec
# 或
gzip -dc initrd.img > initrd.img.dec
# 3. 掛載檢視/修改
mkdir /mnt/initrd
mount -o loop initrd.img.dec /mnt/initrd
# 此時為唯讀掛載,若需修改需複製內容重建
cp -a /mnt/initrd /tmp/initrd-work
# 修改 /tmp/initrd-work 內容
# 重建參考「生成 initrd 映像」文檔
# 1. 確認類型
file initramfs.img
# 輸出: gzip compressed data -> 先解壓
# 輸出: ASCII cpio archive -> 直接解包
# 2. 若為 gzip,先解壓
gunzip -c initramfs.img > initramfs.cpio
# 3. 解包 cpio 到當前目錄
cpio -id < initramfs.cpio
# -i: extract, -d: create directories
# 若壓縮時用相對路徑,解出結構保持相對
# 4. 圖形介面替代方案
# 桌面環境雙擊 .cpio 檔,檔案管理器可直接瀏覽 (如 GNOME Files、KDE Dolphin)
# 在解包後的根目錄下
find . | cpio -o -H newc | gzip > ../new-initramfs.cpio.gz
# -H newc: 新式 cpio 格式 (核心支援最佳)
#!/bin/sh
# identify-img.sh
for f in "$@"; do
echo "=== $f ==="
file "$f"
case "$(file -b "$f")" in
"gzip compressed data"*)
echo "-> gzip compressed, decompress first"
;;
"ASCII cpio archive"*)
echo "-> cpio archive, use 'cpio -id < $f'"
;;
"Linux rev 1.0 ext"*)
echo "-> ext2/3/4 filesystem image, use 'mount -o loop'"
;;
"data"*)
echo "-> raw data, try gzip then cpio"
;;
esac
done
掌握 file、gzip/gunzip、cpio、mount -o loop 四大工具,即可應對所有 initrd/initramfs 映像檔檢視與修改需求。