如何恢复意外删除的initrd镜像?

我不小心删除了我的系统上的initrd映像。我该如何恢复它?
3个回答

这是对原始问题的答案,即如何从Live CD中提取initrd.lz文件,通常用于制作自定义的Live CD。

将initrd.lz复制到工作目录(~)。

cp /media/cdrom/initrd.lz ~

创建一个目录来提取内容,我将使用initrd,进入该目录。
mkdir ~/initrd
cd ~/initrd

提取

lzma -dc -S .lz ../initrd.lz | cpio -imvd --no-absolute-filenames

进行任何可能需要的更改,重新打包。
cd ~/initrd
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz

您的新 initrd 将位于您的主目录中,并称为 cusotm.initrd.lz

但是我怎么让它变成像initrd.img-3.2.0-15-generic-pae这样的initrd.img呢? - Binoy Babu
我正在尝试在我的Ubuntu安装中使用来自Live CD的initrd。不小心删除了它。 - Binoy Babu
嗯,那是困难的方式;)使用mkinitramfs - Panther
@bodhi.zazen 但是如何重新打包这个:http://askubuntu.com/questions/777260/how-to-repack-initrd-img? - EdiD

每个内核的initrd镜像是在内核安装时从机器上的模块和应用程序构建的。您可以使用下面的命令简单地构建一个缺失的initrd:
update-initramfs -c -k <version>

请记得将适用于您的内核替换为相应版本。


当不存在initrd时,此命令的详细信息无需执行任何操作(13.10)。 - mchid

这是解决评论中提出的OP问题的更好方法。
“我正在尝试在我的Ubuntu安装中使用来自livecd的initrd。不小心删除了它。” - Binoy Babu
要创建一个initramfs,首先启动一个备用内核(旧版本也可以)。
然后运行
sudo mkinitramfs 3.2.0-15-generic-pae -o /boot/initrd.img-3.2.0-15-generic-pae

我没有安装pae内核,如果“3.2.0-15-generic-pae”无法工作,请列出/lib/modules的内容以获取名称:
ls /lib/modules

如果您没有较旧的内核,可以启动一个Live CD并使用chroot:
1. 首先挂载您的根分区:mount -t ext4 /dev/sdX /mnt。确保在此命令中使用正确的分区名称和类型。使用诸如lsblk、blkid等命令找到正确的分区。
2. [可选] 如果您有单独的引导分区,请接下来挂载它:mount -t ext4 /dev/sdY /mnt/boot
3. 接下来,绑定挂载所有mkinitramfs命令所需的虚拟文件系统... mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys mount --bind /dev /dev/proc
4. 现在切换到/mnt文件夹,并按上述描述运行mkinitramfs命令。

这个答案真是救了我一命! - Autodidact