重建initrd镜像(Linux)
时间:2020-03-21 11:46:44 来源:igfitidea点击:
有时内核会由于创建不正确的initrd镜像而无法引导,例如:在LVM上使用根卷时,尝试将'/dev/VolGroup00/LogVol00'挂载到'/sysroot'。
三行nash代码有时可以为我们节省Dexter的时间。
快速方法
本文假定我们要修改的initrd文件为'/boot/initrd.img-3.4.89'。
复制并提取initrd镜像
# IMG=initrd.img-3.4.89 # cp -v /boot/"$IMG" /tmp/"$IMG".gz && gunzip /tmp/"$IMG".gz # mkdir /tmp/"$IMG"_dir && cd /tmp/"$IMG"_dir && cpio -i < ../"$IMG"
根据需要修改initrd镜像。
创建一个新图像
# find ./| cpio -H newc -o > /tmp/"$IMG".cpio # gzip /tmp/"$IMG".cpio && mv -v /tmp/"$IMG".cpio.gz /boot/"$IMG"-new # cd ~ && rm /tmp/"$IMG"* -Rf
不要忘记更新Grub配置以使用新的initrd文件(如果我们覆盖了旧的initrd文件,请忽略此行)。
详细方法
复制并提取initrd镜像
Initrd镜像通常是gzip压缩的cpio存档。
# file -b /boot/initrd.img-3.4.89 gzip compressed data, from Unix, last modified: Mon Jan 12 15:09:33 2014
复制initrd图像文件并展开它:
# cp /boot/initrd.img-3.4.89 /tmp/initrd.img-3.4.89.gz # gunzip /tmp/initrd.img-3.4.89.gz
展开的文件是cpio归档文件:
# file -b /tmp/initrd.img-3.4.89 ASCII cpio archive (SVR4 with no CRC)
创建一个临时目录以其中工作:
# mkdir /tmp/1 && cd /tmp/1
提取initrd存档:
# cpio -i < ../initrd.img-3.4.89 908760 blocks
不再需要旧的initrd存档文件,将其删除:
# rm ../initrd.img-3.4.89
修改initrd图像。
创建initrd镜像
创建一个新的cpio归档文件并将其压缩:
# find ./| cpio -H newc -o > /tmp/initrd.img-3.4.89.cpio
# gzip /tmp/initrd.img-3.4.89.cpio
# file -b /tmp/initrd.img-3.4.89.cpio.gz gzip compressed data, was "initrd.img-3.4.89.cpio", from Unix, last modified: Tue May 8 18:21:05 2014
将新的initrd镜像移至“/boot”文件夹:
# mv /tmp/initrd.img-3.4.89.cpio.gz /boot/initrd.img-3.4.89-new
确保我们适当地更新了Grub配置。