在linux中,/etc/fstab文件是磁盘挂载的问题,若该文件不小心给修改了,或者被删除了,那么就会导致系统无法重启。因为/etc/fstab文件是记录磁盘挂载的信息,若该文件出现了问题,那么对应的主目录(/)和(/boot)以及swap的磁盘将无法挂载,所以这个文件对于linux系统来说是相当重要的。

  我犯的错误是:我在对hadoop集群进行文件配置的时候,在一台主机上对/etc/fstab文件进行修改,修改好了之后,准备分发给其他主机,我开始以为fstab文件的内容是一样的,于是我就该文件分发给其他主机上,并且覆盖了其他主机原来的fstab,完了之后,我就重启其他主机,发现其他主机无法挂载硬盘,导致系统无法重启。于是就想到,每个主机里面的fstab文件内容是不一样的。因此我将犯了致命的错误。于是我就得想办法恢复这些主机上的fstab文件。网上google了一下。发现还是有办法解决的。

在这里得说明一下,幸好我有一台主机是完好无损的,这样子我可以参照这个完好无损的主机来修改其他主机的fstab文件。修改的方法如下:

1、网上搜了一下,大部分说是要进入BIOS后进行linux resuce模式。但我在这里介绍一下简单的方式:那就是重新制作/etc/fstab文件。制作的方法就是里哟个完好无损主机的fstab文件。因此将完好无损主机上的fstab文件分发给所有的主机。

2、既然要重新制作fstab文件,那么需要对fstab文件的内容进行了解,我的fstab的问价内容如下:该文件可以分为三个部分。

  

#
# /etc/fstab
# Created by anaconda on Tue Jun 30 23:29:58 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#第一部分(这是关键部分)
UUID=16fef5b5-a9cc-4d6f-8d3f-0081546ffb04 /                       ext4    defaults        1 1
UUID=6f352ae4-e53a-4e32-8129-369c6ba24e9a /boot                   ext4    defaults        1 2
UUID=adf600ad-ab03-482f-ae6f-fb80e973da1e swap                    swap    defaults        0 0


#第二部分
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0


#第三部分
//192.168.2.246/Share /mnt/share cifs  default,auto,username=administrator,password=Passw0rd!

/dev/sdb1  /mnt/hdb ext4 defaults 0 0
/dev/sdc1  /mnt/hdc ext4 defaults 0 0
/dev/sdd1  /mnt/hdd ext4 defaults 0 0
/dev/sde1  /mnt/hde ext4 defaults 0 0 
/dev/sdf1  /mnt/hdf ext4 defaults 0 0

 

  其中,第一部分最为关键,因为第一部分就是涉及到系统文件磁盘的挂在的问题,这就是我们需要修改的地方;第二部分和第三部分所有主机都一样。

3、针对第一部分,我们首先可以通过命令:fdisk -l 查看系统中对应的是哪个磁盘挂载  / 、/boot 以及swap这三个目录。

  3.1、我通过执行 fdisk -l 命令后可以看到如下内容:

  

  通过上图我们可以明确看到 swap对应的是磁盘/dev/sda3,那么/dev/sda1和/dev/sda2与/和 /boot对应关系我们不清楚。于是我通过查看完好无损的主机上的对应关系,发现/dev/sda2对应的是 /   ;/dev/sda1对应的是/boot。

4、接下来我们需要知道的是/etc/fstab文件中UUID表示的是什么意思?通过网上搜索,答案如下:

  如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,硬盘相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。

  这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。

5、如何查看UUID呢?(红色的表示的是UUID)

  通过浏览 /dev/disk/by-uuid/ 下的设备文件信息。执行如下命令:

  # ls -l /dev/disk/by-uuid/

  ------

  lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5

  lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4

  .....

 6、那么接下来就是可以修改其他主机的fstab文件了:

  6.1、重启之后会需要你输入密码进入root权限下的界面

  6.2、此时文件系统是只读模式,若需要修改/etc/fstab文件,则需要执行:mount -o remount rw /   命令。

  6.3、此时就可以修改/etc/fstab文件了。执行: vi  /etc/fstab

  6.4、修改没一个主机的UUID的值即可。

  6.5、reboot重启,ok了。