ubuntu 下的文件系统initramfs解压缩

系统: ubuntu 16.04

解压镜像:/boot/initrd.img-4.15.0-107-generic

需要额外安装的工具:sudo apt-get install binwalk -y

  1. 使用lsinitramfs工具查看initramfs的具体文件
lsinitramfs /boot/initrd.img-4.15.0-107-generic
  1. 使用binwalk查看initramfs内包含的格式
binwalk /boot/initrd.img-4.15.0-107-generic 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: ".", file name length: "0x00000002", file size: "0x00000000"
112           0x70            ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
232           0xE8            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
356           0x164           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
488           0x1E8           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/AuthenticAMD.bin", file name length: "0x00000026", file size: "0x00006B2A"
28072         0x6DA8          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
28672         0x7000          ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
28792         0x7078          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
28916         0x70F4          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
29048         0x7178          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin", file name length: "0x0000002A", file size: "0x002DD400"
3032592       0x2E4610        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
3033088       0x2E4800        gzip compressed data, from Unix, last modified: 2020-07-06 05:10:31
46149573      0x2C02FC5       Cisco IOS microcode, for ""
56593448      0x35F8C28       MySQL ISAM compressed data file Version 11

从上面可以看出,再3033088处开始,是gzip压缩格式的数据,从这是initramfs中的文件系统。
3. 解压

dd if=/boot/initrd.img-4.15.0-107-generic bs=3033088 skip=1 | zcat | cpio -id --no-absolute-filenames -v
bin  conf  etc  init  lib  lib64  run  sbin  scripts  usr  var

initrd使用lzma压缩的。那么解压时候就不能用zcat命令了。应该使用如下命令:

dd if=/mnt/casper/initrd bs=1540096 skip=1 | lzcat | cpio -id --no-absolute-filenames -v

lzcat=xz --format=lzma --decompress --stdout
  1. 压缩
find . | cpio --quiet --dereference -o -H newc | gzip -9 > ~/new-initrd.gz

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ~/new-initrd.lz

参考:

https://blog.csdn.net/xiaofeng_yan/article/details/83303544
https://www.computerhope.com/unix/xz.htm
https://askubuntu.com/questions/777260/how-to-repack-initrd-img
https://wiki.ubuntu.com/CustomizeLiveInitrd

### Ubuntu 系统启动过程中的关键命令 在Ubuntu系统启动过程中,涉及多个阶段和服务调用。以下是各个重要阶段及其对应的命令: #### 1. BIOS/UEFI 阶段 BIOS 或 UEFI 是计算机硬件最先加载的部分,负责初始化硬件并引导后续的操作系统加载程序。 #### 2. GRUB 引导菜单 (Grand Unified Bootloader) GRUB 负责显示操作系统的选项列表,并允许用户选择要启动的内核版本或其他操作系统。 ```bash grub> boot # 执行选定条目的启动配置 ``` #### 3. 内核加载阶段 当选择了特定的内核映像后,GRUB 将控制权交给 Linux 内核文件(vmlinuz),此时会执行一系列内置指令来完成核心功能的初始化[^1]。 #### 4. initramfs 初始化内存文件系统 initramfs 提供了一个临时根文件系统,在此期间解压缩必要的驱动模块以便访问实际存储设备上的永久性根文件系统。 ```bash pivot_root /newroot /oldroot # 切换到新的根目录 exec switch_root /newroot /sbin/init $INITARGS # 启动真正的 init 进程 ``` #### 5. systemd 系统管理器接管 一旦切换到了真实的根文件系统,`systemctl start default.target` 命令会被触发,这标志着进入了多用户图形界面模式下的服务激活流程。 #### 6. 图形登录管理器 (LightDM/GDM) 最后一步是由所选的显示管理器呈现给用户的登录屏幕,等待输入用户名密码验证身份之后即可进入桌面环境。 为了查看当前正在运行的服务以及它们之间的依赖关系,可以使用如下命令: ```bash systemctl list-dependencies graphical.target ``` 对于想要深入了解具体某个服务如何被启动或者调试启动问题的情况来说,还可以利用 journal 日志工具获取更多信息: ```bash journalctl -b -u <service_name> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值