青蛙学Linux—开机自动挂载磁盘分区

在上一篇文章中,我们为当前主机添加了一块20GB的硬盘并分成了两个分区,分别为/dev/sdb1和/dev/sdb2,并将这两个分区分别挂载到/data1和/data2目录下。在成功挂载之后,我重启了主机。重启之后发现/dev/sdb1和/dev/sdb2并没有挂载到/data1和/data2下,需要手动再执行挂载。所以,使用mount的挂载操作只在当前当次有效,当系统重启或者再次开机后必须再次执行mount命令,这就带来了很大的不便。

在Linux下存在这样一个文件:

/etc/fstab

这个文件就是用来解决上面的问题,在该文件中定义的分区将在系统开机是被自动挂载。所以如果/dev/sdb1和/dev/sdb2需要自动挂载,则必须修改该文件。

我们先来看下这个文件中的内容:

#
# /etc/fstab
# Created by anaconda on Thu Oct 18 11:19:50 2018
#
# 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
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=f1baaf68-7388-4871-a0c0-671b06f59ddf /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

除去注释掉的内容,就是该文件对于自动挂载的分区的定义了。该定义按照以下的规则进行:

分区    挂载点    文件系统    参数    是否dump    是否fsck

下面来详细分析下这些选项的意义

分区

需要挂载的分区可以用三种方式标识:设备名、标签和UUID。

  • 设备名:类似/dev/sda1这种表示方法。这种方法最为简单,直接将设备名写入即可。但该方法有一种缺点,Linux下的设备名与硬盘的位置密切相关,在第二个插槽的硬盘被标识为/dev/sdb,如果该硬盘更换到第三个插槽,则设备名将变为/dev/sdc。所以使用该方法时,如果硬盘位置改变则必须重新进行配置
  • 标签:标签是自定义的一个分区别名,使用标签进行标识时需使用LABEL=label name进行设置。这里使用的标签必须唯一而不能重名。
  • UUID:UUID是在对分区进行格式化时生成的唯一的设备标识,使用UUID进行标识时需使用UUID=UUID number进行设置。由于UUID是唯一的,所以使用UUID不用担心UUID的变化而重新修改配置。分区的UUID可以使用命令lsblk –f命令查看。

 

挂载点

分区要挂载到哪个目录下,直接设置目录名即可。

文件系统

要挂载的分区所使用的文件系统,支持常用的文件系统如ext3、ext4、xfs、ntfs等,也可以设置成auto,mount命令会猜测该分区使用的文件系统。

参数

在分区挂载时使用的参数,有些参数是特定的文件系统才有的。这些参数比较繁多。

  • auto - 启动时或使用mount -a命令时自动挂载
  • noauto - 只在你的命令下被挂载
  • defaults - 使用文件系统的默认挂载参数
  • exec - 允许执行此分区的二进制文件
  • noexec - 不允许执行此分区的二进制文件
  • ro - 以只读模式挂载
  • rw - 以可读写模式挂载
  • user - 允许任意用户挂载,若无显示定义,隐含启用noexec、nosuid、nodev参数
  • users - 允许所有users组中的用户挂载
  • nouser - 只能被root挂载
  • owner - 允许设备所有者挂载
  • sync - I/O同步进行
  • async - I/O异步进行
  • dev - 解析文件系统上的块特殊设备
  • nodev - 不解析文件系统上的块特殊设备
  • suid - 允许suid操作和设定sgid位。该参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限
  • nosuid - 禁止suid操作和设定sgid位
  • noatime - 不更新文件系统上inode访问记录,可以提升性能
  • nodiratime - 不更新文件系统上的目录inode访问记录,可以提升性能
  • relatime - 实时更新inode access记录。只有在记录中的访问时间早于当前访问才会被更新(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能
  • flush - vfat的选项。更频繁的刷新数据,复制对话框或进度条在全部数据写入后才消失

是否dump

是否调用dump进行备份。允许的设置为0或1,0表示不备份,1表示备份。

是否fsck

是否调用fsck对文件系统进行检测。允许的设置为0、1或2。0表示不检测,1表示最早检测,一般用于根目录,2表示在1完成之后进行检测。

一个例子:使/dev/sdb1和/dev/sdb2在开机时自动挂载到/data1和/data2

为了使配置稳定而不用修改,这里使用UUID作为分区的标识,所以先查看两个分区对应的UUID:

[root@localhost ~]# lsblk -f |grep sdb
sdb                                                                      
├─sdb1          xfs               9b058e8b-4877-4ba2-a5eb-b190b6e3f381   
└─sdb2          ext4              bfac0a61-747e-47d8-a9eb-5248b774f909

这里同时得到了/dev/sdb1和/dev/sdb2的文件系统类型,在/etc/fstab文件中添加以下配置:

UUID=9b058e8b-4877-4ba2-a5eb-b190b6e3f381    /data1    xfs    defaults    0 0
UUID=bfac0a61-747e-47d8-a9eb-5248b774f909    /data2    ext4    defaults    0 0

配置完成后使用mount -a命令挂载/etc/fstab文件中的所有分区:

[root@localhost ~]# mount -a
[root@localhost ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        22G  2.1G   20G   10% /
devtmpfs                devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs                   tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs                   tmpfs     3.9G  8.9M  3.9G    1% /run
tmpfs                   tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  142M  873M   14% /boot
tmpfs                   tmpfs     783M     0  783M    0% /run/user/0
/dev/sdb1               xfs       9.4G   33M  9.3G    1% /data1
/dev/sdb2               ext4       11G   41M  9.9G    1% /data2

可以看到/dev/sdb1和/dev/sdb2分区已经挂载上了,说明我们的配置已经生效了。之后每次启动就无需再手动挂载这两个分区了。

原文地址:https://www.cnblogs.com/yu2006070-01/p/9972199.html