侧边栏壁纸
博主头像
随手笔记 博主等级

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 11 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

飞牛OS挂载USB移动硬盘,实现外部分享

Isve丨丶勿言
2025-08-30 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

前言

今天把群晖换成了飞牛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,也可以是 vol2vol3vol00不行

创建执行脚本

通过下面的命令创建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等分享时,不必再看着一堆常常的硬盘名发愁。

0

评论区