LFS 系统无法启动或 GRUB 无法在启动时访问 /boot/grub

LFS 系统无法启动或 GRUB 无法在启动时访问 /boot/grub

我能找到的最接近的问题是这个,但是它与我需要的仍然有很大不同:GRUB安装失败

我的具体设置以及生成此内容所遵循的步骤

我正在尝试使用书籍版本 7.2 构建 Linux From Scratch 项目。我遵循了整个过程中的每一步,并执行了我能做的每一项测试,以确保构建后一切正常运行。我必须做的最大的改变是分区,我有/dev/sda1(作为/)、/dev/sda2(作为/home)、/dev/sda3(作为swap)和/dev/sdb1(作为/source)用于编译)。

我正在使用 LiveCD 作为主机操作系统在 VirtualBox 内的空白硬盘上执行安装。所以,直到最后我遇到的问题很少。对于编译内核,我需要选择哪些选项并不是很具体,所以我一改就选择了默认选项,我确保了“Device Drivers ---> Generic Driver Options ---> Maintenance a”中的选项已检查要挂载在 /dev 的 devtmpfs 文件系统”。

按照有关设置 GRUB 的其余说明进行操作后,重新引导后,引导过程会冻结,并显示以下输出:

ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata3.00: ATA-6: VBOX HARDDISK, 1.0, max UDMA/133
ata3.00: 33554432 sectors, multi 128: LBA48 NCQ (depth 31/32)
ata3.00: configured for UDMA/133
scsi 2:0:0:0: Direct-Access ATA VBOX HARDDISK 1.0 PQ: 0 ANSI: 5
scsi 4:0:0:0: CD-ROM VBOX CD-ROM 1.0 PQ: 0 ANSI: 5
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Pid: 1, comm: swapper/0 Not tainted 3.5.2 #1
Call Trace:
 ? panic
 ? mount_block_root
 ? xen_write_msr_safe
 ? mount_root
 ? prepare_namespace
 ? kernel_init
 ? start_kernel
 ? kernel_thread_helper
atkbd serio0: Spurious ACK on isa0060/serio0. Some program might be trying to access hardware directly.

