『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 4094|回复: 1

[经验分享] HASSOS 挂载磁盘的方法

[复制链接]

5

主题

117

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
389
HASS币
0
发表于 2021-8-3 21:29:29 | 显示全部楼层 |阅读模式
本帖最后由 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"

Udev.zip

5.97 KB, 下载次数: 10

挂载脚本

回复

使用道具 举报

1

主题

6

帖子

76

积分

注册会员

Rank: 2

积分
76
金钱
70
HASS币
0
发表于 2024-3-29 15:12:41 | 显示全部楼层
非常需要这个功能,能详细传授一下怎么挂载?估计是现在系统更新了,重新启动后没有3个点点了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-8 10:22 , Processed in 0.164471 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表