如何在单独的分区上编译并安装 kernel.org 内核,然后设置双启动

如何在单独的分区上编译并安装 kernel.org 内核,然后设置双启动

那个问题:编译 kernel.org 内核并将其安装到磁盘上的自定义卷部分回答了我的问题,但不完全!

我有一个30GB容量的磁盘。它有 2 个分区

  • 2GB 分区 ( /dev/sda1) 包含 Debian
  • 28GB 分区 ( /dev/sda2) 完全为空(已格式化,文件系统为ext4

我想编译并安装 kernel.org 内核(https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.78.tar.xz/dev/sda2并在我的 Debian 和新内核之间设置双启动

迄今为止:

我将第二个分区安装到/mnt(即)并在其中mount /dev/sda2 /mnt创建了一个目录(即我有目录)/src/mnt/src

当在/mnt/src,

我下载了内核并解压了它

wget --no-check-certificate https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.78.tar.xz
unxz -v linux-5.10.78.tar.xz
tar xvf linux-5.10.78.tar

我还安装了必要的工具来编译和安装内核

apt-get update
apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

当在/mnt/src/linux-5.10.78

我将现有的 Debian 内核配置复制到当前目录(即cp -v /boot/config-$(uname -r) .config),然后运行make olddefconfig(想法是使用我现有的配置并为其他所有内容提供默认值)。我也取消选中该Avoid speculative indirect branches in kernel选项,因为我You are building kernel with non-retpoline compiler, please update your compiler.. Stop.在 期间点击了make

然后我make -j 4又跑了起来,等待它结束。

之后,我INSTALL_MOD_PATH=/mnt INSTALL_PATH=/mnt/boot make modules_install按照上面链接的问题的建议运行安装必要的模块。

我的问题是,现在当我运行时update-initramfs它会失败,因为它找不到/lib/modules/5.10.78文件夹。显然,情况就是如此/mnt/lib/modules/5.10.78。我尝试提供不同的根路径(使用-b选项),但这不起作用。我也尝试过,但是,我实际上chroot没有必要的设置/可执行文件。/mntchroot

经过上述“修复”后,我希望运行update-grub能够发现内核映像、用于启动它的根文件系统和配置文件,并设置好一切,以便在重启后我可以同时获得两个启动选项(Debian 和新内核)。

任何有关这两者以及之后实际 grub 配置的帮助update-initramfs将不胜感激!我到处都找到了链接,但它们总是对该过程的高度概述。

答案1

安装最小 Debian 系统的最简单方法之一是,debootstrap bullseye /mntbullseye 是您寻求的版本以及/mnt您希望安装它的路径。

它需要一个内核,并且您的过程似乎是正确的。仅复杂的引导顺序需要 Initramfs 或 initrd:通常是 RAID 阵列中的根目录。我的服务器上没有任何东西并且工作正常。 (请注意,您的根文件系统类型不得编译为模块,而是嵌入到内核中)。

您还应该在您的/boot/grub/grub.cfg.通常 :


menuentry "Alternate Debian , kernel 5.10.78" {
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos2'
        linux   /boot/vmlinuz-5.10.78 root=/dev/sda2 ro  
}

insmod part_msdos如果您有旧的分区方案,则需要。在UEFI系统上,应该是insmod part_gpt,但是我不太了解。insmod ext2允许 grub 读取 ext2(或 ext4)文件系统。 set root=指示 grub 应在哪个分区上搜索 /boot/vmlinuz-5.10.78 (检查实际名称:它可能会有所不同),linux指示它应引导后面的内核,root=/dev/sda2指示您未来的根目录。

如果你真的想要一个更小的替代系统,也许 Gentoo 是更好的方法,但我只知道它的名字。你应该从 开始debootstrap

相关内容