root@ubuntu:/home/ubuntu# pwd
/home/ubuntu
root@ubuntu:/home/ubuntu# lsblk
NAME
MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0
2:0
1
4K 0 disk
sda
8:0
0 20G 0
disk
├─sda1
8:1
0 243M 0 part
├─sda2
8:2
0
1K 0 part
└─sda5
8:5 0
19.8G 0 part
├─ubuntu--vg-root
252:0 0
17.3G 0 lvm
└─ubuntu--vg-swap_1
252:1
0 2.5G 0 lvm
sr0
11:0
1 1.1G 0 rom
/cdrom
loop0
7:0
0
1G 1 loop /rofs
root@ubuntu:/home/ubuntu# mount /dev/mapper/ubuntu--vg-root
/mnt
root@ubuntu:/home/ubuntu# mount /dev/sda1 /mnt/boot/
root@ubuntu:/home/ubuntu# mount -o bind /dev/ /mnt/dev/
root@ubuntu:/home/ubuntu# chroot /mnt/
root@ubuntu:/# grub-install /dev/sda
Installing for i386-pc platform.
/proc/devices: fopen failed: 没有那个文件或目录
device node not found
device node not found
device node not found
device node not found
device node not found
device node not found
/proc/devices: fopen failed: 没有那个文件或目录
device node not found
/proc/devices: fopen failed: 没有那个文件或目录
device node not found
/proc/devices: fopen failed: 没有那个文件或目录
device node not found
Installation finished. No error reported.
root@ubuntu:/#
环境如下:
划分单独的/boot分区,root在lvm上的一个lv里面。
此例中,/boot为/dev/sda1,root为/dev/mapper/ubuntu--vg-root。
使用ubuntu光盘的live系统来启动,以修复原本硬盘上的grub2。
注意的点:
1、挂载了vg-root的LV之后,还要挂载单独的/boot,即/dev/sda1,而且要挂载到vg-root已挂载的目录里面。
2、一定要把当前系统的/dev绑定到目标系统的/dev里,即/mnt/dev。
3、建议把grub安装到硬盘的整个MBR,而不是单独的sdaX分区,这样会避免很多乱七八糟的问题。
4、Grub安装成功的标志是输出 Installation finished. No error reported.
5、理论上只要有live系统,可以修复任意发行版本的grub2,并不局限于已安装好的ubuntu或是ubuntu的live
iso光盘,毕竟Grub2并不区分发行版。
如果你有兴趣研究一下LVM-root环境下/boot分区是否必要以及相关的知识,可参考(全英文):
http://askubuntu.com/questions/76095/what-is-the-use-of-boot-lvm-based-in-partitioning