使用 systemd 彻底卸载 USB 驱动器

使用 systemd 彻底卸载 USB 驱动器

我通过添加额外规则来配置 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/fstabx-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 中的保留位置。

相关内容