- 积分
- 506
- 金钱
- 389
- 威望
- 0
- 贡献
- 0
- HASS币
- 0
高级会员
- 积分
- 506
- 金钱
- 389
- HASS币
- 0
|
本帖最后由 livebelive 于 2021-8-7 21:58 编辑
最近搞了下Nextcloud插件,用着还不错。具体的教程有空的时候再发出来。
使用Nextcloud,必然要考虑到磁盘的问题,所以挂载外部的扩展存储就是一个必然的事情。
搜索了很多方案,最后发现一个神器脚本,特地分享一下。
我把他翻译了一下,大家有需要的可以下载来使用。
源脚本内容
其中还有一个NTFS格式支持的脚本.
暂时没研究如何挂载NFS和Samba之类的NAS,因为我没有NAS!
----------------2021.8.7----------------
改良了一下脚本,加入了对标签的判断。
这样做的好处是:脚本会根据分区的标签执行挂载,不用担心多个USB磁盘先后接入顺序导致的挂载路径出错。
另外我不不懂编程语言,不确定IMPORT{program}这个里面的program参数是否是全局的,也就是说在另外一个脚本里面是否可以使用同样的参数.
所以另起脚本挂载的话,如果跟我一样不确定的话,就把这个改一下。比较稳。
#
# udev rule
# 使用分区标签作为名称,挂载到media目录(可自行根据需要修改挂载点)
# 使用方法:
# 先把文件改下名,以80开头(避免和系统的冲突。尽量数字大点),后面的随意修改。
# 使用fat32的分区格式的U盘,将分区标签改成大写的CONFIG。
# 在跟目录建立udev文件夹,将本脚本放进去。
# 将U盘插进主机,进入Supervisor,系统,在关闭主机后面有三个小点,点击从USB导入。
# 然后拔出U盘,插入你要挂载的设备,重启主机即可。
#
#
#
# 应用于HASSOS的挂载规则
# 本示例中挂载路径为 (/mnt/data/supervisor/media),也就是samba中的/media
# 当插入一个USB磁盘,本规则将创建一个目录
# 新建的目录为USB设备分区的标签,如果没有标签,则自动生成为,例如USB-sd[a-z][0-1]
#
# Note 1:
#规则以数字开头,数字越小越优先,数字越大越靠后。
#为避免和其他挂载冲突,请使用80以后的数字。
#每条不同挂载规则使用单独的文件。
#
# Note 2:
# 此挂载会忽略标签为CONFIG的USB分区
# https://github.com/home-assistan ... on/configuration.md
#
# Note 3:
# 如果系统引导在USB设备上,需要在挂载规则上过滤掉相应的设备或分区
#
# 作者源连接:
# https://www.axllent.org/docs/auto-mounting-usb-storage/
#
# Udev参考连接:
# https://wiki.archlinux.org/index.php/Udev
#
# udev 命令参考:
# - Restart udev to reload new rules:
# udevadm control --reload-rules
# - List device attributes of sdb1:
# udevadm info --attribute-walk --name=/dev/sdb1
# - List environment variables of sdb1:
# udevadm info /dev/sdb1
# - Trigger add/remove event for sdb1:
# udevadm trigger --verbose --action=add --sysname-match=sdb1
# udevadm trigger --verbose --action=remove --sysname-match=sdb1
# 设置设备/分区过滤
# 如果不想挂载某个设备或分区的话,请将设备/分区的序号去掉
# 例如sd[b-z][0-9],这样将不会挂载sda的设备;
# 或者设置为sd[a-z][2-9],这样将不会挂载sda1的分区。
# 可以利用这条规则,可以使用多个挂载脚本,将不同的分区挂载到不同的挂载点,脚本的名字从80往后排。
KERNEL!="sd[a-z][0-9]", GOTO="abort_rule"
# 设置标签过滤
# 如果加载的分区不是下面指定的标签名称 则退出脚本不挂载。
# 根据此规则,可以建立多个挂载脚本,将指定的标签挂载到指定的路径。
# 这样做的好处是 每次重启或者重启插拔设备后,并不会因为加载顺序搞乱挂载路径
LABEL!="disk", GOTO="abort_rule"
# 忽略sata的系统内部磁盘设备。
ENV{ID_PATH}!="*-usb-*", GOTO="abort_rule"
# 将分区信息导入到环境变量中
# 这里的program不知道是否会与其他脚本中的冲突,如果需要做不同的挂载路径,另起脚本时请改成不同的参数,比如加个1:program1。
IMPORT{program}="/usr/sbin/blkid -o udev -p %N"
# 如果目标不是文件系统,则退出。
ENV{ID_FS_USAGE}!="filesystem", GOTO="abort_rule"
# 忽略标签为CONFIG的设备/分区
ENV{ID_FS_LABEL}=="CONFIG", GOTO="abort_rule"
# 获取分区标签(如果存在),否则创建一个。
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usb-%k"
# 挂载点,这里可以手动设置,hassos的samba下的几个路径都在/mnt/data/supervisor/下面,根据需要设置为自己要的路径。
# 比如挂载到/share下就改成:/mnt/data/supervisor/share/
# 这里的mount_point不确定是否会与其他脚本中的冲突,如果需要做不同的挂载路径,另起脚本时请改成不同的参数,比如加个1:mount_point1。
ENV{mount_point}="/mnt/data/supervisor/media/%E{dir_name}"
# 插入设备时将触发挂载
# 这里的program和mount_point在另起脚本时也要改成上面对应的参数。
ACTION=="add", RUN{program}+="/usr/bin/mkdir -p %E{mount_point}", RUN{program}+="/usr/bin/systemd-mount --no-block --automount=no --collect $devnode %E{mount_point}"
# 把出设备时将触发卸载挂载
ACTION=="remove", ENV{dir_name}!="", RUN{program}+="/usr/bin/systemd-umount %E{mount_point}", RUN{program}+="/usr/bin/rmdir %E{mount_point}"
# Exit
LABEL="abort_rule"
|
|