我在一台有驱动器的机器上安装了 FreeBSD 8.1,/dev/ad6
但已将其移至新系统,现在驱动器也位于新系统/dev/ad4
上。新系统可以启动,但我需要手动指定根文件系统已打开ad4s1
。
我如何更改引导加载程序以自动执行此操作?通过 Google 搜索可以找到disklabel -e
可以更改磁盘号的示例,但使用此方法我只得到“未找到类”错误,并且没有磁盘标签更改。
答案1
我遇到了以下情况:
我将 FreeBSD 10.1 USB.img
文件安装到 1GB 棒上,并将 FreeBSD 安装到 16GB 棒上。1GB 棒被识别为/dev/da0
,16GB 棒被识别为/dev/da1
。FreeBSD 安装在 16GB 棒下的 下/dev/da1s2a
。然后我移除了 1GB 棒,结果正常情况下无法自动启动 FreeBSD 系统。系统说无法启动到vfs.root.mountfrom="/dev/da1s2a"
,但建议我手动启动 FreeBSD,因此我不得不将启动片更改为/dev/da0s2a
,然后它就成功了。当然,我不想手动操作,所以我找到了这篇文章。
这启发我去搜索变量 的位置vfs.root.mountfrom
,所以我重新启动系统,拔出 16GB 的棒子,放回 1GB 的棒子,从它作为 Live CD 启动。此时,我放回 16GB 的棒子,挂载它 ( mount /dev/da1s2a /mnt
) 并搜索“vfs.root.mountfrom”。我的发现是:
- 请勿更改文件
/boot/loader.conf
! - 请勿更改文件
/boot/defaults/loader.conf
!
因为做这些事会搞乱加载器!
解决方案是调整(16GB 记忆棒)/etc/fstab
上的条目,因为加载器在启动期间正在寻找文件系统并自动写入变量的值!!!/mnt
/dev/da1s2a
/dev/da0s2a/
fstab
fstab
vfs.Root.Mountfrom
因此,在重启期间我移除了 1GB 的内存条,机器成功启动了 FreeBSD!
答案2
文件 /boot/loader.conf 包含以 root 身份挂载哪个文件系统的指令。
检查此文件中的条目:
vfs.root.mountfrom="ufs:ad6s1a"
并对其进行修改(如果缺失则添加),使其变为:
vfs.root.mountfrom="ufs:ad4s1a"
(假设设备 4 的切片 1 的分区 a)
答案3
使用sysinstall
( Configure > Label
) 可以修复磁盘标签。奇怪的是,编辑器给出了正确的磁盘编号(即 ad4),但选择后W
会写出正确的标签并修复启动问题。
答案4
我认为你想改变/boot.config
。
查看启动配置请参阅手册页。
这表明你想要类似的东西
echo "1:ad(4,a)/boot/loader" > /boot.config
但首先要对文件进行 cat 以查看其/dev/ad6
内容,然后再确定/dev/ad4
应该是什么。