grub2安装或修复 - zbunix/building GitHub Wiki

清空你的回收站

$HOME/.local/share/Trash/

cd .Trash && rm -rf *


把安装的软件的备份也删除,磁盘空间不够用了,把apt的缓存空间清空
apt-get clean


root@android-work2:/home/os-weizb# du -sh /var/* | sort -n
0	/var/lock
2.0M	/var/backups
4.0K	/var/crash
4.0K	/var/games
4.0K	/var/local
4.0K	/var/mail
4.0K	/var/opt
6.1M	/var/log
168K	/var/spool
207M	/var/lib
400K	/var/tmp
408K	/var/run
549M	/var/cache


看看哪个文件系统满了
root@android-work2:/home/os-weizb# df -ah
文件系统            容量  已用 可用 已用% 挂载点
/dev/sda1              30G  4.1G   24G  15% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
none                     0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  7.9G  224K  7.9G   1% /dev
none                     0     0     0   -  /dev/pts
none                  7.9G  1.4M  7.9G   1% /dev/shm
none                  7.9G  408K  7.9G   1% /var/run
none                  7.9G     0  7.9G   0% /var/lock
none                  7.9G     0  7.9G   0% /lib/init/rw
/dev/sda3             1.8T   21G  1.7T   2% /home
/dev/sda4             1.8T  196M  1.7T   1% /nwd-data
binfmt_misc              0     0     0   -  /proc/sys/fs/binfmt_misc
gvfs-fuse-daemon      0.0K  0.0K  0.0K   -  /home/os-weizb/.gvfs

tar -cvpjf /home/ubt-server-amd64.bz2 --exclude=/lost+found --exclude=/proc/* --exclude=/sys/* --exclude=/dev/* --exclude=/home/* --exclude=/nwd-data/* /

mount /dev/sda1 /mnt tar -xvpjf /home/ubt-server-amd64.bz2 -C /mnt

  • 进入Grub2 rescue 模式

    原因分析:

  1. boot分区uuid改变---->grub模块和配置文件grub.cfg无法定位
  2. grub模块和配置文件grub.cfg受损无法启动时修复
  3. root分区uuid改变---->造成的不能正常启动,只能进入grub rescue模式的修复
grub rescue > ls #查找grub的配置文件,因为分区表被破坏,用ls命令列出所有分区. 找到你安装Ubuntu的分区, 比如(hd0,7)
grub rescue > set root=(hd0,7) #设置root所在分区路径
grub rescue > set prefix=(hd0,7)/boot/grub #设置grub启动文件所在路径
grub rescue > insmod normal
grub rescue > normal #回到普通模式

grub rescue>set
grub rescue>prefix=(hd?,?)/grub
grub rescue>root=hd?,?
grub rescue>set root=hd?,?
grub rescue>set prefix=(hd?,?)/boot/grub
grub rescue>set
grub rescue>root=hd?,?
grub rescue>prefix=(hd?,?)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
grub rescue>normal

这时就可以调出 /boot/grub/grub.cfg,修改相应uuid,
改到命令行下
grub>insmod /boot/grub/linux.mod
grub>set root=hd?,?
grub>linux /boot/vmlinuz-*** root=/dev/sd??
grub>initrd /boot/initrg.img-****
进入系统
  • chroot方案完全彻底修复grub2---使用ubuntu启动U盘或者ubuntu启动光盘启动进入修复模式

    apt-get install grub-pc

** 创建分区和创建分区uuid

gdisk /dev/sda

** 格式化分区然后拷贝root根分区所有文件解压到新的分区里, root分区和boot分区二合一

  mkfs.ext4 /dev/sda1
  mount -t ext4 /dev/sda1 /mnt
  cd  /mnt
  tar xvf ubuntu10.04-server-amd64-bak.tar

** 安装grub2到硬盘

1. 掛載重要的虛擬檔案系統:
 mount --bind /dev /mnt/dev
 mount --bind /dev/pts /mnt/dev/pts
 mount --bind /proc /mnt/proc
 mount --bind /sys /mnt/sys

2. Chroot 至您的標準系統裝置:
 chroot /mnt

3. 重建/boot/grub/grub.cfg, 解决系統中沒有 /boot/grub/grub.cfg 或其內容不正確
 update-grub2

3. 重新安裝GRUB 2
 grub-install /dev/sda

4. 驗證安裝
 grub-install --recheck /dev/sda

5. 修改/etc/fstab
 由于分区表类型的修改,各挂载点所对应的分区也必然会有所变化

6. 让网卡名固定为eth0
 rm /etc/udev/rules.d/70-persistent-net.rules

7. 退出 chroot
 按下鍵盤之 CTRL-D

8. 卸載虛擬檔案系統:
 umount /mnt/dev/pts
 umount /mnt/dev
 umount /mnt/proc
 umount /mnt/sys


9. 卸載最後的裝置:
 umount /mnt

10. 重新開機 
 reboot 

  • 恢复GPT类型分区的grub2主引导记录

    恢复GPT类型分区的grub2主引导记录,如果直接执行命令 grub-install /dev/sda 不能成功,可按照如下操作: 在系统配置文件:/etc/default/grub 添加一行:GRUB_PRELOAD_MODULES="part_msdos" 执行命令: grub-install --force /dev/sda 便可解决问题!

  • GPT硬盘启动

    windows 的 gpt 支持印象里仅止于读写,而不能启动。

    1.windows对GPT的支很糟糕,如果你想要在GPT硬盘下引导windows,需要先将主板换为罕见的EFI主板,还要将系统换为64位windows,至于windows对GPT的支持,请参考网上的资料,在下面wikipedia的资料上就有。 2.ntfs文件系统和ext3/ext4文件系统的GUID是完全一样的(不知道为什么),所以有些分区工具无法将这两种文件系统区分开来,尤其是在windows下。对于windows分区和ext4分区共存的硬盘下,一定要注意这一点。

⚠️ **GitHub.com Fallback** ⚠️