CentOS7安装光盘修改过程中initrd.img的解包及打包排雷

碰到一个需求需要修改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

再一次打回光盘,成功启动。

因为系统工具升级带来的坑,比较容易让人抓狂,记下来与大家分享。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值