收起左侧

HC620等外接存储重启后命名混乱问题解决方案

27
回复
4112
查看
[ 复制链接 ]

3

主题

16

回帖

0

牛值

fnOS系统内测组

2025-12-28 20:19:55 显示全部楼层 阅读模式

昨天看到论坛里这个帖子《关于西数HC620加密叠瓦盘的问题》,当时做了回复,今天把具体解决方案发出来。

很多用户买了hc620 14T当影视资源库,当只有一块hc620时没什么问题,但是如果有超过2块hc620时痛苦的事情就来了。

由于飞牛默认会将外接存储磁盘按照设备型号名称进行挂载,但是遇到相同型号的盘就会出现下面这种文件夹名称:
HSH721414ALN6M0 存音乐的
HSH721414ALN6M0_1 存电影
HSH721414ALN6M0_3 存照片备份

第二块盘的路径已经添加给飞牛影视,第三块盘设置给了飞牛相册用于查看备份的照片,但是飞牛重启后这三个盘的的命名会随机变动,导致之前设置的路径全部失效,飞牛影视读取到了照片备份盘

解决方案1:只用一块同型号的盘。

解决方案2:设置一个开机脚本按照预设的名称更正外接存储的挂载名称。

提前在脚本中按照机械盘的序列号做好映射,只按照这个规则挂载。

假设HSH721414ALN6M0_1的磁盘序列号是WD-002 ,HSH721414ALN6M0_3的序列号是WD-003,我想把WD-002挂载成Media,WD-003挂载成Photo。

最终的效果如下图:

改挂载路径名称后截图.png

以下内容于2026年1月3日更新

第一步:下载附件脚本到飞牛任意目录

下载该附件,上传到飞牛任意目录中,右键解压在在当前文件夹,进入该脚本文件夹看到下面5个文件,只需要关注前三个,4、5不用看。

upload 附件:mount-outer-disk_20260103.zip

  1. readme.md ——帮助文件
  2. mount-disks-config.txt ——磁盘与它目录名的映射配置信息
  3. install.sh ——安装、卸载、更新脚本
  4. mount-outer-disk.service
  5. mount-outer-disk.sh

第二步:找到外接机械盘的序列号

第一种查找方法:从机械盘标签上找到S/N字样后的字符。

第二种用命令查找,假设该机械盘已经插入飞牛并开机,执行下面命令会列出飞牛所有磁盘,第二列就是序列号,第三列是磁盘容量(辅助你找到目标盘)。

lsblk -o name,serial,size,mountpoint

WX20260103-015838@2x.png

小序列号2.png

第三步:编辑磁盘序列号与文件名到配置文件中

下图例子中有若干14T机械盘,以第一个12.7T机械盘VFGH94KD为例。lsblk信息.png

如果想要将它在飞牛里显示成Photo文件夹名称,用飞牛应用市场下载的文本编辑器修改mount-disks-config.txt文件,删除原有示例,填入下面这一行之后保存。

VFGH94KD Photo

文本编辑器内容.png

第四步:安装服务

在脚本文件夹上右键-复制原始路径,我的是:/vol1/1000/z370/mount-outer-disk

连接飞牛ssh,执行以下命令:

# 1. 进入到脚本文件夹内
cd /vol1/1000/z370/mount-outer-disk
# 2. 给安装脚本授予运行权限
sudo chmod +x install.sh
# 3. 用上面配置好的mount-disks-config.txt安装服务
sudo ./install.sh install

复制文件夹路径.png

安装后.png

如图安装成功,仅代表该功能已经启用,但尚未执行过,它只在每次系统启动时执行一次,可按照提示的内容手动让你配置的路径立即生效,执行「启动服务」的命令。

sudo systemctl start mount-outer-disk.service

提示,此时已经安装服务成功,脚本文件已经拷贝到系统目录中,该脚本文件夹可以彻底删除,不影响功能正常运行,保留.zip程序包即可,以后想修改、卸载整个服务重新解压zip后执行install.sh脚本。

第五步:验证效果

打开飞牛【文件管理】-【外接存储】即可看到挂载效果。

验证1.png

其他

出错排查

如果未能看到正确的文件夹名称或根本找不到磁盘的挂载文件夹。

