initrd.img的壓縮(製做)及解壓的過程

1、啓動鏡像initrd.img 文件
類RedHat 系統從vmlinuz 核心引導後,會讀取initrd.img 啓動鏡像。該文件中包含驅動模塊等信息,是很是重要的文件。不一樣版本使用的格式不一樣。
1.RHEL 4.0 版本
採用ext2 文件格式鏡像,再經過gzip 壓縮:html

引用
# file initrd.img
initrd.img: gzip compressed data, from Unix, max compression
# mv initrd.img initrd.img.gz
# gunzip initrd.img.gz
# file initrd.img
initrd.img: Linux rev 1.0 ext2 filesystem data


2.RHEL 5.0 版本
採用cpio 打包鏡像,再經過gzip 壓縮:node

引用
# file initrd.img
initrd.img: gzip compressed data, from Unix, max compression
# mv initrd.img initrd.img.gz
# gunzip initrd.img.gz
# file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)


3.RHEL 6.2 版本
RHEL 6.0 - 6.2 都採用與RHEL 5.0 相同的格式進行打包,但從6.2版本開始,改用LZMA 進行壓縮。詳見:Release Notes for Red Hat Enterprise Linux 6.2 Edition 2
以下:算法

引用
# file initrd.img
initrd.img: LZMA compressed data, streamed


※ 注意,若在低於RHEL 6.2 版本下執行file 命令,可能沒法識別LZMA 壓縮格式:shell

引用
# file initrd.img
initrd.img: data


這時,可把file 軟件包升級到5.04-13.el6 便可。

2、xz 工具簡介
xz 工具是LZMA 壓縮算法的一個實現。具體可見:Wikipedialess

