热搜词
发表于 2016-7-30 12:15:52 | 显示全部楼层 |阅读模式
由于硬盘重新分区,引起各分区的UUID变更,再通过tar命令恢复之前备份的ubuntu server 12.04 系统时,启动时报错,提示如下:error: no such device: xxxx

01.jpg


解决方法如下:
按回车键,显示grub启动菜单,如图:

grub菜单.gif

use the  ↑ and ↓ keys to select which entry is highlighted. press enter to boot the selected OS,'e' to edit the commands before booting or 'c' for a command-line ,ESC to return previous minu.

翻译:
使用↑和↓键选择进入了。按"回车键"启动选定的操作系统,按'e'键编辑命令启动配置文件,按“c”键进入grub>_命令行模式,按Esc键返回前页。

按上下键选择选择菜单的第一项,然后再按“c”键进入grub>_命令行模式,使用 ls 命令查看系统根分区UUID值,如图:
ls-uuid.gif


记下UUID值,然后再按“ESC”键返回grub菜单,按“e”键进入编辑模式,如图:

编辑grub启动菜单.gif

minimum emacs-like screen editing is supported. TAB lists completions. press CTRL-X or F10 to boot, CTRL-C or F2 for a command-line or ESC to discard edits and return to the GRUB menu.

翻译:
最小的 Emacs-like 屏幕编辑器支持。TAB 列出完成。按Ctrl+X或F10键开机引导,按Ctrl-C或F2从 GRUB 编辑器进入该 shell 命令行,ESC放弃并返回GRUB菜单编辑。

配置文件详解:
insmod ext2
set root='(hd0,gpt2)'

#第一硬盘的第二GPT分区,此为ubuntu 根分区
search --no-floppy --fs-uuid --set 9e1163a4-4023-482d-bf9d-62354aa71e98
#这句与set root=(hd0,gpt2) 重复,可删除
linux /boot/vmlinuz-2.6.31-9-386 root=UUID=
9e1163a4-4023-482d-bf9d-62354aa71e98 ro quite splash
#不喜欢看到一长串的, roo=UUID=***   可用root=/dev/sda2代替
initrd /boot/initrd.img-3.13.0-92-generic


-------------------------------------------------------------------------------------------------------------
/boot/efi 分区内容文件:

ls (hd0,gpt1)/EFI/ubuntu/grubx64.efi

ls (hd0,gpt1)/EFI/ubuntu/shimx64.efi

ls (hd0,gpt1)/EFI/ubuntu/MokManager.efi     //ubuntu server 14.04版

cat (hd0,gpt1)/EFI/ubuntu/grub.cfg

set prefix=($root)/boot/grub


/EFI/ubuntu/grub.cfg配置文件内容:
search.fs_uuid 9e1163a4-4023-482d-bf9d-62354aa71e98 root
set prefix=($root)/boot/grub
configfile $prefix/grub.cfg



按照上面的提示,通过 live USB 启动,挂载/dev/sda1(也是我根目录位置)到 /mnt,
然后手动编辑了 /mnt/boot/grub/grub.cfg文件,从/mnt/etc/fstab文件得到 / 分区的UUID
替换grub.cfg的现有UUID,然后就可以正确启动了



--------------------------------------------------------------
开机出现 grub>_指令模式,修复grub启动菜单办法

grub>ls
(hd0), (hd0,gpt3), (hd0,gpt2), (hd0,gpt1) (hd1)  (hd1,msdos1)

grub> ls (hd0,gpt2)/

确定各个分区那个是 / ,哪个是/boot,哪个是swap后,就可以开始继续处理。现在假设 / 是(hd0,gpt2),/boot 是(hd0,gpt2)。


额外说明一下,(hd0,gpt2)/boot/grub下的x86_64-efi目录,是放置grub模组所在。你可以尝试 ls 看看,会发现列出一堆.mod档,这是开机所需要的文件,稍候我们也会需要其中一个模组。


接下来是正式设置,其实只有四行指令:
grub> set root=(hd0,gpt2)
grub> set prefix=(hd0,gpt2)/boot/grub
grub> insmod normal
grub> normal
第一行指令:设置根目录所在的分区

第二行指令:设置grub目录。这样他才知道哪里去找模组。此行设置错误,第三行指令执行时,就无法载入模组。假如你的 /boot 没有额外分割,那这行就要写成 set prefix=(hd0,3)/boot/grub
第三行指令:载入normal模组
第四行指令:执行normal模组
normal模组作用是什麼?他会把一些指令,文件系统模组,及其他需要的模组自动呼叫进来。





全部评论2
灰儿 发表于 2016-7-31 00:53:04 | 显示全部楼层
2、用livecd修复grub
用ubuntu9.10的livecd启动后,打开终端
假如你的ubuntu的 / 分区是sda7,又假如 /boot分区是 sda6,用livecd启动,在终端下输入
sudo -i
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot (如果没 /boot 单独分区这步跳过)
grub-install –root-directory=/mnt /dev/sda
和前面一样,要装入第二硬盘的把sda改为sdb。
如果grub.cfg己丢失,或grub.cfg出现错误,需要重建的继续执行下面操作:
mount –bind /proc /mnt/proc
mount –bind /dev /mnt/dev
mount –bind /sys /mnt/sys
chroot /mnt update-grub
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
exit

回复

使用道具 举报

灰儿 发表于 2016-7-31 01:25:05 | 显示全部楼层
编译: ./configure make sudo make install 默认路径为 /usr/local/

安装: 先mount上要安装grub的分区,然后 sudo grub-install [--root-directory=DIR] /dev/hda //引导记录安装到mbr,[ grub文件安装到 DIR/boot/grub/ ] sudo grub-install [--root-directory=DIR] /dev/hda3 //引导记录安装到分区3,[ grub文件安装到 DIR/boot/grub/ ] grub-install 是一个脚本,它完成以下任务:

* 调用 grub-mkdevicemap 创建设备映像文件 /boot/grub/device.map

* 复制 *.mod *.lst *.img 文件到 /boot/grub/ * 调用 grub-probe 自动侦测文件系统类型 * 调用 grub-mkimage 生成grub2内核文件 /boot/grub/core.img * 调用 grub-setup 安装引导记录到mbr或分区 创建grub菜单: update-grub 它也是一个脚本,将根据 /usr/local/etc/grub.d/ 里的文件自动创建 /boot/grub/grub.cfg 最后对这个菜单文件手工修改成适合的样子即可 以下是一个安装的例子: root@sunshine-laptop:/dev# mkdir /media/sda8 root@sunshine-laptop:/dev# mount /dev/sda8 /media/sda8 root@sunshine-laptop:/dev# // sda8为系统 / (/boot)挂载点 指定/dev/sda 写入mbr root@sunshine-laptop:~# grub-install --root-directory=/media/sda8 /dev/sda Installation finished. No error reported. This is the contents of the device map /media/sda8/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (hd0) /dev/sda root@sunshine-laptop:~# // 如果这里/dev/sda 指定为优盘的设备就会把grub2写入u盘,可以用该u盘引导系统。

# grub-mkdevicemap   创建设备映像文件 /boot/grub/device.map
#  grub-mkconfig  生成grub.cfg文件

# update-grub  


回复

使用道具 举报

回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-23 15:46 , Processed in 0.192535 second(s), 25 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team