通过下面命令逐个步骤检查:

  1. 确认磁盘是否在系统内能够识别到
    通过命令:lsblk 查看磁盘信息,同时能看到它当前挂载的路径
  2. 如果磁盘存在且挂载路径不符合期望
    执行命令:tail -50 /var/log/mount-outer-disk.log,查看执行日志。

以后如何修改、新增磁盘的映射信息

重新编辑mount-disks-config.txt文件,执行sudo ./install.sh update以更新。

如何彻底卸载这个功能

执行命令:sudo ./install.sh uninstall

飞牛中【挂载】是什么意思?

这个问题准确说是在Linux、Mac os、Unix等非Windows系统世界里挂载是什么意思,类似于Windows系统中给磁盘分区分配一个盘符,这样你才能从文件管理器里访问到它,Windows系统分配盘符通常是自动完成,插上移动硬盘就自然有盘符,Linux系统通常要手动操作,【挂载】就是将某个文件夹映射成这个磁盘的分区,访问这个文件夹就是访问这个磁盘分区。

使用【FntermX终端】小贴士

使用飞牛应用市场里的【FntermX终端】执行命令时无法交互式输入密码,可先用下面命令让sudo成功执行一次,后面再执行sudo就不必输入密码了。

echo '你的飞牛账号的密码' | sudo -S ls

所以还是建议你从电脑远程访问飞牛的ssh终端,连接飞牛ssh这是另一个话题此处不展开,相信论坛里应该有很多教程。

评论里朋友说直接编辑/etc/fstab简单方便,系统自带功能,什么额外脚本都不用。对于有技术基础的朋友确实改fstab最简单;

我觉得自己是Linux老手,今天帮朋友修改fstab依然出现了启动系统失败的情况,nofail也没管用,所以让大多数飞牛用户直接修改fstab不是个好方案,非常容易改出问题系统无法启动。

收藏
送赞 3
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-15 16:40:53 显示全部楼层
雲淡風_azpX5 发表于 2026-1-5 20:56
按照你的教程已经正确挂载并显示,但是我还有一个小问题想请教,如果我在文件管理里手动在我某一块存储空间 ...

你好,你的意思是不是把这块外接硬盘映射到储存硬盘的某个文件夹,请教下如何操作的~
https://club.fnnas.com/forum.php?mod=viewthread&tid=49118 看另外一个帖子,里面有对应方法,把路径自己更改一下就可以了  详情 回复
2026-1-15 17:00

8

主题

63

回帖

0

牛值

初出茅庐

2025-12-30 13:55:29 显示全部楼层

没有必要用脚本或者服务,直接写/etc/fstab就行了,开机也会自动挂载,比如ext4

UUID=xxxxxxxxxxx /vol00/Media ext4 defaults,nofail 0 0
你还是太年轻,用Ubuntu时候fstab乱加之后导致系统起不来的例子数不胜数。  详情 回复
2025-12-30 18:47

3

主题

16

回帖

0

牛值

fnOS系统内测组

2025-12-30 18:47:37 楼主 显示全部楼层
xiaodong 发表于 2025-12-30 13:55
没有必要用脚本或者服务,直接写/etc/fstab就行了,开机也会自动挂载,比如ext4
UUID=xxxxxxxxxxx /vol00/M ...

我在原文引用的帖子回复里就说了,不建议用fstab,用Ubuntu时候fstab乱加之后导致系统起不来的例子数不胜数。
这种service方式属于系统启动后的附加服务,不会影响系统启动或其他功能。
加上nofail,加载失败也不会影响系统启动,自己写的脚本难道比操作系统的工具更稳定?  详情 回复
2026-1-1 00:19

8

主题

63

回帖

0

牛值

初出茅庐

2026-1-1 00:19:11 显示全部楼层
地瓜真好吃 发表于 2025-12-30 18:47
我在原文引用的帖子回复里就说了,不建议用fstab,用Ubuntu时候fstab乱加之后导致系统起不来的例子数不胜 ...

加上nofail,加载失败也不会影响系统启动,自己写的脚本难道比操作系统的工具更稳定?
有道理,我忽略了nofail,确实fstab更简单。  详情 回复
2026-1-1 13:16

3

主题

16

回帖

0

牛值

fnOS系统内测组

