问题描述:

移动硬盘分配空间如下(其中sdb1,sdb3,sdb4为主分区,sdb5、6、7为逻辑分区):
sdb 8:16 0 465.7G 0 disk
├─sdb1 8:17 0 18.7G 0 part /
├─sdb2 8:18 0 1K 0 part
├─sdb3 8:19 0 78G 0 part /media/james/My Documentes
├─sdb4 8:20 0 319.2G 0 part /media/james/UUI
├─sdb5 8:21 0 10.9G 0 part
├─sdb6 8:22 0 7.8G 0 part /media/james/mint
└─sdb7 8:23 0 31.2G 0 part /media/james/home


原来sdb5挂载在Ubuntu15.04的根目录/下,sdb6挂载在目录/usr/share下(因为该目录占用空间大,不得已将数据复制出来覆盖了原来的mint,运行时挂载,这是一个不错的扩容方法),sdb7挂载在/home下(空间最大,但是由于安装软件多,大部分都在/usr下)。问题出现在,将Ubuntu安装在3个分区上后,还是经常出现开机iNode错误,不得已必须强制关机,重启后无法进入图形界面,而进入了emergency mode的命令行界面,输入密码可正常登陆,跳过则进入Ubuntu原本的图形界面,自己安装的软件全部没有,怀疑home目录没挂载上,进入sdb1分区的deepin系统,发现sdb5无法挂载,显示不能识别的文件系统。
尝试win下修复,但都无法挂载sdb5,分区表肯定损坏了,最后又把MBR给整坏了,硬盘已经完全无法启动操作系统了。无奈最后在sdb1上新安装了mintKDE系统,才修复了MBR。期间尝试了多个网友的办法,增加了不少技能。

1. 磁盘分区查看命令

1.1 lsblk

lsblk能列出当前系统存在的硬盘和硬盘分区情况,如下。
sdb 8:16 0 465.7G 0 disk
├─sdb1 8:17 0 18.7G 0 part /
├─sdb2 8:18 0 1K 0 part
├─sdb3 8:19 0 78G 0 part /media/james/My Documentes
├─sdb4 8:20 0 319.2G 0 part /media/james/UUI
├─sdb5 8:21 0 10.9G 0 part
├─sdb6 8:22 0 7.8G 0 part /media/james/mint
└─sdb7 8:23 0 31.2G 0 part /media/james/home

我总是能看到sdb5分区,但是无法挂载。

1.2 df

df 能列出硬盘分区挂载情况及使用情况,掌握磁盘是否占满。
james@james-ThinkPad-T440p:~ > df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 19G 4.6G 13G 27% /
/dev/sdb7 31G 3.5G 26G 12% /media/james/home
/dev/sdb6 7.6G 3.6G 3.7G 50% /media/james/mint
/dev/sda1 101G 45G 56G 45% /media/james/系统
/dev/sdb3 78G 74G 4.4G 95% /media/james/My Documentes
/dev/sdb4 320G 312G 7.5G 98% /media/james/UU

2. 磁盘分区工具

2.1 分区工具 fdisk

fdisk能为空磁盘分区,并且能修复partition order的错误,以前由于系统频繁装卸,存在这个错误,这个修复后,一直出现inode错误。fdisk还能列出分区的开始与结束柱头。
常用用法:fdisk /dev/sda //进入交互模式对磁盘进行操作

2.2 分区工具 parted

parted也是一个命令行分区工具。可以修改分区参数,还有一个找回丢失分区表的功能。但是我没有通过这个命令找到丢失的sdb5的分区表
参考:parted命令详解
linux的parted手册

3. 磁盘修复工具

3.1 主引导记录

(1)MBR:”Master Boot Record”主引导记录,BIOS检测到一个硬盘后,将磁盘的0 cylinder(0柱面),0 head(0磁头),1 sector(1扇区)的内容经过简单判断后,加载到内存中指定位置,然后跳转至该位置运行。MBR大小为512bytes,其中主要存放引导程序和该硬盘的分区表。
(2)GRUB:”GRand Unified Bootloader”:多重操作系统启动管理器,通过运行GRUB来引导进入操作系统。
(3)启动过程为:首先启动到BIOS,然后检测硬盘的MBR,将MBR该扇区的内容(也就是写在上面的GRUB)装入内存运行,再通过GRUB来引导操作系统。
(4)grub2分为2部分,一部分在MBR上,一部分在操作系统的/boot/grub下。如果进入引导界面,没有发现启动选项,而只有grub rescue,则可以通过交互找到另外一部分进行启动。操作流程如下: Ubuntu——grub rescue 主引导修复
参考:从失败的 Linux 引导中恢复

3.2 MBR修复命令行工具 grub-install

我的情况是grub rescue都被搞的无法显示了,只能通过其他方法来做。
grub-install可以将grub写入到磁盘的MBR中,但是我没有尝试成功,报错说:path ‘/boot/grub’ is not readable by GRUB on boot ,Installation is impossible 问题
然后看国外网友说Boot-Repair可以修复。
参考:GRUB配置的安装和写入硬盘的MBR
Linux中安装GRUB的两种方式

3.3 图形工具Boot-Repair

Boot-Repair是Ubuntu下一款修复启动项的图形工具,需要增加ppa,通过网络安装,由于无法成功添加ppa,没能尝试成功。后面看可以下载镜像安装。
参考:Boot Repair-能一键修复ubuntu启动/引导项的软件

3.4 图形工具 easyBCD与bootice

easyBCD是windows下一款修复启动项工具,尝试了一下,可以成功制作windows与linux双启动项,但是由于sdb5始终无法识别挂载,且它制作的启动项不是想要的grub2。
bootice也是win下的修复启动项工具,但局限于修复windows的开机启动,没找到grub2的启动修复选项,win下的修复做的很好。

3.5 磁盘修复命令 e2fsck

e2fsck能检查坏轨,并能自动修复磁盘错误,检查时不能挂载磁盘。使用e2fsck -a /dev/sdb5可以检查磁盘错误并自动修复。
参考:Linux磁盘修复e2fsck命令

3.6 磁盘修复命令 fsck

fsck也是磁盘修改命令,检查时也不能挂载磁盘。使用fsck.ext4 /dev/sdb5可以检查磁盘错误并自动修复。运行这条命令后,出现很多问题,确认后修复。再尝试挂载sdb5,成功挂载,并且能显示分区里的文件。
参考:修复被破坏了的linux文件系统分区表