2.grub的安装

首先从ftp://alpha.gnu.org/pub/gnu/grub 下载GRUB的源代码,得到文件grub-0.5.96.1.tar.gz,然后:

# tar -xvzf grub-0.5.96.1.tar.gz

这个命令将解开的文件和目录放在一个名为grub-0.5.96.1的目录中。现在运行如下命令:

#cd grub-0.5.96.1

# ./configure

如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:

# ./configure --help

这个命令将输出所有的命令选项。现在可以使用—enable和—disable选项增加或

删除对特定网卡的支持。(注意:GRUB支持网络启动)

为了开始编译过程,键入如下命令:

# make

# make install

至此你已经为安装GRUB真正做好了准备。

2.1安装到主引导区

GRUB的相关文件保存在诸如/boot/grub的目录中。默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc(或者在/usr/local/share/grub/i386-pc目录下,这只取决于shell变量的设置。) 。建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:stage1 stage2 * stage1 5。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin目录下)拷贝到/boot/grub目录下。

#cd /boot/grub

# ./grub

这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。

TAB键可列出可能的命令列表。其它情况下TAB会列出设备或文件名。类似下面的提示会出现:

grub> grub> setup (hd0,4)即可)

现在,假设你将Linux安装在了第一块硬盘的第一个分区中或者/dev/hda1中。记住GRUB的命名规则,将上面的名字改为(hd0,0)。键入下面的命令:

grub> install  (hd0,0)/boot/grub/stage1  (hd0)  (hd0,0)/boot/grub/stage2

p (hd0,0)/boot/grub/menu.conf

现在分析一下这个命令的细节。

Install一个内置的命令,它告诉GRUB(hd0,0)/boot/grub/stage1安装到hd0的主引导纪录中;

(hd0,0)/boot/grub/stage2 告诉GRUB stage2映象的位置。

p 以及随后的选项 (hd0,0)/boot/grub/menu.conf:为菜单的显示设置配置文件。

附注:如果已经安装了grub要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。

 

2.2 安装到软盘上

法一:

安装stage1到软盘上: 插入一张已格式化的软盘

#cd /boot/grub

# dd if=stage1 of=/dev/fd0 bs=512 count=1

命令的详细说明如下:

if=输入文件

比如说 stage1

of=输出路径

比如说 软盘(不是在每台机子中软盘都是/dev/fd0,具体可用fdisk –l查看)

bs=读出或是写入的字节数

这里是512字节

count=执行前面操作的次数

安装stage2到软盘

# dd if=stage2 of=/dev/fd0 bs=512 seek=1

这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将跳过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节 ,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。

法二:

将一张空盘插入 1.44MB 软驱,输入:

# mke2fs /dev/fd0

创建了 ext2 文件系统后,需要安装该文件系统:

# mount /dev/fd0 /mnt/floppy

现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:

# mkdir /mnt/floppy/boot

# mkdir /mnt/floppy/boot/grub

# cp /boot/grub/stage1 /mnt/floppy/boot/grub

# cp /boot/grub/stage2 /mnt/floppy/boot/grub

root 用户运行“grub”,该程序实际上是GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(GRUB控制台)完全相同。

grub> 提示符处,输入:

grub> root (fd0)

grub> setup (fd0)