2026-1-1 13:16:23 楼主 显示全部楼层
xiaodong 发表于 2026-1-1 00:19
加上nofail,加载失败也不会影响系统启动,自己写的脚本难道比操作系统的工具更稳定? ...

有道理,我忽略了nofail,确实fstab更简单。
我觉得最好用的是挂载到存储目录下 比如这样 挂载HC620到飞牛上(可选),此时重启飞牛即可自动挂载,若不重启可手动挂载命令: # 创建挂载目录 sudo mkdir -p /vol00/HC620 # 将HC620挂载到刚刚创建好的文件夹  详情 回复
2026-3-24 16:49
还是不要试图动fstab了。我尝试了一下,还是挂了。主要原因是飞牛系统加载fstab是在识别硬盘之前,导致根本没法发现硬盘就卡住了。我觉得,还是service方式更稳妥。  详情 回复
2026-2-27 10:29

0

主题

10

回帖

0

牛值

江湖小虾

2026-1-2 16:03:41 显示全部楼层

image.png执行这一步的时候提示:Failed to enable unit: File mount-outer-disk.service: Invalid argument,请教下这个是什么原因

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

3

主题

16

回帖

0

牛值

fnOS系统内测组

2026-1-2 19:10:17 楼主 显示全部楼层
我觉得可能是Windows系统环境下编辑的脚本文件有问题,分别执行下面另个命令修复一下试试,修复后再执行第四步的命令。

  1. sudo sed -i 's/\r$//' /etc/systemd/system/mount-outer-disk.service
  2. sudo sed -i 's/\r$//' /usr/local/bin/remount-outer-disk.sh
复制代码


另外当前这个教程不完美,不应该让用户在Windows系统里编辑脚本,我稍后写一个一键操作的脚本。配置信息写在脚本里也不方便修改和扩展、没提供卸载脚本和服务的方法,这两天我会更新一版教程。

0

主题

10

回帖

0

牛值

江湖小虾

2026-1-5 20:56:18 显示全部楼层

按照你的教程已经正确挂载并显示,但是我还有一个小问题想请教,如果我在文件管理里手动在我某一块存储空间里手动创建一个文件夹,然后自动映射到这个修改后的盘符,应该怎么操作

你好,你的意思是不是把这块外接硬盘映射到储存硬盘的某个文件夹,请教下如何操作的~  详情 回复
2026-1-15 16:40
已在压缩包里找到对应方法,谢谢,为表感谢,我准备去趟小黄鱼  详情 回复
2026-1-5 21:01

0

主题

10

回帖

0

牛值

江湖小虾

2026-1-5 21:01:22 显示全部楼层
雲淡風_azpX5 发表于 2026-1-5 20:56
按照你的教程已经正确挂载并显示,但是我还有一个小问题想请教,如果我在文件管理里手动在我某一块存储空间 ...

已在压缩包里找到对应方法,谢谢,为表感谢,我准备去趟小黄鱼

1

主题

11

回帖

0

牛值

江湖小虾

2026-1-14 14:30:39 显示全部楼层

终于有教程了 晚上试试 可行再入一块

0

主题

10

回帖

0

牛值

江湖小虾

2026-1-15 17:00:02 显示全部楼层
mahunanhai 发表于 2026-1-15 16:40
你好,你的意思是不是把这块外接硬盘映射到储存硬盘的某个文件夹,请教下如何操作的~ ...

https://club.fnnas.com/forum.php?mod=viewthread&tid=49118
看另外一个帖子,里面有对应方法,把路径自己更改一下就可以了

2

主题

6

回帖

0

牛值

江湖小虾

2026-1-24 20:40:33 显示全部楼层

四个硬盘,如果是开机后SSH启动,可以都挂载上,但是如果是重启,则有一个硬盘总是失败,请问可能是什么原因呢?