所以,当我第一次收到这个消息时,我想这可能与内核有关,也许我没有选择我必须选择的内容,经过一番谷歌搜索后,我发现我应该确保“ SATA_SIL”已启用。我还找到了一个网站,详细介绍了在 VirtualBox 中运行的内核需要启用的内核选项(http://en.gentoo-wiki.com/wiki/Virtualbox_Guest)。然后,我将机器恢复到编译内核之前保存的状态,并使用该网站上指定的选项以及 SATA_SIL 重新编译它。

然而,经过漫长的内核编译之后,我按照书本发出了命令grub-install /dev/sda。然而,这一次 GRUB 没有安装,而是返回了以下错误:

Path to `/boot/grub' is not readable by GRUB on boot. Installation is impossible. Aborting.

我的第一个想法是它与文件权限有关(因为“不可读”确实听起来像文件权限)。因此,只是为了看看,我将 /boot 文件夹(递归地)设置为 777。仍然没有成功。之后,我进行了一些谷歌搜索,但确实没有返回任何有意义的结果。

因此,接下来,我将机器恢复到 GRUB 可以工作但无法启动的版本,使用相同的配置并在那里重新编译内核(其中,我必须添加一个新的硬盘驱动器 /dev/sdc ,因为 /dev/sdb1 中没有足够的空间来使用新选项编译内核)。再次经过漫长的编译后,我安装了内核,重新启动,然后......与以前一样的错误转储。

主要问题

所以,现在我认为我可能需要一些帮助,如果有人有任何想法我如何克服这个引导错误和/或 GRUB 安装路径错误,那就太好了!

额外的信息

我的所有软件都是 LFS 7.2 版本的确切版本,完整列表可以在此处找到:http://pastebin.com/TiJBhbce

以下是计算机中所有驱动器的结构和设置的完整列表: root:~# fdisk -l

Disk /dev/sda: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders, total 8388608 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
Disk identifier: 0xeeeb9d91

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     6293503     3145728   83  Linux
/dev/sda2         6293504     6817791      262144   83  Linux
/dev/sda3         6817792     8388607      785408   83  Linux

Disk /dev/sdc: 17.2 GB, 17179869184 bytes
171 heads, 2 sectors/track, 98112 cylinders, total 33554432 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
Disk identifier: 0x4c41c1df

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    33554431    16776192   83  Linux

Disk /dev/sdb: 4294 MB, 4294967296 bytes
43 heads, 32 sectors/track, 6096 cylinders, total 8388608 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
Disk identifier: 0xd3de256f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     8388607     4193280   83  Linux

重新启动后应以 / 启动的驱动器,以下是 /dev/sda1 的内容:

drwxr-xr-x 24 root root  4096 Feb 17 20:46 .
drwxr-xr-x  3 root root    60 Feb 17 22:46 ..
drwxr-xr-x  2 root root  4096 Feb 17 13:11 bin
drwxr-xr-x  3 root root  4096 Feb 17 16:00 boot
drwxr-xr-x  2 root root  4096 Feb 17 20:46 build
drwxr-xr-x  2 root root  4096 Feb 16 20:06 dev
drwxr-xr-x 12 root root  4096 Feb 17 15:52 etc
drwxr-xr-x  2 root root  4096 Feb 16 13:11 home
drwxr-xr-x  7 root root  4096 Feb 17 22:11 lib
drwx------  2 root root 16384 Feb 16 13:09 lost+found
drwxr-xr-x  4 root root  4096 Feb 16 20:24 media
drwxr-xr-x  2 root root  4096 Feb 16 20:24 mnt
drwxr-xr-x  2 root root  4096 Feb 16 20:24 opt
drwxr-xr-x  2 root root  4096 Feb 16 20:06 proc
drwxr-x---  3 root root  4096 Feb 17 22:14 root
drwxr-xr-x  3 root root  4096 Feb 17 09:38 run
drwxr-xr-x  2 root root  4096 Feb 17 14:36 sbin
drwxr-xr-x  2 root root  4096 Feb 16 13:11 sources
drwxr-xr-x  2 root root  4096 Feb 16 20:24 srv
drwxr-xr-x  2 root root  4096 Feb 16 20:06 sys
drwxrwxrwt  3 root root 20480 Feb 17 22:12 tmp
drwxr-xr-x 13 root root  4096 Feb 16 18:51 tools
drwxr-xr-x  9 root root  4096 Feb 16 20:24 usr
drwxr-xr-x 11 root root  4096 Feb 16 23:26 var

答案1

我已经能够完成 LFS,我相信 GRUB 给出指定错误的原因是因为我没有正确安装所有内容。该脚本应根据需要安装所有内容:

export LFS=/mnt/lfs
mkdir -p $LFS
mount -v -t ext4 /dev/sda1 $LFS
mount -v -t ext4 /dev/sda2 $LFS/home
mount -v -t ext4 /dev/sdb1 $LFS/sources
/sbin/swapon -v /dev/sda3
mount -v -t tmpfs -o size=20m tmpfs /tmp
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='\u:\w\$ '              \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

至于无法启动的错误,是内核编译导致的。我的硬盘使用的是 ext4,我必须将其编译到内核中才能使其工作。这是我必须使用的内核设置:

Device Drivers  --->
    Generic Driver Options -->
        [*] Maintain a devtmpfs filesystem to mount at /dev
File systems  --->
    <*> The Extended 4 (ext4) filesystem
        [*] Use ext4 for ext2/ext3 file systems
        [*] Ext4 extended attributes
            [*] Ext4 POSIX Access Control Lists
            [*] Ext4 Security Labels

相关内容