Linux /etc/fstab文件的详解

目录 原创

1. /etc/fstab文件的作用

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

2. 挂载的限制

在说明这个文件的作用之前我想先强调一下挂载的限制:

1) 根目录是必须挂载的,而且一定要先于其他mount point被挂载。因为mount是所有目录的跟目录,其他木有都是由根目录 / 衍生出来的
2) 挂载点必须是已经存在的目录
3) 挂载点的指定可以任意,但必须遵守必要的系统目录架构原则
4) 所有挂载点在同一时间只能被挂载一次
5) 所有分区在同一时间只能挂在一次
6) 若进行卸载,必须将工作目录退出挂载点及其子目录之外

3. /etc/fstab文件中的参数

下面我们看看看/etc/fstab文件,这是我的linux环境中/etc/fstab文件中的内容

[root@orcy ~]# cat /etc/fstab

# This file is edited by fstab-sync - see 'man fstab-sync' for details

# Device                Mount point        filesystem   parameters  dump fsck
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
none                    /dev/pts                devpts  gid=5,mode=620  0 0
none                    /dev/shm                tmpfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
none                    /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda3         swap                    swap    defaults        0 0
/dev/sdb1               /u01                    ext3    defaults        1 2
UUID=18823fc1-2958-49a0-9f1e-e1316bd5c2c5       /u02    ext3    defaults        1 2
/dev/hdc                /media/cdrom1           auto    pamconsole,exec,noauto,managed 0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0

在文件中我已经把每一列都做出来表示方便识别,我们可以看到一共有六列

第一列<Device>

磁盘设备文件或者该设备的Label或者UUID

1) 查看分区的label和uuid

Label就是分区的标签,在最初安装系统是填写的挂载点就是标签的名字。可以通过查看一个分区的superblock中的信息找到UUID和Label name,我们可以通过下面这个命令来查看。

[root@orcy u02]# blkid /dev/sda1
/dev/sda1: LABEL="/boot" UUID="3b10fe13-def4-41b6-baae-9b4ef3b3616c" SEC_TYPE="ext3" TYPE="ext2"

2)使用设备名和label及uuid作为标识的不同

使用设备名称(/dev/sda)来挂载分区时是被固定死的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题。因为这个名称是会改变的。不过使用label挂载就不用担心插槽顺序方面的问题。不过要随时注意你的Label name。
至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了。

第二列<Mount point>

设备的挂载点,就是你要挂载到哪个目录下

第三列<filesystem>

磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等

第四列<parameters>

文件系统的参数

Async/sync设置是否为同步方式运行,默认为async
auto/noauto  当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto
rw/ro         是否以以只读或者读写模式挂载
exec/noexec         限制此文件系统内是否能够进行”执行”的操作
user/nouser是否允许用户使用mount命令挂载
suid/nosuid是否允许SUID的存在
Usrquota启动文件系统支持磁盘配额模式
Grpquota启动文件系统对群组磁盘配额模式的支持
Defaults同事具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置

第五列<dump>

能否被dump备份命令作用。dump是一个用来作为备份的命令。通常这个参数的值为0或者1

0代表不要做dump备份
1代表要每天进行dump的操作
2代表不定日期的进行dump操作

第六列<fsck>

是否检验扇区。开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)

0不要检验
1最早检验(一般根目录会选择)
21级别检验完成之后进行检验

4. 提示与技巧

1)自动挂载

如果 /home 分区较大,可以让不依赖 /home 分区的服务先启动。把下面的参数添加到 /etc/fstab 文件中 /home 项目的参数部分即可:

noauto,x-systemd.automount

这样 /home 分区只有需要访问时才会被挂载。内核会缓存所有的文件操作,直到 /home 分区准备完成

注意: 这样做会使 /home 的文件系统类型被识别为 autofs,造成 mlocate 查询时忽略该目录。实际加速效果因配置而异,所以请自己权衡是否需要。

2)交换分区 UUID

如果交换分区没有 UUID,可以手动加入。如果使用 lsblk -f 命令没有列出交换分区的 UUID 就说明发生了这种情况。下面是为交换分区指定 UUID 的步骤:

# 确定交换分区
swapon -s
# 禁用交换分区
swapoff /dev/sda7
# 用新 UUID 重新创建交换分区
mkswap -U random /dev/sda7
# 激活交换分区
swapon /dev/sda7

3)路径名有空格

如果挂载的路径中有空格,可以使用 “\040” 转义字符来表示空格(以三位八进制数来进行表示)

UUID=47FA-4071     /home/username/Camera\040Pictures   vfat  defaults,noatime      0  2
/dev/sda7          /media/100\040GB\040(Storage)       ext4  defaults,noatime,user  0  0

4)外部设备

外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错

/dev/sdg1    /media/backup    jfs    defaults,nofail    0  2

5)更多技巧参考

https://wiki.archlinux.org/index.php/Fstab

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注