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
模式(如果文件系统支持该模式)将其安装在目录中flush
vfat
/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
.
归档时间: |
|
查看次数: |
52956 次 |
最近记录: |