前言
今天把群晖换成了飞牛OS,遇到了USB移动硬盘无法创建分享链接,同时无法自定义USB移动硬盘名称问题,整了一天,终于搞好了。现在可以直接在USB移动硬盘中的文件上通过右键分享文件了,WebDAV等链接中,也可以通过自定义的文件夹名称来访问了。已知存在的一个问题是USB移动硬盘对应的目录名称,不能通过常规的文件夹重命名实现,只能通过修改脚本中路径来实现。
还发现一个问题,USB移动硬盘如果是通过硬盘盒走RAID1模式,然后将其建立“存储空间”,再从其他USB移动硬盘复制文件进去时,会出现 /dev/sdx: Can't open blockdev 这种错,过一会系统直接关闭(我是PVE虚拟机中装的飞牛OS),必须所有USB移动硬盘走普通的挂载模式才行。(也可能是我的移动硬盘有问题,不太确定)
准备工作
登录飞牛OS,在【系统设置】-【SSH】中,启用【SSH功能】,然后通过SSH工具登录你的飞牛OS。SSH登录时的账号、密码就是你网页或APP登录飞牛OS时的账号、密码。
具体步骤
以下操作,都是基于你已经通过SSH工具登录上了你的飞牛OS后进行的。
切换为root执行
sudo su
获取需挂载的硬盘UUID
lsblk -o NAME,SIZE,TYPE,FSTYPE,UUID,LABEL,MODEL
NAME SIZE TYPE FSTYPE UUID LABEL MODEL
sda 119.2G disk Kston 128GB
├─sda1 94M part vfat 68B1-D34B
├─sda2 15.9G part ext4 5fbf8142-5cee-48bb-a7d6-738517d9a751
└─sda3 103.2G part linux_raid_member 6fdbb65d-6b39-91db-d38d-eb86f8668d31 fnOS:0
└─md127 103.2G raid1 LVM2_member BBMXZo-zsCT-pWx1-VUjd-hw2N-8VXQ-TxpTM2
└─trim_0e3a30da_9147_4e67_8f4b_291594b95ee5-0 103.2G lvm ext4 8a45f4b1-d8c0-492c-9942-d4c3291902ba
sdb 931.5G disk ST1000DM003-1SB10C
└─sdb1 931.5G part exfat 79FF-7461
sdc 476.9G disk ZHITAI SC001 Active 512GB SSD
└─sdc1 476.9G part ext4 457c75ca-91c8-4bd7-abfd-a8f980bd7edc
从上述输出结果中,根据磁盘大小、型号得到需要挂载的硬盘设备UUID:
sdb1::931.5G,型号:ST1000DM003-1SB10C,UUID:
79FF-7461
,这是我的USB机械硬盘, 挂载到USB HDD
sdc1:476.9G,型号:ZHITAI SC001 Active 512GB SSD,UUID:
457c75ca-91c8-4bd7-abfd-a8f980bd7edc
,这是我的USB固态硬盘,挂载到USB SSD
获取已有存储空间路径
ls / | grep vol
vol00
vol1
从上述输出结果中得到我可用的 存储空间1
路径 vol1
,也可以是 vol2
、vol3
,vol00
不行
创建执行脚本
通过下面的命令创建mount-usb.sh
,命令后面是mount-usb.sh
的内容,里面MOUNTS
部分根据情况做修改
vi /usr/local/bin/mount-usb.sh
#!/bin/bash
# 容错挂载 USB 硬盘,带重试机制,保证 Docker 卷可用
# 挂载点数组:UUID:挂载目录
MOUNTS=(
"79FF-7461:/vol1/1000/USB HDD"
"457c75ca-91c8-4bd7-abfd-a8f980bd7edc:/vol1/1000/USB SSD"
)
# 最大重试次数
MAX_RETRIES=5
# 每次重试间隔(秒)
SLEEP_INTERVAL=2
for entry in "${MOUNTS[@]}"; do
UUID="${entry%%:*}"
MOUNT_POINT="${entry##*:}"
# 创建挂载目录
mkdir -p "$MOUNT_POINT"
retries=0
while [ $retries -lt $MAX_RETRIES ]; do
# 获取文件系统类型
DEV_PATH="/dev/disk/by-uuid/$UUID"
if [ -e "$DEV_PATH" ]; then
FSTYPE=$(blkid -o value -s TYPE "$DEV_PATH" 2>/dev/null)
if [ -z "$FSTYPE" ]; then
echo "Cannot determine filesystem type for $UUID, retrying..."
retries=$((retries + 1))
sleep $SLEEP_INTERVAL
continue
fi
# 如果已经挂载,先卸载
if mountpoint -q "$MOUNT_POINT"; then
echo "$MOUNT_POINT is already mounted, unmounting..."
umount "$MOUNT_POINT"
if [ $? -ne 0 ]; then
echo "WARNING: Failed to unmount $MOUNT_POINT, retrying later..."
retries=$((retries + 1))
sleep $SLEEP_INTERVAL
continue
fi
fi
# 根据文件系统类型选择挂载参数
case "$FSTYPE" in
exfat|vfat|ntfs)
OPTS="-o rw,uid=1000,gid=1001,umask=0006"
[ "$FSTYPE" = "ntfs" ] && OPTS="-t ntfs-3g $OPTS"
;;
ext4|ext3|ext2)
OPTS="-o rw,defaults,noatime,errors=remount-ro"
;;
*)
OPTS="-o rw,defaults"
;;
esac
# 尝试挂载
if mount -t "$FSTYPE" $OPTS "$DEV_PATH" "$MOUNT_POINT"; then
echo "Mounted $MOUNT_POINT ($FSTYPE)"
break
else
echo "Failed to mount $MOUNT_POINT ($FSTYPE), retrying..."
fi
else
echo "Device $UUID not found, retrying..."
fi
retries=$((retries + 1))
sleep $SLEEP_INTERVAL
done
if ! mountpoint -q "$MOUNT_POINT"; then
echo "WARNING: $MOUNT_POINT could not be mounted after $MAX_RETRIES retries"
fi
done
上述内容保存后,需修改脚本为可执行。
chmod +x /usr/local/bin/mount-usb.sh
注意脚本里面# 挂载点数组:UUID:挂载目录
下面的两行,是前面获取的UUID以及需要挂载的文件夹名称。
创建自动挂载服务
通过下面的命令创mount-usb.service
来实现自动挂载USB硬盘到指定目录,命令后面一段为mount-usb.service
的内容
vi /etc/systemd/system/mount-usb.service
[Unit]
Description=Mount USB drives with retry before Docker
After=local-fs.target
Before=docker.service
Wants=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mount-usb.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启动服务
systemctl daemon-reload
systemctl enable mount-usb.service
systemctl start mount-usb.service
结语
通过上面的操作,你USB硬盘会挂载在你指定的存储空间下的指定目录中 ,同时在飞牛OS的文件管理的 我的文件 下面会出现你挂载USB移动硬盘时指定的名字的文件夹,这样在使用WebDAV、SMB等分享时,不必再看着一堆常常的硬盘名发愁。
评论区