引用
xz is a lossless data compression file format incorporating theLZMA2 compression algorithm. While xz can only support one file the convention is to bundle a file that is an archive itself, such as those created by the tar or cpio Unix programs. The original 7zip program implementing LZMA2 compression achieved small files (at the cost of speed compared to gzip or bzip2), but also created its own unique archive format which was Windows-centric and did not support Unix functionality; xz is essentially a stripped down 7zip with little archive format functionality, that compresses a single file (as opposed to 7zip's more complex capabilities like concatenating & compressing entire directories).
7-Zip supports xz since version 9.04 beta (stable since 9.20)


可見,Windows 下可以使用7-Zip 打開.xz 文件。LZMA 算法比Gzip 算法壓縮率更高。幾個參數:工具

引用
# xz --help
Usage: xz [OPTION]... [FILE]...
Compress or decompress FILEs in the .xz format.

Mandatory arguments to long options are mandatory for short options too.

  -z, --compress      force compression
  -d, --decompress    force decompression
  -t, --test          test compressed file integrity
  -l, --list          list information about files
  -k, --keep          keep (don't delete) input files
  -f, --force         force overwrite of output file and (de)compress links
  -c, --stdout        write to standard output and don't delete input files
  -0 .. -9            compression preset; 0-2 fast compression, 3-5 good
                      compression, 6-9 excellent compression; default is 6
  -e, --extreme       use more CPU time when encoding to increase compression
                      ratio without increasing memory usage of the decoder


3、手動修改initrd.img 文件
解壓:

oop

# xz -dc initrd.img | cpio -id


壓縮:

spa

# find . | cpio -c -o | xz -9 --format=lzma > initrd.img



3、補充tar.lzma
因爲LZMA具備優秀的壓縮率及佔用資源少的特色,愈來愈多的工具採用lzma進行打包,後綴名爲:tar.lzma。
對於Fedora 11 及之後的版本,可使用下面的命令操做:
壓縮

excel

# tar cfv backup.tar.lzma a/dir --lzma


解壓:

code

# tar xfv backup.tar.lzma --lzma



若是是CentOS 5.3 等老版本,須要安裝獨立的lzma 工具或用xz 進行: 
壓縮:

# tar cv a/dir | lzma -c -z > backup.tar.lzma


解壓(兩個方式均可以):

# cat backup.tar.lzma | lzma -d | tar xv 
# xz -dc backup.tar.lzma | tar xvf -
 

1."gunzip initrd.img-2.6.27-7-generic.gz",獲得一個未壓縮的initrd.img-2.6.27-7-generic 2. cpio -iv < initrd.img-2.6.27-7-generic",提取成功

#製做cpio格式的initrd(新2012年使用過的)

#cd /root/busybox-1.15.3/rootfs9260 #find . | cpio -H newc -o > ../initrd_cpio.img

#製做cpio格式的initrd(2009年製做的LFS的方式):
dd if=/dev/zero of=/tmp/rootfs bs=1k count=35000
losetup /dev/loop0 /tmp/rootfs
mkfs.ext2 –F –i 2000 /tmp/rootfs
mkdir /tmp/loop
mount –o loop /tmp/rootfs /tmp/loop
#而後將剛纔創建的基本系統拷貝到/tmp/loop
cp /lfs/* /tmp/loop –arfp
find . | cpio –o –H newc | gzip –c > /tmp/initrd.img

find .|cpio -o -H newc|gzip>~/myinitramfs.gz

1. find . 查找顯示當前目錄下的全部文件、文件夾
2. | 管道,將 | 左邊命令的結果(也就是find . 獲得的全部文件、文件夾路徑名稱)傳給右邊(也就cpio命令)
3. cpio -o -H newc cpio是將文件系統打包或解包, -o 是打包 ,-H 指定格式 爲newc
newc The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes. (4294967295 bytes)
4 | 將cpio打好的包傳給gzip壓縮
5 gzip 壓縮命令的一種,gnuzip。相似zip,rar。

6 >~/myinitramfs.gz 將壓縮後的數據 存爲 文件myinitramfs.gz

 

cpio命令
    利用cpio 可將文件或目錄從文件庫獲取出來或將散列文件拷貝到文件庫。cpio 的指令格式:
        cpio –i[bcdmrtuv] [patterns]
        cpio –o [abcv]
        cpio –p [adlmuv][directory]

說明:cpio 共有三種基本模式,-o即copy-out 模式,將一組文件copy到一個文件庫,-i 即copy-in 模式,讀取文件庫,並將其展開在當前目錄。-p 能從某個目錄讀取全部文件(包括子目錄到另外一個目錄),且不以archive(歸檔)的方式存放。
    cpio 常配合shell使用。-o經常使用標準輸入設備讀取要copy 的文件名稱,並將copy成的archive file 經過標準輸出設備輸出。通常利用輸入/輸出重定向或管道的原理,達到真正複製的功能。

(一)利用cpio備份:
[例1]
        $ find temo –print | cpio –ocdv > /dev/rfd0135ds18 
例: find . |cpio -co > ../initrd

將temp目錄下的文件備份到軟盤上。-o表示輸出模式,-c生成一個帶有頭信息的文件。 -d表示按須要生成目錄,-v表示命令執行時不斷顯示信息。用「>」把結果定向到軟盤。
[例2]
        $ ls |cpio –o >/usr/backup
將當前目錄下的全部文件複製成backup archive file
[例3]
        $ ls *.c | cpio –o>backup
複製工做目錄中的全部的c程序.
[例4]
        $ ls| cpio –p /usr/linfs/tempdir
複製當前工做目錄下的文件到/usr/linfs/tempdir 目錄,不生成archive  file

(二)利用cpio 復原:
[例5]
        $ cpio –icdv < /dev/rfd0135ds18
例: cpio -i < ../initrd將上層目錄的initrd文件釋放到當前文件夾

將軟盤中的文件復原。-i告訴cpio把文件做爲它的輸入,-d按須要生成目錄,-v顯示執行時的全部信息,-c具備頭文件格式。
[例6]
        $ cpio –icdv "*stat.wp" < /dev/rfd0135ds18
僅復原*stat.wp的文件
[例7]
        $ cpio –i </usr/linfs/old1 *.f
僅復原*.f 文件

序:(gzip 壓縮文件)gzip 壓縮文件對應的解壓縮文件爲gunzip。壓縮後的文件名稱爲「.gz」。命令格式:        gzip  filename        gunzip  filename 

相關文章
相關標籤/搜索