ced*_*beu 17 automounting mount
我有一个 Debian sid 系统(Wheezy)(和 arch 相同),没有任何桌面环境(根本没有 Xorg)。
我可以通过标签/media/手动将我的 SD 卡、USB 记忆棒、外部硬盘安装到指定的目录中,使用mount/umount并在/etc/fstab.如果我希望将它们安装在 . 中/media/<LABEL>,则具有不同的每个设备都<LABEL>需要自己的条目,并且还<LABEL>需要手动创建/删除每个子目录/media/)。
那么,什么是安装它们的最好方式自动的/media/<LABEL> 在插入(并尽快从文件系统中卸载它们,因为它们已被拔掉,不管它是如何将数据风险)?
理想的解决方案是:
/dev/为
sdax, sdbx, ... by 时udev)/media/根据它的标签(可移动媒体的标签)创建一个目录/media/<LABEL>以RW模式(如果文件系统支持该模式)将其安装在目录中flushvfat/media/(该设备应安装在同步模式oviously,以避免任何数据丢失时热拔,因为缓存的编辑 sync是太多的vfat可移动媒体这样flush 已创建了妥协,不太安全比sync照命,但风险较小- 闪存周期)
我发现的一些信息autofs,HAL,udisks,udisks2,usbmount等,但目前还不清楚哪一个是过时或首选,反正我还没有想出如何将它们轻松地在我的系统做的配置,到现在为止...
Gil*_*il' 10
我想你正在寻找pmount.
如果您想在插入时自动挂载,请参阅在 Debian 上自动挂载USB 记忆棒。
如果您的系统使用udisks2,这是对插入可移动存储设备做出反应的首选方式。有关Udisk 的配置提示,请参阅Arch Wiki。
否则,出现新设备时做出反应的程序是udev,因此自动挂载由udev 规则触发。该usbmount包提供udev规则来自动挂载USB存储设备和其他几个人。mount从 udev 规则调用不适用于 FUSE 文件系统(例如 ntfs-3g),因此如果需要,请使用 udisks。
当媒体被移除时,您无法自动卸载它们,因为因果关系不会以这种方式起作用。在移除媒体之前,必须先将其卸载。对于只读媒体,您可以在移除后卸载,但如果某些应用程序在突然消失的文件系统上打开了文件,这可能会使它们感到困惑。对于可写媒体,如果您拔下已挂载的文件系统,则数据可能会损坏。
好吧,已经过去很长时间了,但我仍然会用我目前找到的最佳选择来回答我的问题。总结一下:创建一个udev规则,与一些脚本关联(将创建/删除目录和卸载/安装可移动设备),并附加到udev设备事件 type= partition。
1 - 创建添加/删除脚本
将以下脚本保存storage-automount.sh到/lib/udev/并使其可执行(sudo chmod a+x /lib/udev/storage-automount.sh):
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# if a plugdev group exist, retrieve it's gid set & it as owner of mountpoint
plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
if [ -z $plugdev_gid ]; then
gid=''
else
chown root:plugdev $mount_point
gid=",gid=$plugdev_gid"
fi
# create the mountpoint directory in /media/ (if not empty)
if [ -n $mount_point ]; then
mkdir -p /media/$mount_point
# other options (breaks POSIX): noatime,nodiratime,nosuid,nodev
mount -t $ID_FS_TYPE \
-o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \
$DEVNAME /media/$mount_point
fi
Run Code Online (Sandbox Code Playgroud)
将以下脚本保存storage-autounmount.sh到/lib/udev/并使其可执行(sudo chmod a+x /lib/udev/storage-autounmount.sh):
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# remove the mountpoint directory from /media/ (if not empty)
if [ -n $mount_point ]; then
umount -l /media/$mount_point
rm -R /media/$mount_point
fi
Run Code Online (Sandbox Code Playgroud)
2 - 创建udev规则以将这些脚本附加到事件
最后,udev在 中添加一条规则/etc/udev/rules.d/,例如85-storage-automount.rules:
ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"
Run Code Online (Sandbox Code Playgroud)
并使其具有与该目录/文件夹中的其他规则相同的权限
现在,当您插入存储设备时,将根据分区名称创建一个目录/media/(我不记得了,但我认为它也适用于 NTFS 分区),并且您的分区将安装到其中。如果您的系统上有一个组,那么它对于用户来说是读/写的plugdev。此外,这些设备以同步模式安装,以限制热拔插时数据丢失的风险。
当设备被删除时,它被卸载并且目录被删除/media
此外,监视事件的工具udev是udevadm monitor,具有以下选项:--env或--property:
$ udevadm monitor --env
Run Code Online (Sandbox Code Playgroud)
这已经在 debian 和 arch 上经过测试并运行良好,但可能适用于所有依赖udev.