用systemd实现存储设备的开机自动挂载
前言
想要在linux系统上实现开机自动挂载磁盘,有好几种实现方案。我之前用过自动的udevil,也用过直接编辑/etc/fstab
。
但是这俩办法各自有点儿小缺陷:
- udevil,首先这包很久没更新了,然后好像是挂载exfat有点儿bug,需要自动再配置文件中调整下exfat相关的参数,其次玩客云上的sd卡槽插入sd卡,开机后首次无法自动挂载,需要手动重新插拔一下sd卡才能正常工作。
- fstab,这个方法简单方便有效,但换盘以后如果忘记改fstab的配置,很容易让系统启动以后因为文件系统错误导致gg,需要进入修复模式修改fstab才能正常启动。
最近在网上找了一些其它解决方案,最后决定用systemd来实现开机以后自动挂载存储设备。
实现
假定我要实现sd卡的开机自动挂载,sd卡上的存储分区是/dev/mmcblk0p1
。
首先要确定sd卡的硬件挂载点,比如我准备把sd卡设备挂载到/mnt/sdcard
目录下。
第一步:创建systemd的mount配置文件
systemd配置文件存放目录/etc/systemd/system
,在次目录下新建配置文件。
sudo touch mnt-sdcard.mount
注意点:
- 文件名规则设定,
mnt-sdcard
由挂载路径/mnt/sdcard
转化而来,斜杠‘/’要转换成短杠‘-’ - 文件后缀名是
.mount
而不是.service
第二步:编辑配置信息
编辑mnt-sdcard.mount
,录入以下内容:
[Unit]
Description=sdcard auto mount
After=network.target
[Mount]
What=/dev/mmcblk0p1
Where=/mnt/sdcard
Type=ext4
Options=defaults
[Install]
WantedBy=multi-user.target
参数释疑:
What: 被挂载设备文件全路径
Where: 挂载点全路径
Type: 文件系统类型
Options: 挂载选项
第三步:启用
完成以上配置后,重新加载systemd配置然后启动即可。
systemctl daemon-reload
systemctl start mnt-sdcard.mount
systemctl enable mnt-sdcard.mount
注意事项
用systemd实现存储设备自动挂载的实现非常的简单好用,而且也不会轻易导致系统gg。
但是这个方案依然有它自己的小问题:如果外挂了多个存储设备,比如/dev/sda1、/dev/sdb1、/dev/sdc1,那系统重启的时候可能出现盘符名称不固定的问题,也就是A设备本次是/dev/sda1,下次重启以后可能会变成/dev/sdc1。这时候systemd的挂载脚本没法这么智能的去分辨哪个设备对应哪个配置,只会机械的按照配置去挂载,最后导致错误挂载然后文件错乱。