碰到一个需求需要修改centos7的安装光盘,在安装时增加一个指令的支持(ks的per段中需要划raid)
这种修改肯定是改initrd.img了。直接挂载光盘找到initrd.img,看文件类型。
# file initrd.img
initrd.img: XZ compressed data
是个xz格式的压缩文件,解压之
# cp initrd.img initrd.img.xz
# xz -d initrd.img.xz
解出来再看
# file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
是个二进制镜像文件了,可以直接解了。
# mkdir initrd
# cd initrd
# cpio -i -F ../initrd.img
解完就能看到里面的文件系统了
# ls
bin dev etc init lib lib64 opt proc root run sbin shutdown sys sysroot tmp usr var
可以直接进去做操作了
# chroot ./
在这之后可以做自己的修改
我是安装了raid工具
修改完成之后退出到原有系统
# exit
# find . -depth |cpio -oc -O /home/initrd.img
# xz -zk initrd.img
# mv initrd.img.xz initrd.img
改完之后直接cpio+xz打回去之后发现不能用,不识别initrd.img导致启动失败。
一脸懵逼。逗呢。
。。。
查看文件头,发现和原有initrd.img文件不太一样
# hexdump -C ../initrd.img | head -10
00000000 fd 37 7a 58 5a 00 00 01 69 22 de 36 02 00 21 01 |.7zXZ...i".6..!.|
00000010 10 00 00 00 a8 70 8e 86 e2 67 74 ef ff 5d 00 18 |.....p...gt..]..|
00000020 0d dd 04 62 33 37 a6 1c b3 27 04 70 ee c0 8d 80 |...b37...'.p....|
00000030 97 3f a9 50 b2 c1 9f 15 a4 f2 b9 98 d4 e0 49 6b |.?.P..........Ik|
00000040 d7 f9 6e 85 75 f5 2b 7d eb 96 51 d2 fd 17 68 c1 |..n.u.+}..Q...h.|
00000050 e7 80 e5 9a 6a 5d a1 5a 5a 3b a4 87 68 e0 ac de |....j].ZZ;..h...|
00000060 a5 91 76 65 55 24 da 9c 1b 56 2a 61 fa 96 84 86 |..veU$...V*a....|
00000070 78 3f 84 75 93 9e e5 bd 18 7a 69 62 e7 ca 7a fc |x?.u.....zib..z.|
00000080 9e ab 1c 8a 20 65 c6 1e 6d f3 0b 83 66 4a fb d3 |.... e..m...fJ..|
00000090 75 05 52 7f 61 d4 b2 47 5f 8f 50 20 de a6 4e 50 |u.R.a..G_.P ..NP|
# hexdump -C initrd.img | head -10
00000000 fd 37 7a 58 5a 00 00 04 e6 d6 b4 46 02 00 21 01 |.7zXZ......F..!.|
00000010 16 00 00 00 74 2f e5 a3 e2 67 74 ef ff 5d 00 18 |....t/...gt..]..|
00000020 0d dd 04 62 33 37 a6 1c b3 27 04 70 ee c0 8d 80 |...b37...'.p....|
00000030 97 3f a9 50 b2 c1 9f 15 a4 f2 b9 98 d4 e0 49 6b |.?.P..........Ik|
00000040 d7 f9 6e 85 75 f5 2b 7d eb 96 51 d2 fd 17 68 c1 |..n.u.+}..Q...h.|
00000050 e7 80 e5 9a 6a 5d a1 5a 5a 3b a4 87 68 e0 ac de |....j].ZZ;..h...|
00000060 a5 91 76 65 55 24 da 9c 1b 56 2a 61 fa 96 84 86 |..veU$...V*a....|
00000070 78 3f 84 75 93 9e e5 bd 18 7a 69 62 e7 ca 7a fc |x?.u.....zib..z.|
00000080 9e ab 1c 8a 20 65 c6 1e 6d f3 0b 83 66 4a fb d3 |.... e..m...fJ..|
00000090 75 05 52 7f 61 d4 b2 47 5f 8f 50 20 de a6 4e 50 |u.R.a..G_.P ..NP|
文件校验块原来是01重新压回去为啥变04了?fd 37 7a 58 5a 00 00 01 → fd 37 7a 58 5a 00 00 04
查询xz算法和xz工具后发现新的xz工具在压缩的时候自动采用了新的校验算法crc64,虽然说这个crc64要优于原本的crc32,但是linux内核用的还是crc32而且不认识crc64。怪不得报错呢。
在参数上指定强制使用crc32校验算法
# xz -zk initrd.img --check=crc32
# mv initrd.img.xz initrd.img
再一次打回光盘,成功启动。
因为系统工具升级带来的坑,比较容易让人抓狂,记下来与大家分享。