[2026-01-24 20:36:12] ✓ 挂载成功
[2026-01-24 20:36:12] ✓ 挂载验证通过
[2026-01-24 20:36:12] 磁盘信息: 总计 11T, 已用 34G, 可用 10T
[2026-01-24 20:36:12] ----------------------------------------
[2026-01-24 20:36:12] 处理硬盘配置:
[2026-01-24 20:36:12] 序列号: ZEC00DWF
[2026-01-24 20:36:12] 挂载文件夹名: HarDisk02
[2026-01-24 20:36:12] 设备路径: /dev/sde
[2026-01-24 20:36:12] 当前挂载点: 未挂载
[2026-01-24 20:36:12] 目标挂载点: /vol00/HarDisk02
[2026-01-24 20:36:12] × 挂载点不正确,开始重新挂载...
[2026-01-24 20:36:12] 正在挂载到: /vol00/HarDisk02
[2026-01-24 20:36:13] ✓ 挂载成功
[2026-01-24 20:36:13] ✓ 挂载验证通过
[2026-01-24 20:36:13] 磁盘信息: 总计 11T, 已用 16G, 可用 10T
[2026-01-24 20:36:13] ----------------------------------------
[2026-01-24 20:36:13] 处理硬盘配置:
[2026-01-24 20:36:13] 序列号: ZEC00CM2
[2026-01-24 20:36:13] 挂载文件夹名: HarDisk03
[2026-01-24 20:36:13] 设备路径: /dev/sdc
[2026-01-24 20:36:13] 当前挂载点: 未挂载
[2026-01-24 20:36:13] 目标挂载点: /vol00/HarDisk03
[2026-01-24 20:36:13] × 挂载点不正确,开始重新挂载...
[2026-01-24 20:36:13] 正在挂载到: /vol00/HarDisk03
[2026-01-24 20:36:13] ✓ 挂载成功
[2026-01-24 20:36:13] ✓ 挂载验证通过
[2026-01-24 20:36:13] 磁盘信息: 总计 11T, 已用 19G, 可用 10T
[2026-01-24 20:36:13] ----------------------------------------
[2026-01-24 20:36:13] 处理硬盘配置:
[2026-01-24 20:36:13] 序列号: ZEC009ZJ
[2026-01-24 20:36:13] 挂载文件夹名: HarDisk01
[2026-01-24 20:36:13] 设备路径: /dev/sdb
[2026-01-24 20:36:13] 当前挂载点: 未挂载
[2026-01-24 20:36:13] 目标挂载点: /vol00/HarDisk01
[2026-01-24 20:36:13] × 挂载点不正确,开始重新挂载...
[2026-01-24 20:36:13] 正在挂载到: /vol00/HarDisk01
[2026-01-24 20:36:38] ✗ 挂载失败
[2026-01-24 20:36:38] ----------------------------------------
[2026-01-24 20:36:38] 执行完成统计:
[2026-01-24 20:36:38] 总计: 4 个硬盘
[2026-01-24 20:36:38] 成功: 3 个
[2026-01-24 20:36:38] 跳过: 0 个 (未找到硬盘)
[2026-01-24 20:36:38] 失败: 1 个
[2026-01-24 20:36:38] 当前 /vol00 下的挂载情况:
[2026-01-24 20:36:38] /dev/sdd 11T 34G 10T 1% /vol00/HarDisk04
[2026-01-24 20:36:38] /dev/sde 11T 16G 10T 1% /vol00/HarDisk02
[2026-01-24 20:36:38] /dev/sdc 11T 19G 10T 1% /vol00/HarDisk03
[2026-01-24 20:36:38] /dev/sdb 11T 3.8T 6.3T 38% /vol00/ST11000NS0001-2D1101
[2026-01-24 20:36:38] 硬盘挂载检查和修正完成
[2026-01-24 20:36:38] ========================================

2

主题

6

回帖

0

牛值

江湖小虾

2026-1-26 20:54:07 显示全部楼层

研究了一下,在mount-outer-disk.sh中把sleep从5改到60,算是规避解决了。如果小于40,则会出现原始盘符(型号)和新盘符共存的情况。

我也没啥好的思路,你提供了个方向,解决就好。  详情 回复
2026-1-29 09:30

3

主题

16

回帖

0

牛值

fnOS系统内测组

