update-initramfs 生成了不应该存在的垃圾镜像

update-initramfs 生成了不应该存在的垃圾镜像

也许有人会需要这个:)

基本上,前段时间我在研究 initramfs 压缩模式,并创建了一个只更新当前 initramfs 映像的单行代码。经过反复尝试,我成功了。但是,由于我对 bash 一窍不通,所以我遇到了一个问题。

尝试更新所有 initrd 映像时的终端输出:

root@OMEN:/boot# update-initramfs -k all -c
update-initramfs: Generating /boot/initrd.img-{uname
WARNING: missing /lib/modules/{uname
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: Bad version passed {uname
dpkg: įspėjimas: version '{uname' has bad syntax: version number does not start with digit
dpkg: įspėjimas: version '{uname' has bad syntax: version number does not start with digit
depmod: ERROR: Bad version passed {uname
update-initramfs: Generating /boot/initrd.img--r}
update-initramfs: Generating /boot/initrd.img-(uname
WARNING: missing /lib/modules/(uname
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: Bad version passed (uname
dpkg: įspėjimas: version '(uname' has bad syntax: version number does not start with digit
dpkg: įspėjimas: version '(uname' has bad syntax: version number does not start with digit
depmod: ERROR: Bad version passed (uname
update-initramfs: Generating /boot/initrd.img--r)

我怎样才能摆脱所有这些错误?

答案1

问题是 update-initramfs 工具如何知道这些“版本”(它如何设法“生成”这些版本又是另一个问题 :D)?找到...

  1. cd(转至)目录:

    lukas@OMEN:/etc/initramfs-tools$ cd /var/lib/initramfs-tools
    
  2. ls(列出)当前目录中的文件:

    lukas@OMEN:/var/lib/initramfs-tools$ ls
    '-r)'   -r}  '(uname'   {uname  '(uname -r)'  '{uname -r}'
    

    在这里我们可以看到这些文件。如果您发现可能需要其他文件,请逐个删除它们,或者直接删除它们:

    lukas@OMEN:~$ sudo rm /var/lib/initramfs-tools/*
    

现在,删除...中的垃圾文件/boot首先,检查有哪些文件:

lukas@OMEN:~$ ls /boot
 boot                          initrd.img-5.7.10-xanmod2     System.map-5.4.0-42-generic
 config-5.3.0-62-generic       initrd.img-5.7.11-xanmod1     System.map-5.7.10-xanmod2
 config-5.4.0-42-generic       initrd.img-{uname             System.map-5.7.11-xanmod1
 config-5.7.10-xanmod2        'initrd.img-{uname -r}'        vmlinuz-5.3.0-62-generic
 config-5.7.11-xanmod1         lost+found                    vmlinuz-5.4.0-42-generic
 efi                           memtest86+.bin                vmlinuz-5.7.10-xanmod2
 grub                          memtest86+.elf                vmlinuz-5.7.11-xanmod1
 initrd.img-5.3.0-62-generic   memtest86+_multiboot.bin
 initrd.img-5.4.0-42-generic   System.map-5.3.0-62-generic

然后删除您认为是垃圾的文件(当心,删除错误的文件可能会导致你的系统无法启动):

lukas@OMEN:~$ sudo rm "/boot/initrd.img-{uname -r}"

如果文件有空格符号或一些奇怪的符号,请将参数放在rm引号中(和都'有效"

如果你不小心删除了需要的图像,不要重新启动计算机,首先执行以下操作:

  1. 在终端中输入uname -r,然后sudo ls /boot检查正在运行的内核是否仍然具有 initrd 映像(应该是initrd.img-VERSIONVERSION输出来自uname -r)。如果有这样的文件,您将能够重新启动 PC 进入 GNU/Linux。不过,仍然建议执行以下步骤。
  2. 打开 Synaptic 或 Muon(如果均未安装,sudo apt install synaptic),然后从仪表板或应用程序菜单启动。
  3. 搜索已安装的linux-image软件包(将引号中的内容放入搜索框,等待应用程序加载软件包列表,然后按“已安装版本”或“状态”对软件包进行排序)。
  4. 重新安装显示“已安装版本”或下面状态为“已安装”的所有内容。
  5. 再次检查/boot目录ls /boot,如果您再次拥有 initrd 映像,那么您就可以放松并做您想做的事情,包括成功重启。

相关内容