在某些情况下,可能需要解压initramfs映像文件以检查内置的文件信息。与以前的版本不同,在RHEL7上,对initramfs映像文件使用cpio命令不会直接解压所有文件, 将会给出一些错误。例如:
# ls -la /boot/initramfs-$(uname -r).img
-rw------- 1 root root 19602671 Feb 4 2016 /boot/initramfs-3.10.0-229.el7.x86_64.img
# file initramfs-3.10.0-229.el7.x86_64.img
initramfs-3.10.0-229.el7.x86_64.img: gzip compressed data, from Unix, last modified: Thu Feb 4 16:02:04 2016, max compression
# gzip -dc initramfs-3.10.0-229.el7.x86_64.img | cpio -id --- 不会直接解压所有文件, 将会给出一些错误。
1.查看initramfs镜像
如果你要列出initramfs映像文件的内容,可以使用lsinitrd命令:
# lsinitrd /boot/initramfs-3.10.0-229.el7.x86_64.img | more
Image: /boot/initramfs-3.10.0-229.el7.x86_64.img: 19M
========================================================================
Version: dracut-033-359.el7
Arguments: -f
dracut modules:
bash
nss-softokn
i18n
network
ifcfg
drm
plymouth
dm
kernel-modules
lvm
resume
rootfs-block
terminfo
udev-rules
biosdevname
systemd
usrmount
base
fs-lib
shutdown
========================================================================
drwxr-xr-x 12 root root 0 May 23 10:27 .
crw-r--r-- 1 root root 5, 1 May 23 10:27 dev/console
crw-r--r-- 1 root root 1, 11 May 23 10:27 dev/kmsg
crw-r--r-- 1 root root 1, 3 May 23 10:27 dev/null
2.解压initramfs镜像
要在RHEL7上解压它,需要使用skipcpio:
a.将initramfs映像文件复制到某个目录。
# mkdir /tmp/initramfs
# cp /boot/initramfs-3.10.0-229.el7.x86_64.img /tmp/initramfs/
b.使用/usr/lib/dracut/skipcpio命令解压initramfs镜像:
# cd /tmp/initramfs
# /usr/lib/dracut/skipcpio initramfs-3.10.0-229.el7.x86_64.img | zcat | cpio -ivd
.
var
var/lock
var/run
lib
其中skipcpio是dracut的内置工具。
附, Ubuntu和REHL系列稍有不同,在debian系的发行版本上一般使用的unmkinitramfs命令来解压initramfs文件
mkdir /tmp/initramfs
unmkinitramfs initrd.img-4.15.0-46-generic .
参考链接
- https://www.thegeekdiary.com/centos-rhel-7-how-to-extract-initramfs-image-and-editview-it/
- http://manpages.ubuntu.com/manpages/bionic/man8/unmkinitramfs.8.html