我的系统中缺少 vmlinuz,如何修复?

xpt*_*xpt 3 linux boot kernel ubuntu linux-kernel

所有 Linux 都应该带有vmlinuz/”和“ /boot/”。但是,我的系统没有它:

% ls -l /vmlinuz* /initrd* /boot/vmlinuz*
ls: cannot access '/vmlinuz*': No such file or directory
ls: cannot access '/initrd*': No such file or directory
ls: cannot access '/boot/vmlinuz*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

怎么才能把三个都找回来呢?

我试过,

apt-get install --reinstall linux-image-generic linux-headers-generic
update-initramfs -u
Run Code Online (Sandbox Code Playgroud)

根据我读过的文章,这应该已经解决了问题,因为实际的软件包也会重新安装:

% apt-get install --reinstall linux-image-generic linux-headers-generic 
Preparing to unpack .../linux-headers-generic_4.15.0.20.23_amd64.deb ...
Unpacking linux-headers-generic (4.15.0.20.23) over (4.15.0.20.23) ...
Preparing to unpack .../linux-image-generic_4.15.0.20.23_amd64.deb ...
Unpacking linux-image-generic (4.15.0.20.23) over (4.15.0.20.23) ...
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for install-info (6.5.0.dfsg.1-2) ...
Processing triggers for systemd (237-3ubuntu10) ...
Processing triggers for man-db (2.8.3-2) ...
Setting up linux-image-generic (4.15.0.20.23) ...
Setting up linux-headers-generic (4.15.0.20.23) ...
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for systemd (237-3ubuntu10) ...
Run Code Online (Sandbox Code Playgroud)

但之后我仍然缺少上述三个文件。

A.B*_*A.B 5

apt-get install --reinstall linux-image-generic
Run Code Online (Sandbox Code Playgroud)

只会重新安装一个空包,该包不包含实际的内核代码,但仅针对其提取的依赖项而存在。

应该(重新)安装而不是恢复丢失的文件的是当前由linux-image-generic/boot指定为依赖项的包。今天是linux-image-4.15.0-20-generic。所以:

apt-get install --reinstall linux-image-4.15.0-20-generic
Run Code Online (Sandbox Code Playgroud)

应该使丢失的文件(重新)出现。实际上它只包含最少需要的文件:/boot/vmlinuz-4.15.0-20-generic. 另外,重新安装其依赖项linux-modules-4.15.0-20-generic将恢复其他一些丢失的文件/boot(根据列表):

/boot/System.map-4.15.0-20-generic
/boot/abi-4.15.0-20-generic
/boot/config-4.15.0-20-generic
/boot/retpoline-4.15.0-20-generic
Run Code Online (Sandbox Code Playgroud)