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 

相关文章
相关标签/搜索