收起左侧

在Windows 11中不能查看文件快照

3
回复
100
查看
[ 复制链接 ]

3

主题

6

回帖

0

牛值

江湖小虾

2026-6-11 20:29:25 显示全部楼层 阅读模式

系统版本:

X86

设备环境:

物理机,局域网访问,fnOS v1.1.x(最新版本),Windows 11 客户端通过 SMB 映射网络驱动器访问

BUG现象:

开启文件快照功能后,在 Windows 资源管理器中右键共享文件夹 → 属性 → "以前的版本"标签页存在但内容为空,无法显示任何快照历史版本。

根因定位:

排查发现 Samba 共享配置文件 /etc/samba/users/1000.share.confshadow:format 与快照实际目录命名格式不匹配:

  • smb.conf 中配置为:shadow:format = GMT%z-%Y.%m.%d-%H.%M.%S
  • 实际快照应用trim-snapshots 实际创建的快照目录名为:UTC+08-2026.06.11-00.00.00

两处不一致:

  1. 前缀不同:配置写的是 GMT,快照实际用的是 UTC
  2. 时区格式不同:%z 输出为 +0800(四位),快照实际为 +08(两位)

导致 Samba shadow_copy2 模块枚举快照时无法匹配任何目录,Windows 端收到空列表。

手动验证修复:

shadow:format 修改为 UTC+08-%Y.%m.%d-%H.%M.%S 后,重启 Samba 服务,Windows "以前的版本"立即恢复正常,可以看到所有快照时间点。

但系统会在设置变更时自动重新更新/etc/samba/users/1000.share.conf配置文件,手动修改会被覆盖还原为错误的 GMT%z 格式,问题复发。

建议修复方案:

将 share.conf 模板中的 shadow:formatGMT%z-%Y.%m.%d-%H.%M.%S 改为与 trim-snapshots 实际输出一致的 UTC+08-%Y.%m.%d-%H.%M.%S(根据系统时区动态生成前缀),使 Windows Previous Versions 功能正常工作。

收藏
送赞
分享
2026-6-12 11:00:15 显示全部楼层

感谢反馈!这个可能和smb配置时区格式有关,我们会把你提供的复现与修复验证转给技术同学进一步查看。

你好,还是有问题,我只是测试可以在Windows文件夹看到以前的版本,也可以打开文件夹,但是复制不出来。复制时出错,发现打开这个以前版本的文件,会提示:无法打开"Z\@GMT-2026.06.12-00.00.00" 也就是说,Windows  详情 回复
2026-6-13 16:04

3

主题

6

回帖

0

牛值

江湖小虾

2026-6-13 16:04:04 楼主 显示全部楼层
飞牛运营同学 发表于 2026-6-12 11:00
感谢反馈!这个可能和smb配置时区格式有关,我们会把你提供的复现与修复验证转给技术同学进一步查看。
...

你好,还是有问题,我只是测试可以在Windows文件夹看到以前的版本,也可以打开文件夹,但是复制不出来。复制时出错,发现打开这个以前版本的文件,会提示:无法打开"Z\@GMT-2026.06.12-00.00.00"
也就是说,Windows默认就是用的`GMT-2026.06.12-00.00.00`格式浏览并打开,所以就是我们的快照应用重命名方式得改变,要不然不能通过Windows的文件夹恢复。
按说快照预览恢复是linux是很基础的功能

3

主题

6

回帖

0

牛值

江湖小虾

2026-6-14 17:02:58 楼主 显示全部楼层
#!/bin/bash
# 批量为旧格式快照创建新格式软链接 - 仅处理 1000 目录

dir="/vol1/@snapshot/1000"

for path in "$dir"/UTC+08-*; do
  [ -e "$path" ] || continue
  
  old_name=$(basename "$path")
  datetime_part="${old_name#UTC+08-}"
  new_name="GMT+0800-${datetime_part}"
  symlink_path="$dir/$new_name"
  
  if [ ! -L "$symlink_path" ] && [ ! -e "$symlink_path" ]; then
    ln -s "$path" "$symlink_path"
    echo "创建软连接: $symlink_path -> $path"
  else
    echo "跳过 (已存在): $symlink_path"
  fi
done

我用上面的脚本,创建了对应软连接,可以正常识别也可以复制出来文件。

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

本版积分规则