我已经尝试安装 Ubuntu 12.10 一段时间了,一个个都遇到了问题。现在我的情况如下。
我有一台 PC 和 10 GB 的硬盘,将完全用于 Ubuntu,因此没有 Wubi 和双启动的选项。
我尝试从 DVD 安装,但卡在“频率过高”错误。所以我不得不适应 USB 启动选项。但我的 PC 无法通过 USB 启动,所以解决方法是“Plop Boot Manager”。所以我的安装过程如下:
- 从安装了 plop 的 CD 驱动器启动。
- 在 plop 选项中选择 USB 启动。
- 启动从 USB 开始。
- 监视器最终给出“频率超出”错误
- 按Shift++Alt即可F1获取终端。
- 使用 打开 grub
sudo nano /etc/default/grub
。 - 做出必要的改变。
sudo update-grub
。
现在我收到如下错误:
/usr/sbin/grub-probe:error:failed to get canonical path of /cow.
我的系统是
P4 3.06 GHz,1 GB 内存,10 GB 硬盘,无操作系统,CRT 显示器 lg StudioWorks(7 年旧)。主板 Mercury P4 266a NDMx(相当于 865)。整个系统在 XP 下运行正常,但 USB 无法启动,其他所有设备运行正常。
下一步我应该做什么?
答案1
从 Ubuntu Live CD 启动后(尝试了 14.04 和 16.04),我能够通过运行 update-grub chroot 到 grub 分区来解决此问题。(/dev/sda1
用您安装 grub 的任何分区替换下面的内容。所有命令都以 root 身份执行。)
mkdir /mnt/chrootdir
mount /dev/sda1 /mnt/chrootdir
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do
mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir
done
chroot /mnt/chrootdir
grub-install /dev/sda # May not be required
update-grub2
答案2
找到应该启动的驱动器
mount
或者
parted -l
或者
fdisk /dev/sda
并输入p列出分区,查找类型 83。
(如果你有 Fedora,你可能必须使用命令vgs
和lvs
,如果你有 mdraid,你可能必须cat /proc/mdstat
或mdadm -A --scan
或insmod raid1
或insmod raid5
然后mdadm -A --scan
)你将使用/dev/md0
或/dev/mapper/my-vg
代替/dev/sda
然后尝试安装它
mkdir /mnt
mount /dev/sda1 /mnt
cd /mnt
ls -l
这是你的车吗?太棒了!
grub-install --recheck --root-directory=/mnt /dev/sda
(或者/dev
您的根目录所在的驱动器及其安装路径)
grub-install --recheck --root-directory=/mnt /dev/sda --force
(如果它不喜欢你的分区,就强制它。)
现在它应该可以启动到 grub 中了,您可以使用 grub 命令进行启动,在重新启动并从 BIOS 设置中选择正确的启动驱动器后,或者通过按ESC,F8或者F12取决于您的 BIOS 以及您是否足够快,然后在 Grub 提示符下 - 您可以使用制表符完成来找到它(如果不是(hd0,1)
但是(hd1,3)
或其他东西),但请注意,如果 grub 无法读取文件系统,制表符完成有时会挂起几秒钟。启动到 Grub 后,您可以尝试使用以下命令进行启动:
insmod linux
ls
root=(hd0,1)
linux /boot/vmlinuz root=/dev/sda1
initrd /boot/initrd
boot
或者,希望您仍然有一个完整的grub.cfg
文件......
ls
ls (hd0,1)/
ls (hd0,1)/boot
configfile (hd0,1)/boot/grub.cfg
Grub 1 允许您从 Grub 进行安装:
install (hd0,1)
从正确的驱动器启动后,您可以重试update-grub
。grub-install
如果仍然失败,您可以尝试:
grub-mkconfig -o /mnt/boot/grub/grub.cfg
当然,您的路径可能会有所不同,因此只需使用这些命令,直到您可以看到什么在哪里以及发生了什么。
在最坏的情况下,这可能是硬盘即将发生故障的征兆,而在最好的情况下,可能只是一个分区标志或启动文件被意外覆盖,或者是另一个操作系统故意或意外损坏的安装程序。
答案3
根据上述代码修改解决方案
上面的解决方案并非完全没有问题,因为它将启动分区挂载到文件系统的 /(根目录)。这当然会让 grub 抱怨 /boot 不存在。这将修复该问题:
mkdir /mnt/chrootdir
mkdir /mnt/chrootdir/boot
mount /dev/sda1 /mnt/chrootdir/boot
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir ; done
chroot /mnt/chrootdir
update-grub2 # inside chroot
正如您所看到的,我还删除了换行符,以便每个人都能更轻松地执行。
另一个(更简单的)解决方案
如果您仍然无法正常工作,您应该尝试将 /boot 分区复制到 /(根)分区。为此,请使用 Ubuntu Live Boot DVD 启动系统并打开终端。在其中输入:
sudo su
fdisk -l
找出您有哪些分区。在我的例子中,sda1 是我的 /boot 分区,大约 250MB,sda5 大约 500GB。我在以下命令中使用这些值:
mkdir /mnt/boot/
mount /dev/sda1 /mnt/boot/
mkdir /mnt/root/
mount /dev/sda5 /mnt/root/
cp -R /mnt/boot/ /mnt/root/boot/
为数据分区设置可启动标志,并为启动分区删除该标志:
fdisk /dev/sda
b -> 1 (unset the bootable flag for the first partition)
b -> 5 (set the bootable flag for the fifth partition)
w -> write changes to the MBR
您的计算机现在将在 sda5 中查找启动文件。是时候再次进行 chrooting 了,这次有一些 grub 所需的文件夹,这些文件夹已由您的 Ubuntu live 光盘生成:
mkdir /mnt/chrootdir/
mkdir /mnt/chrootdir/dev/
mkdir /mnt/chrootdir/proc/
mkdir /mnt/chrootdir/sys/
mount /dev/sda5 /mnt/chrootdir/
mount --bind /dev/ /mnt/chrootdir/dev/
mount --bind /proc/ /mnt/chrootdir/proc/
mount --bind /sys/ /mnt/chrootdir/sys/
chroot /mnt/chrootdir/
grub-install /dev/sda
安装完成。没有报告错误。
如果您没有看到生成 grub.cnf 文件的消息,则也运行更新命令:
update-grub2 /dev/sda
现在您可以安全地重新启动并再次看到众所周知的启动菜单。
在我把物理服务器迁移到虚拟机之后,这个解决方案是唯一有效的。希望有人觉得这个有用!
答案4
我知道,这是一个老问题,但我今天在使用 mint-linux 的实际版本(基于 ubuntu)时也遇到了同样的麻烦。我找到了一个非常简单的解决方案!:-) 在第一次安装时断开互联网连接。这将停止加载不兼容的 grub2。安装完成后更新所有内容。