/dev/sda1
我在( /
) 和/dev/sda2
(扩展、/dev/sda5
是/home
、是交换)上有一个 Debian 系统/dev/sda6
。我想并行安装 Gentoo,所以我缩小了 sda2 并创建了/dev/sda3
,在其中安装了 Gentoo,并且/dev/sda4
,作为 Gentoo 的/home
:
Disk /dev/sda: 931.5 GiB, 1000204885504 bytes, 1953525167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeb362e8f
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 29296639 29294592 14G 83 Linux
/dev/sda2 29298686 1673951231 1644652546 784.2G 5 Extended
/dev/sda3 1673951232 1735391231 61440000 29.3G 83 Linux
/dev/sda4 1735391232 1953523711 218132480 104G 83 Linux
/dev/sda5 29298688 35547135 6248448 3G 82 Linux swap / Solaris
/dev/sda6 35549184 1673949183 1638400000 781.3G 83 Linux
Partition table entries are not in disk order.
我跳过了 Gentoo 手册中的“bootloader”部分,因为我想使用当前安装的 grub2 /dev/sda1
,所以在完成安装后,我启动到 Debian 并运行update-grub
,这成功地将 Gentoo 添加到菜单中。但是,当启动到它时,我收到内核恐慌和一条有关无法打开根设备的消息:
系统表对于 Debian 和系统表对于 Gentoo 来说。我尝试编辑 Gentoo 的 fstab 以使用像 Debian 一样的 UUID,但没有成功。我还尝试在 grub 中编辑 Gentoo 的启动选项。原来的:
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Gentoo Base System release 2.2 (on /dev/sda3)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
insmod part_msdos
insmod ext2
set root='hd0,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//sas/disk@0,msdos3' --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 1c46e4aa-e486-48ba-8f61-1484ed899e1e
else
search --no-floppy --fs-uuid --set=root 1c46e4aa-e486-48ba-8f61-1484ed899e1e
fi
linux /boot/vmlinuz-4.1.12-gentoo root=/dev/sda3
}
submenu 'Advanced options for Gentoo Base System release 2.2 (on /dev/sda3)' $menuentry_id_option 'osprober-gnulinux-advanced-1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
menuentry 'Gentoo Base System release 2.2 (on /dev/sda3)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.12-gentoo--1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
insmod part_msdos
insmod ext2
set root='hd0,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//sas/disk@0,msdos3' --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 1c46e4aa-e486-48ba-8f61-1484ed899e1e
else
search --no-floppy --fs-uuid --set=root 1c46e4aa-e486-48ba-8f61-1484ed899e1e
fi
linux /boot/vmlinuz-4.1.12-gentoo root=/dev/sda3
}
}
### END /etc/grub.d/30_os-prober ###
我尝试使用set root="/dev/sda3"
,set root="sda3"
但老实说我不知道这意味着什么,它似乎与恐慌消息有关。那么这里发生了什么以及我应该如何进行?值得一提的是,我是从通过 USB 插入的外部硬盘 ( /dev/sda
) 启动的(我的内部硬盘坏了)。 Gentoo 安装没有任何错误/警告,我不认为我忘记将任何内容编译到内核中,但我想这是可能的......我很确定包含了 ext4、SCSI 和 USB 支持(不是作为模块)。
答案1
看来您没有将 SATA 驱动程序编译到 Gentoo 内核中(或编译为模块)。我关心的那行大约是您所附屏幕截图的一半,其中写着:
请附加正确的“root=”选项;以下是可用的分区:
但没有列出可用的分区。对我来说,Gentoo 根本无法与物理磁盘通信。如果您不知道哪种 SATA 控制器,您可以通过lshw
在 Debian 中运行来查找。这不仅会告诉你该卡是什么,还会告诉你它正在使用什么内核驱动程序(在 SATA 部分下查找“configuration: driver=”行),这样你就可以将它添加到你的 Gentoo 内核中。
答案2
正如 David King 所说,罪魁祸首很可能是缺少内核驱动程序。 以下是使 USB 大容量存储正常工作所需的内核选项列表。 尝试从 gentoo livecd chroot 进入 gentoo 系统(您可能知道 Gentoo 手册对此进行了详细描述)。在那里你可以重新配置和重新编译内核(Gentoo 手册中也有很好的描述)。如果您创建了 initramfs,请不要忘记重新创建它,否则新编译的内核和驱动程序将在启动时不可用。
答案3
查看您的内核配置,看起来您启用了现代系统在没有 initrd 的情况下启动所需的所有功能,但您使用的是较旧的计算机;我注意到在你的lshw
输出中你有一个 ISA 桥和一个 Pentium M 1.4 CPU。
我的猜测是您缺少像 CONFIG_PATA_MPIIX 或 ATA_GENERIC 或 PATA_LEGACY 这样的 PATA 选项,但我不会玩猜测游戏,而是这样做:
插入 USB 驱动器启动您的 debian 系统。
lsmod
看看您还需要添加什么到您的内核配置 (=y) 才能让它运行,或者发布输出,也许我们可以给您一些提示。
或者使用这个网站,http://kmuto.jp/debian/hcl/,并粘贴结果:lspci -n
以下是我通常在 Gentoo 中配置内核的方式:
- 启动 ArchLinux USB 和 lsmod
- 从 Slackware 复制最新的内核配置,例如 http://mirrors4.kernel.org/slackware/slackware64-current/source/k/config-x86_64/config-generic-4.1.15.x64
Slackware 与 Gentoo 类似两者都不使用 systemd(Gentoo 默认情况下不使用),他们使用长期发行的内核版本,而且我对他们的配置很满意。 Generic 是将他们认为您需要的所有内容构建为 =y 并将可选内容构建为 =m,巨大将所有内容构建为 =y (这几乎保证可以工作,但会给您一个非常臃肿的内核)。 - 制作旧配置
- 设置 EXT4=y 和任何其他文件系统模块(由于某种原因 Slackware 并不总是启用它)。
- 确保您已将 Gentoo 内核配置指南中的模块设置为 =y
- 通过 lsmod =y 设置除 ALSA 和 Wifi 模块之外的任何模块。
- 在处理器类型和功能 -> 处理器系列中选择正确的处理器类型
- 完成安装。
如果仍然不起作用,我猜测驱动器在 Debian 中正在抓取 /dev/sda,但在 Gentoo 中则抓取其他内容(可能是 /dev/sdb)。解决此问题的最简单方法是在 /etc/fstab 中使用 UUID= 并在传递给内核的引导加载程序参数中使用 PARTUUID= 。您可以从 blkid 输出中找到 PARTUUID。
答案4
几年来,USB 设备发现一直是异步过程。虽然您可能已经编译了所有驱动程序,并且您的屏幕截图确实显示了您的 USB 存储设备正在被枚举,但我怀疑内核正在尝试在 USB 大容量存储驱动程序完成初始化之前挂载根文件系统。
您的 grub 配置似乎没有指定加载 initramfs。
虽然我无法就 gentoo 的具体情况向您提供建议,但我希望我使用的 Debian 系统足够相似,可以帮助您找到正确的答案。在 Debian 中,initramfs 脚本将停止启动过程,直到可以安装必要的块设备为止。
据我所知,在 Debian 中,核心 initramfs 脚本之一 /scripts/local 具有启动 udev 并等待枚举根设备所需的逻辑。具体来说,我指的是 local_device_setup() 函数;看这里。
我想gentoo有一些类似的系统?