2026-1-29 09:30:06 楼主 显示全部楼层
XWing 发表于 2026-1-26 20:54
研究了一下,在mount-outer-disk.sh中把sleep从5改到60,算是规避解决了。如果小于40,则会出现原始盘符( ...

我也没啥好的思路,你提供了个方向,解决就好。

4

主题

93

回帖

0

牛值

系统先锋体验团🛩️

fnOS1.0上线纪念勋章

2026-2-27 10:29:47 显示全部楼层
地瓜真好吃 发表于 2026-1-1 13:16
有道理,我忽略了nofail,确实fstab更简单。

还是不要试图动fstab了。我尝试了一下,还是挂了。主要原因是飞牛系统加载fstab是在识别硬盘之前,导致根本没法发现硬盘就卡住了。我觉得,还是service方式更稳妥。

2

主题

6

回帖

0

牛值

江湖小虾

2026-3-7 21:28:39 显示全部楼层

fstab确实不好搞,我的也挂过系统。不推荐!还是楼主的方法更合适。

9

主题

23

回帖

0

牛值

初出茅庐

2026-3-24 16:49:27 显示全部楼层
地瓜真好吃 发表于 2026-1-1 13:16
有道理,我忽略了nofail,确实fstab更简单。

我觉得最好用的是挂载到存储目录下  比如这样
挂载HC620到飞牛上(可选),此时重启飞牛即可自动挂载,若不重启可手动挂载命令:

# 创建挂载目录
sudo mkdir -p /vol00/HC620

# 将HC620挂载到刚刚创建好的文件夹上
# 挂载执行后会在【文件管理】-【外接存储】中看到文件夹名称是HC620
sudo mount /dev/sdb /vol00/HC620

可是重启后盘符会变  会挂载失败  于是问了下豆包改了fstab  然后就重启系统失败了   救回来后豆包给我了一个终极指令:UUID=98bd0055-80xxxx2ca-96787a7a0c7a /vol2/1000/06-HC620 btrfs defaults,nofail,compress=zstd:1,ssd_spread,x-systemd.device-timeout=5 0 0
虽然能正常开机了  好像还是不能正常挂载
楼主能不能写一个开机后自动挂载目录的脚本?

1

主题

6

回帖

0

牛值

江湖小虾

2026-3-30 23:36:48 显示全部楼层

感谢大佬,终于出来教程了,马上去试试

0

主题

1

回帖

0

牛值

江湖小虾

2026-4-7 00:12:53 显示全部楼层

根据楼主的脚本和XWing的在mount-outer-disk.sh中把sleep从5改到60,现在重启以后不会乱了,但应用程序只能只读方式,请问大佬们怎么才能读写谢谢!
360截图20260407001206104.jpg

360截图20260407001054382.jpg

360截图20260407001120464.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先排除是不是btrfs磁盘快满导致的只读  详情 回复
2026-4-19 15:47

3

主题

16

回帖

0

牛值

fnOS系统内测组

2026-4-19 15:47:37 楼主 显示全部楼层
hxfgoodnow 发表于 2026-4-7 00:12
根据楼主的脚本和XWing的在mount-outer-disk.sh中把sleep从5改到60,现在重启以后不会乱了,但应用程序只能 ...

先排除是不是btrfs磁盘快满导致的只读

0

主题

7

回帖

0

牛值

江湖小虾

2026-5-28 15:25:15 显示全部楼层

单盘fstab还能创建存储空间,多盘直接歇菜,已经重装N遍,老实了lol

0

主题

7

回帖

0

牛值

江湖小虾

2026-5-30 00:25:51 显示全部楼层

有个问题,就是热拔插之后的硬盘不能被重新映射,能不能改成硬盘被挂载就自动映射,不要等重启或者手动

2026-6-17 11:26:09 显示全部楼层

感谢楼主分享,使用后,还是有一定几率挂载失败,修改了部分命令后解决了,发出来备忘

#!/bin/bash

# 机械硬盘挂载管理脚本 v3
# 用途:确保指定序列号的硬盘挂载到正确的路径

MOUNT_ROOT="/vol00"
LOG_FILE="/var/log/mount-outer-disk.log"
CONFIG_FILE="/etc/mount-disks-config.txt"
MOUNT_TIMEOUT=120   # 单盘挂载最长等待秒数(journal replay 可能需要)
RETRY_WAIT=10       # 失败后重试等待秒数

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 挂载单盘函数,含重试
# 用法: mount_disk <device_path> <target_mount>
# 返回: 0=成功 1=失败
mount_disk() {
    local DEVICE_PATH="$1"
    local TARGET_MOUNT="$2"
    local attempt

    for attempt in 1 2; do
        [ $attempt -gt 1 ] && log "  → 第 $attempt 次尝试挂载..."

        # 确保挂载目录存在(每次尝试前都确认)
        if [ ! -d "$TARGET_MOUNT" ]; then
            log "  创建挂载目录: $TARGET_MOUNT"
            if ! mkdir -p "$TARGET_MOUNT"; then
                log "  ✗ 目录创建失败"
                return 1
            fi
        fi

        # 检查飞牛是否已经抢先挂好了
        local current
        current=$(findmnt -n -o TARGET "$DEVICE_PATH" 2>/dev/null)
        if [ "$current" = "$TARGET_MOUNT" ]; then
            log "  ✓ 已挂载到正确位置(系统自动完成)"
            return 0
        fi

        # 如果飞牛挂到了错误位置,先卸载
        if [ -n "$current" ]; then
            log "  ⚠ 当前挂载到错误位置 $current,卸载中..."
            umount "$DEVICE_PATH" 2>/dev/null || umount -l "$DEVICE_PATH" 2>/dev/null
            sleep 2
        fi

        # 带超时挂载
        log "  正在挂载到: $TARGET_MOUNT(超时 ${MOUNT_TIMEOUT}s)"
        local err
        err=$(timeout "$MOUNT_TIMEOUT" mount "$DEVICE_PATH" "$TARGET_MOUNT" 2>&1)
        local rc=$?

        if [ $rc -eq 124 ]; then
            log "  ✗ 挂载超时(>${MOUNT_TIMEOUT}s)"
        elif [ $rc -ne 0 ]; then
            # mount 报错,但先用 findmnt 确认实际状态
            local post
            post=$(findmnt -n -o TARGET "$DEVICE_PATH" 2>/dev/null)
            if [ "$post" = "$TARGET_MOUNT" ]; then
                log "  ✓ 设备已挂载到目标路径(系统自动完成,mount 报错可忽略)"
                return 0
            fi
            log "  ✗ 挂载失败: $err"
        else
            log "  ✓ 挂载成功"
            return 0
        fi

        # 第一次失败,等待后重试
        if [ $attempt -eq 1 ]; then
            log "  等待 ${RETRY_WAIT}s 后重试..."
            sleep "$RETRY_WAIT"
        fi
    done

    return 1
}

# ── 主流程 ────────────────────────────────────────────

if [ ! -f "$CONFIG_FILE" ]; then
    log "错误: 配置文件 $CONFIG_FILE 不存在"
    exit 1
fi

sleep 60

log "========================================"
log "开始执行硬盘挂载检查和修正..."
log "挂载根目录: $MOUNT_ROOT"
log "配置文件: $CONFIG_FILE"

if [ ! -d "$MOUNT_ROOT" ]; then
    log "错误: 挂载根目录 $MOUNT_ROOT 不存在"
    exit 1
fi

declare -A DISK_CONFIG
while IFS= read -r line || [ -n "$line" ]; do
    [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
    read -r serial mount_name <<< "$line"
    [ -n "$serial" ] && [ -n "$mount_name" ] && DISK_CONFIG["$serial"]="$mount_name"
done < "$CONFIG_FILE"

TOTAL_DISKS=${#DISK_CONFIG[@]}
SUCCESS_COUNT=0
SKIP_COUNT=0
FAIL_COUNT=0

log "从配置文件读取到 $TOTAL_DISKS 个硬盘配置"
log "----------------------------------------"

for SERIAL in "${!DISK_CONFIG[@]}"; do
    MOUNT_NAME="${DISK_CONFIG[$SERIAL]}"
    TARGET_MOUNT="$MOUNT_ROOT/$MOUNT_NAME"

    log "处理硬盘配置:"
    log "  序列号: $SERIAL  →  挂载目标: $TARGET_MOUNT"

    # 通过序列号找设备路径
    DEVICE_PATH=$(lsblk -nlo PATH,SERIAL | awk -v s="$SERIAL" '$2==s{print $1}' | head -1)

    if [ -z "$DEVICE_PATH" ]; then
        log "  ⚠ 未找到序列号 $SERIAL 的硬盘,跳过"
        log "  调试 - 当前所有设备序列号:"
        lsblk -nlo PATH,SERIAL | awk 'NF==2' | while read -r p s; do log "    $p -> $s"; done
        ((SKIP_COUNT++))
        log "----------------------------------------"
        continue
    fi

    log "  设备路径: $DEVICE_PATH"

    # 实时检查当前挂载状态
    CURRENT_MOUNT=$(findmnt -n -o TARGET "$DEVICE_PATH" 2>/dev/null)
    log "  当前挂载点: ${CURRENT_MOUNT:-未挂载}"

    if [ "$CURRENT_MOUNT" = "$TARGET_MOUNT" ]; then
        log "  ✓ 挂载点正确,无需处理"
        ((SUCCESS_COUNT++))
        log "----------------------------------------"
        continue
    fi

    log "  × 挂载点不正确,开始处理..."

    # 如果挂载到错误位置,先卸载
    if [ -n "$CURRENT_MOUNT" ]; then
        log "  正在卸载: $CURRENT_MOUNT"
        if umount "$DEVICE_PATH" 2>/dev/null; then
            log "  ✓ 卸载成功"
            sleep 2
        elif umount -l "$DEVICE_PATH" 2>/dev/null; then
            log "  ✓ 强制卸载成功"
            sleep 2
        else
            log "  ✗ 卸载失败,跳过此硬盘"
            ((FAIL_COUNT++))
            log "----------------------------------------"
            continue
        fi
    fi

    # 调用挂载函数(含重试)
    if mount_disk "$DEVICE_PATH" "$TARGET_MOUNT"; then
        chmod 755 "$TARGET_MOUNT"
        if mountpoint -q "$TARGET_MOUNT"; then
            DISK_SIZE=$(df -h "$TARGET_MOUNT" 2>/dev/null | tail -1 | awk '{print $2}')
            DISK_USED=$(df -h "$TARGET_MOUNT" 2>/dev/null | tail -1 | awk '{print $3}')
            DISK_AVAIL=$(df -h "$TARGET_MOUNT" 2>/dev/null | tail -1 | awk '{print $4}')
            log "  ✓ 挂载验证通过 | 总计 $DISK_SIZE, 已用 $DISK_USED, 可用 $DISK_AVAIL"
            ((SUCCESS_COUNT++))
        else
            log "  ✗ 挂载验证失败"
            ((FAIL_COUNT++))
        fi
    else
        log "  ✗ 挂载最终失败"
        ((FAIL_COUNT++))
    fi

    log "----------------------------------------"
done

log "执行完成统计:"
log "  总计: $TOTAL_DISKS 个  成功: $SUCCESS_COUNT 个  跳过: $SKIP_COUNT 个  失败: $FAIL_COUNT 个"
log "当前 $MOUNT_ROOT 下的挂载情况:"
df -h 2>/dev/null | grep "$MOUNT_ROOT" | while read -r line; do log "  $line"; done
log "硬盘挂载检查和修正完成"
log "========================================"

[ $FAIL_COUNT -gt 0 ] && exit 1 || exit 0
热拔插后能正常识别挂在么?  详情 回复
2026-6-18 11:30
2026-6-17 11:30:34 显示全部楼层
hxfgoodnow 发表于 2026-4-7 00:12
根据楼主的脚本和XWing的在mount-outer-disk.sh中把sleep从5改到60,现在重启以后不会乱了,但应用程序只能 ...

该权限777可以解决 chmod -R 路径 777

0

主题

21

回帖

0

牛值

江湖小虾

2026-6-18 11:30:49 显示全部楼层
反方向的钟6 发表于 2026-6-17 11:26
感谢楼主分享,使用后,还是有一定几率挂载失败,修改了部分命令后解决了,发出来备忘
#!/bin/bash

热拔插后能正常识别挂在么?
2026-6-22 08:05:47 显示全部楼层
gcq225 发表于 2026-6-18 11:30
热拔插后能正常识别挂在么?

没有试过热插拔,多次重启后没遇到问题

1

主题

3

回帖

0

牛值

江湖小虾

谢谢楼主分享,我一直觉得这是飞牛的大缺陷。群辉很容易就可以改名字了,飞牛就难了。

我有十来个usb硬盘,一上去都不知道里面是什么东西

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

本版积分规则