近日考虑到要制作适用PXE的引导麒麟系统,所以需要对iso中的img文件做适当调整。本文将介绍如何解压压缩麒麟系统的img文件。

一、了解vmlinuz和initrd.img文件

  • vmlinuz:系统内核文件,编译而成。
  • initrd.img:是一个小的文件系统, 放的是和启动相关的驱动模块。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块。其中最重要的就是根文件系统驱动模块,有了它才能挂载根文件系统,继而运行用户空间的第一个应用程序init或者systemd,完成系统后续的启动。

  一般如遇到系统缺少驱动模块,大部分都是修改initrd.img文件即可。本文中的initrd.img文件是解压iso文件,从中拷贝出来的,详细路径如下:

二、解压initrd.img文件

1、查看文件类型

file initrd.img
--initrd.img: XZ compressed data

2、修改文件后缀并解压

mv initrd.img initrd.img.xz
xz -d initrd.img.xz

3、再次查看文件类型

file initrd.img
--initrd.img: ASCII cpio archive (SVR4 with no CRC)

4、解压此二进制文件

mkdir test
cd test
cpio -i -F ../initrd.img

 解压完后的文件系统如下,如需修改使用命令chroot:

bin  dev  etc  init  lib  lib64  opt  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var

三、压缩initrd.img文件

1、压缩文件系统成二进制文件

cd test
find .|cpio -o -H newc > ../initrd.img

2、压缩文件并改名

xz -zk initrd.img
mv initrd.img.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|

导致出现这种差异的原因:新的xz工具在压缩的时候自动采用了新的校验算法crc64,虽然说这个crc64要优于原本的crc32,但是linux内核用的还是crc32,而且不认识crc64。

解决方法:压缩文件时指定校验算法为crc32。

xz -zk initrd.img --check=crc32
mv initrd.img.xz initrd.img

尝试重新去启动引导系统,这次可以成功进入系统。此处需要注意一下,避免踩坑。

麒麟操作系统iso文件中的img文件的解压与压缩相关推荐

  1. Python读取zip文件中的图片(无需解压)

    对于包含大量图片的大型zip文件而言,解压非常费时间,同时解压过程也会需要更大的硬盘空间.这个时候,如果Python能直接读取到zip中的图片的话,就非常有用了. 本文提供PIL和cv2两种格式的图片 ...

  2. Linux 解压,压缩文件--tar 命令

    其实在Linux中,有许多种解压,压缩文件的命令,本博客介绍 tar 命令 如果Linux 系统不能运行tar 命令的朋友,先安装一下: 1)安装 1.apt-get 方式安装: sudo apt-g ...

  3. linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城...

    2016-05-01 19:20:51 浏览量:6833 gho文件是ghost系统的克隆镜像,存储着系统分区的所有文件信息,可用于安装系统,有些U盘安装方法需要把ISO镜像中的gho文件拷贝到U盘, ...

  4. 搜索目录下 匹配文件中 最新的文件 路径

    搜索目录下 匹配文件中 最新的文件 路径 1  #!/usr/bin/python 2  import os 3  import glob 4  path = "/homeyufei/tes ...

  5. oracle 控制文件 scn,重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里...

    重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里 这个问题要看具体的情况,比如: 1. 数据库是shutdown immediate,也就是说数据库是一致的状态,重建控制文件后,SCN 以d ...

  6. java+读取source资源_如何从JavaJAR文件中读取资源文件?

    如何从JavaJAR文件中读取资源文件? 我试图从一个单独的JAR文件中访问一个XML文件,这个JAR是作为桌面应用程序运行的.我可以获得我需要的文件的URL,但是当我将它传递给FileReader( ...

  7. VB直接播放EXE文件中的声音文件

    使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业. ⑴启动 VB6.0,在"外接程序→外接程序管理器"中加载"Visual Basic ...

  8. 如果在一个工程中有两个vhd文件,就相当于有两个模块,那么对于这个工程整体的bdf文件生成,怎么把这两个模块都加到同一个bdf文件中。bdf文件中两个模块之间的连线及输入输出,是自己输进去的还是自动生

    如果在一个工程中有两个vhd文件,就相当于有两个模块,那么对于这个工程整体的bdf文件生成,怎么把这两个模块都加到同一个bdf文件中.bdf文件中两个模块之间的连线及输入输出,是自己输进去的还是自动生 ...

  9. 解压命令linux tgz,tar 解压_linux中的“tar命令”怎么解压“.tgz”与“.tar.gz”文件?...

    在LINUX下如何将tar压缩文件解压到指定的目录下 一.解压.tar.gz格式到指定的目录下: 命令格式为:tar -zxvf [压缩包文件名.tar.gz] -C  [路径]/ 例如:tar -z ...

  10. 如何在batch文件中取得该文件的路径

    如何在batch文件中取得该文件的路径 hanlray@gmail.com Revision: 0.99 Date: 2006/04/01 很简单,就是用%~dp0,如: set MYDIR=%~dp ...

最新文章

  1. 重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性
  2. 修改jar中的class文件
  3. 微软统一预训练语言模型UniLM 2.0解读
  4. boost::edge_list用法的测试程序
  5. 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
  6. 3D远方纯动态白云页面源码
  7. 《Python编程从入门到实践》记录之Python函数定义、使用
  8. python字符串驼峰转换_驼峰风格字符串转换为下滑线风格字符串
  9. 本特利框架3500/05-01-01-CN-00
  10. 计算机基础ppt说课稿,计算机基础说课稿ppt课件
  11. pycharm中设置鼠标滚动放大和缩小页面
  12. Data URL实现用户头像上传
  13. 波长与颜色的对应关系之python实现
  14. 【架构】1366- 如何画出一张优秀的架构图
  15. unlink php 实例,PHP unlink()用法及代碼示例
  16. VMware 虚拟机鼠标闪烁
  17. OBS第三方推流直播教程
  18. iPhone5 iOS6.1系统完美越狱教程
  19. 监狱逃离 51nod1299 最小割
  20. 工信部发证 中国广电成第四大基础电信运营商

热门文章

  1. 阿里云又送Apsara定制T恤了 – 附答案
  2. 舍友老六,创业五年,现在在华为上班
  3. jquery 遍历java对象_jquery中object对象循环遍历的方法
  4. vue 动态显示图片报错 404
  5. 消除VMware启动虚拟机时的floppy0提示的方法
  6. 解压war包和重新压缩war包
  7. java 输出小写‘a‘-‘z‘和大写‘A‘-‘Z‘
  8. 摄氏度转华氏度,并且输出的结果保留两位小数
  9. hadoop性能测试
  10. Win11鼠标右键默认显示更多,保持跟Win10一致