我通过添加额外规则来配置 USB 驱动器的自动挂载,如下/etc/fstab
所示
/dev/sda1 /media vfat noauto,nofail,x-systemd.automount,x-systemd.idle-timeout=2,x-systemd.device-timeout=2
然后 systemd 选择此条目fsab-generator
来创建两个用于挂载和自动挂载的单元文件/dev/sda1
:
- 媒体自动挂载
- 媒体挂载
插入后,USB 驱动器将按照指定正确安装到安装点。这是通过运行验证的ls /media
。 Journalctl 的输出是:
Sep 17 13:19:55 pcxx systemd[1]: Mounted /media.
Sep 17 13:19:57 pcxx systemd[1]: Unmounting /media...
Sep 17 13:19:57 pcxx systemd[1]: Unmounted /media.
1. 为什么systemd/media
安装后立即卸载?
目的是在使用 USB 驱动器后能够干净地卸载它。
我发现有两种方法可以做到这一点。
第一个是跑步umount /media
。这可以完成工作,但会损坏 media.automount 服务。在journalctl中以及运行时观察到的错误消息systemctl status -l media.automount
是:
Sep 17 13:28:44 pcxx systemd[1]: media.automount: Got invalid poll event 16 on pipe (fd=59)
Sep 17 13:28:44 pcxx systemd[1]: media.automount: Failed with result 'resources'.
第二个是运行systemd的umount命令systemd-umount /media
。这也可以完成工作,但会停止 media.mount 和 media.automount 服务。这样做的结果是在插入下一个 USB 驱动器时无法自动挂载,这违背了自动挂载的初衷。
2. 是否有一种正确的方法可以在不停止自动挂载服务的情况下卸载由 systemd 处理自动挂载的驱动器?
答案1
Q1: 为什么 systemd 在挂载 /media 后立即卸载它?
A1:因为你告诉它在 2 秒不活动后卸载:
该x-systemd.idle-timeout
选项控制这一点。您在条目中将其设置为 2 秒/etc/fstab
:x-systemd.idle-timeout=2
Q2。是否有一种正确的方法可以在不停止自动挂载服务的情况下卸载由 systemd 处理自动挂载的驱动器?
A2。让systemd.automount
我们为你做吧。
与 Q1 一样,该x-systemd.idle-timeout
选项控制挂载在卸载之前可以空闲的时间。正如您当前设置的那样,即 2 秒。因此,在 2 秒不活动后,您的 USB 驱动器将被卸载。此时,您所需要做的就是拔下/拔出驱动器。如果您希望使用命令,您还可以验证它是否已卸载lsblk -f
:如果它显示 USB 驱动器没有安装点,则说明它尚未安装。为了让我们清楚,这是我的系统的一个示例(忽略mmcblk0
- 这是系统 SD 卡):
安装 USB 驱动器后,lsblk -f
显示以下安装点sdb1
:
pi@raspberrypi3b:~ $ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sdb
└─sdb1 ext4 1.0 SANDISK8GB e5cb39a9-b041-4339-92f5-4172201a4b1a 2.6G 59% /home/pi/SANDISK8GB_ThumbDrv
mmcblk0
├─mmcblk0p1 vfat FAT32 boot C839-E506 203M 19% /boot
└─mmcblk0p2 ext4 1.0 rootfs 568caafd-bab1-46cb-921b-cd257b61f505 26.3G 5% /
如果您监视 的输出journalctl --follow
,则会出现类似以下的消息,通知您 USB 驱动器在空闲了由 设定的时间值后已卸载x-systemd.idle-timeout
:
Jan 17 10:46:40 raspberrypi3b systemd[1]: Unmounting /home/pi/SANDISK8GB_ThumbDrv...
Jan 17 10:46:40 raspberrypi3b systemd[750]: home-pi-SANDISK8GB_ThumbDrv.mount: Succeeded.
Jan 17 10:46:40 raspberrypi3b systemd[1]: home-pi-SANDISK8GB_ThumbDrv.mount: Succeeded.
Jan 17 10:46:40 raspberrypi3b systemd[1]: Unmounted /home/pi/SANDISK8GB_ThumbDrv.
该驱动器将保持卸载状态,直到获得另一个驱动器自动挂载请求。在本例中,请求是通过ls
在 CLI 中键入来触发的,如下面第一行末尾所示:
Jan 17 10:40:38 raspberrypi3b systemd[1]: home-pi-SANDISK8GB_ThumbDrv.automount: Got automount request for /home/pi/SANDISK8GB_ThumbDrv, triggered by 927 (ls)
Jan 17 10:40:38 raspberrypi3b systemd[1]: Mounting /home/pi/SANDISK8GB_ThumbDrv...
Jan 17 10:40:38 raspberrypi3b kernel: EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)
Jan 17 10:40:38 raspberrypi3b systemd[1]: Mounted /home/pi/SANDISK8GB_ThumbDrv.
您可以通过以下方式验证 USB 驱动器是否已卸载lsblk -f
;如果没有显示挂载点,则表示设备未挂载:
pi@raspberrypi3b:~ $ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sdb
└─sdb1 ext4 1.0 SANDISK8GB e5cb39a9-b041-4339-92f5-4172201a4b1a
mmcblk0
├─mmcblk0p1 vfat FAT32 boot C839-E506 203M 19% /boot
└─mmcblk0p2 ext4 1.0 rootfs 568caafd-bab1-46cb-921b-cd257b61f505 26.3G 5% /
答案2
不要挂载/media
,而是在其中创建一个新目录并将其挂载到那里。
/media
是大多数 Linux 中的保留位置。