grub> quit

 
<think>我们正在解决的是在GRUB命令行中出现的两个关键错误:'error: file /boot not found' 和 'error: unknown filesystem'。这些错误表明GRUB无法定位到正确的启动分区或启动文件。根据之前的对话和引用内容,我们可以按以下步骤操作: ### 步骤1: 确定正确的启动分区 首先,我们需要通过`ls`命令逐一检查磁盘分区,直到找到包含`/boot`目录(或根目录下有`/boot`)的分区。在GRUB救援模式下(提示符为`grub rescue>`)或GRUB命令行(提示符为`grub>`)中执行: ```bash # 列出所有磁盘设备 grub> ls (hd0) (hd0,gpt1) (hd0,gpt2) (hd1,gpt1) (hd1,gpt2) ... # 示例输出 # 逐一检查每个分区 grub> ls (hd0,gpt1) # 如果输出显示文件系统类型(如ext4)而不是"unknown filesystem",则继续查看内容 grub> ls (hd0,gpt1)/ # 或者 grub> ls (hd0,gpt1)/boot # 尝试查看boot目录 ``` 如果某个分区显示`/boot`目录下的文件(如`vmlinuz-xxx`和`initrd.img-xxx`),或者显示根目录下的`/boot`文件夹,则这个分区很可能是启动分区[^1][^2][^3]。 ### 步骤2: 设置GRUB环境变量 一旦确定了正确的分区(假设为`(hd0,gpt2)`): ```bash # 设置根分区 grub> set root=(hd0,gpt2) # 设置prefix路径(GRUB模块路径) grub> set prefix=(hd0,gpt2)/boot/grub ``` ### 步骤3: 加载必要模块 ```bash # 加载normal模块 grub> insmod normal # 如果上述命令失败,尝试使用完整路径(根据步骤1中确定的实际路径) grub> insmod (hd0,gpt2)/boot/grub/i386-pc/normal.mod ``` ### 步骤4: 进入正常模式 ```bash grub> normal ``` 如果成功,将会显示GRUB菜单。如果失败,则可能需要手动引导内核。 ### 步骤5: 手动引导内核(可选) 如果`normal`命令没有显示菜单,或者菜单选项无法启动,可以手动引导: ```bash # 确保root已正确设置 grub> set root=(hd0,gpt2) # 加载Linux内核(替换xxx为实际内核版本号,可通过步骤1中ls命令查看) grub> linux /boot/vmlinuz-xxx-xxx root=/dev/sda2 # root参数根据分区调整,例如(hd0,gpt2)对应/dev/sda2 grub> initrd /boot/initrd.img-xxx-xxx grub> boot ``` **注意**:`root=/dev/sdXY`中的设备名与GRUB设备名的对应关系: - GRUB设备 `(hd0,gpt1)` → Linux设备 `/dev/sda1` - GRUB设备 `(hd1,gpt2)` → Linux设备 `/dev/sdb2` ### 步骤6: 检查文件系统(如果仍有错误) 如果在步骤1中遇到多个分区都是`unknown filesystem`,或者确定分区后仍有错误,可能是文件系统损坏。需要从Live CD/USB启动,然后运行: ```bash # 假设根分区为/dev/sda2 fsck -y /dev/sda2 ``` ### 步骤7: 永久修复GRUB 成功启动进入系统后,在终端执行: ```bash sudo grub-install /dev/sda # 将GRUB安装到磁盘(sda为磁盘设备) sudo update-grub # 更新配置 ``` ### 常见问题解答 **Q1: 如何区分`(hd0,gpt1)`和`(hd0,msdos1)`?** - `gpt`表示GPT分区表,`msdos`表示MBR分区表。现代系统通常使用GPT。 **Q2: GRUB设备名如何对应Linux设备名?** - `(hd0)` → `/dev/sda` - `(hd0,gpt1)` → `/dev/sda1` - `(hd1,gpt2)` → `/dev/sdb2` **Q3: Linux内核版本号记不住怎么办?** - 在步骤1中,使用`ls (hd0,gpt2)/boot`查看,通常以`vmlinuz-`开头的文件即为内核文件。 ### 相关问题 1. 如何修复GRUB引导菜单中缺失的Windows启动项? 2. 系统更新后GRUB无法启动内核该怎么办? 3. 如何备份和恢复GRUB配置文件? 4. UEFI系统下GRUB修复与BIOS有何不同? 通过以上步骤,大多数`file /boot not found`和`unknown filesystem`错误都可以解决。关键是要准确找出包含`/boot`目录的正确分区[^1][^2][^3]。 </think>### GRUB命令行中解决 "file /boot not found" 和 "unknown filesystem" 错误的完整指南 #### 步骤1:识别正确的分区(关键) 1. **列出所有设备**: ```bash grub> ls (hd0) (hd0,gpt1) (hd0,gpt2) (hd1,gpt1) (hd1,gpt2) ... # 示例输出 ``` 2. **逐一检查分区文件系统**: ```bash grub> ls (hd0,gpt1)/ grub> ls (hd0,gpt2)/ grub> ls (hd1,gpt1)/ # 继续直到找到有效分区 ``` - 如果显示 `unknown filesystem` → 跳过 - 如果显示文件列表 → 这就是有效分区[^1] 3. **查找/boot目录**: ```bash grub> ls (hdX,gptY)/boot ``` 成功时会显示内核文件:`vmlinuz-xxx` 和 `initrd.img-xxx`[^3] #### 步骤2:正确设置GRUB环境变量 假设找到的有效分区是 `(hd1,gpt2)`: ```bash grub> set root=(hd1,gpt2) # 设置根分区 grub> set prefix=(root)/boot/grub # 设置GRUB路径 grub> insmod normal # 加载基础模块 ``` #### 步骤3:解决特定错误场景 **场景1:出现 `file '/boot not found'`** ```bash # 手动加载内核(替换xxx为实际内核版本) grub> linux /boot/vmlinuz-xxx-xxx root=/dev/sdb2 # sdb2对应(hd1,gpt2) grub> initrd /boot/initrd.img-xxx-xxx grub> boot ``` **场景2:持续出现 `unknown filesystem`** 1. 检查分区表类型: ```bash grub> ls (hd1) # 查看磁盘分区表类型 ``` - 如果显示 `MSDOS` → 使用 `msdos` 标签:`set root=(hd1,msdos2)` - 如果显示 `GPT` → 使用 `gpt` 标签[^2] 2. 尝试不同文件系统模块: ```bash grub> insmod ext2 grub> insmod ntfs # 对于Windows双系统 grub> insmod btrfs ``` #### 步骤4:手动引导系统(终极方案) 当所有自动方式失败时: ```bash grub> set root=(hd1,gpt2) grub> linux /vmlinuz root=/dev/sdb2 ro # 内核可能在根目录 grub> initrd /initrd.img grub> boot ``` #### 步骤5:成功启动后的修复(防止复发) 进入系统后执行: ```bash # 重新安装GRUB sudo grub-install /dev/sda # 重新生成配置文件 sudo update-grub # 检查文件系统 sudo fsck /dev/sdb2 ``` ### 关键概念解析 1. **设备命名规则**: $$ \begin{array}{|c|c|} \hline \text{GRUB 设备} & \text{Linux 设备} \\ \hline (hd0) & /dev/sda \\ (hd0,gpt1) & /dev/sda1 \\ (hd1,gpt2) & /dev/sdb2 \\ \hline \end{array} $$ 2. **分区标识**: - `gpt`:适用于UEFI系统(新式分区表) - `msdos`:适用于传统BIOS系统[^2] ### 相关问题 1. 如何区分GRUB中的`gpt`和`msdos`分区标签? 2. 双系统环境下GRUB找不到Windows启动项该怎么办? 3. 内核升级后出现`vmlinuz not found`错误如何解决? 4. 如何使用Live USB修复GRUB引导? 5. 文件系统损坏导致GRUB失败时如何恢复数据? > 通过以上步骤,95%的GRUB文件系统错误可以解决。关键是要耐心执行`ls`命令逐分区排查,确保`set root`和`set prefix`指向包含实际内核文件的分区[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值