Linux开机自动挂载文件系统的几种方式

一. 前言

在Digitalocean上,给主机添加硬盘时,为了免去分区、格式化、挂载等麻烦,可以选择让运营商帮忙自动完成以上操作。

查看文档可知,运营商在添加硬盘时,在挂载阶段自动执行了以下脚本:

1). 创建挂载目录。

mkdir -p /mnt/volume

2). 挂载硬盘(临时挂载,主机重启后失效)。

mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_volume /mnt/volume

3). 修改/etc/fstab,使得挂载持久化,主机重启后将自动挂载硬盘。

echo /dev/disk/by-id/scsi-0DO_Volume_volume /mnt/volume ext4 defaults,nofail,discard 0 0 | sudo tee -a /etc/fstab

随后,当计划按照需要将修改挂载目录/mnt/volume修改为/mnt/data时,只需要创建新的挂载目录,修改/etc/fstab的相关内容即可:

/dev/disk/by-id/scsi-0DO_Volume_volume /mnt/data ext4 defaults,nofail,discard 0 0

非常方便。

几年前确实可以这样操作,然而,这次实际操作时发现,/etc/fstab文件中并不存在对应的挂载配置。

难道运营商没有做持久化挂载,但重启主机发现,挂载是持久化的。当强行在/etc/fstab文件中添加挂载配置:

/dev/disk/by-id/scsi-0DO_Volume_volume /mnt/data ext4 defaults,nofail,discard 0 0

重启主机后会发现,硬盘同时被挂载到了两个目录:

/mnt/volume

/mnt/data

这就说明:

1). 官方文档关于自动挂载硬盘的说明已经过期。

2). Linux还有其它自动挂载硬盘的方式。

二. Linux开机自动挂载硬盘的几种方式

1. /etc/fstab配置硬盘自动挂载。

/etc/fstab管理硬盘的自动挂载的是最常规的方式,本文不再赘述。

2. 开发初始化脚本挂载硬盘。

/etc/rc.local文件本质上是一个shell脚本文件,可用于添加开机启动命令,系统启动时将按顺序执行其中的命令。

因此,可直接将mount命令:

mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_volume /mnt/volume

写入/etc/rc.local,从而实现硬盘的开机自动挂载。

3. 使用Systemd自动挂载硬盘。

Linux systemd,不仅可以用来关闭与开启服务,也提供处理挂载和自动挂载文件系统的新方式,即以一项服务的方式了管理文件系统的挂载。

Systemd扩展了fstab文件的定义方式,合理使用Systemd提供的挂载选项,可以完美地解决以前使用/etc/fstab时一些痛点。

1). systemd.mount可以让那些要求在网络可用时的文件系统在网络已经可用的情况下才去挂载,还可以定义等待网络可用的超时时间,从而避免在开机过程中长时间卡住。

2). systemd可以让某个挂载项自动开始挂载和自动卸载,而不是在开机时挂载后永久挂载在后台。

3). systemd可以让系统跳过失败的挂载,避免系统因硬盘挂载问题而启动失败,无法进入系统(只能进入临时修复系统)。

当前Digitalocean提供的硬盘自动挂载服务正是使用了Systemd的挂载方式。查看/etc/systemd/system目录即可看到一个名为mnt-volume.mount的文件:

/etc/systemd/system/mnt-volume.mount

该文件定义了一个挂载项:

[Unit]

Description=Mount DO Volume volume



[Mount]

What=/dev/disk/by-uuid/d946870c-ef31-48ee-a9f1-446acaa56f46

Where=/mnt/volume

Options=defaults,nofail,discard,noatime

Type=ext4



[Install]

WantedBy = multi-user.target

通过这种挂载方式,我们可以像管理一项服务一样来管理挂载:

systemctl status mnt-volume.mount
systemctl enable mnt-volume.mount
systemctl disable mnt-volume.mount
systemctl start mnt-volume.mount
systemctl stop mnt-volume.mount

Systemd的文件挂载选项非常丰富,具体情况本文不再赘述。

4. 通过AutoFs服务来管理硬盘挂载。

AutoFs服务程序与mount命令的不同之处在于它是一种守护进程,只有检测到用户试图访问一个尚未挂载的文件系统时才自动的检测并挂载该文件系统。

Autofs非常方便,主要有两点:

1). 设置开机不一定要挂载的目录,当用户访问对应文件系统的时候才实现自动挂载。

2). 用户不使用自动挂载的目录一段的时间之后,文件系统会被自动卸载(默认时间为5分钟)。

AutoFs属于第三方软件,需要额外安装:

yum install -y autofs

AutoFs的具体使用方法本文同样不进行具体说明。

你可能感兴趣的:(linux,运维,linux,服务器,fstab,mount,autofs,systemd)