You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

h5py无法在Samba服务器上以追加模式打开HDF文件

问题:Samba共享上的HDF文件无法用h5py追加模式打开

重现代码

import h5py
path = "/run/user/1000/gvfs/smb-share:server=xyz.com,share=folder/file.h5"
h5f = h5py.File(path, mode="a")

报错信息

OSError: [Errno 95] Unable to open file (unable to open file: name = 'run/user/1000/gvfs/smb-share:server=xyz.com,share=folder/file.h5', errno = 95, error message = 'Operation not supported', flags = 1, o_flags = 2)

已验证的情况

  • 路径与代码逻辑无错误,**只读模式(mode="r")**可正常打开文件
  • **写入模式(mode="w")**具备权限,可正常执行
  • 将文件复制到本地存储后,**追加模式(mode="a")**可正常运行

环境

Manjaro Linux 22.0.4 Xfce桌面环境

strace关键输出

openat(AT_FDCWD, "Image 15_long.h5", O_RDWR) = -1 EOPNOTSUPP (Operation not supported)
[...]
openat(AT_FDCWD, "/home/aurelienb/anaconda3/lib/python3.9/site-packages/h5py/_hl/files.py", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0664, st_size=21326, ...}) = 0
ioctl(3, TCGETS, 0x7ffdf2e0aab0)        = -1 ENOTTY (不适合设备的ioctl操作)
lseek(3, 0, SEEK_CUR)                   = 0
fcntl(3, F_DUPFD_CLOEXEC, 0)            = 4 sa_flags=SA_RESTORER, sa_restorer=0x7f129480df50}, 8) = 0
exit_group(1)                   = ?
+++ exited with 1 +++

原因分析

从strace输出可见,h5py的追加模式("a")底层会尝试以**O_RDWR(读写)**标志打开文件,但GVFS挂载的Samba共享不支持该操作:

  1. h5py的追加模式需要同时读取原文件结构(保留现有内容)和写入新数据,因此必须以读写混合模式打开文件
  2. GVFS对Samba共享的挂载实现中,存在读写混合模式的兼容性限制——单独的读或写操作可正常执行,但O_RDWR模式会触发"操作不支持"错误

解决方案

临时 workaround

  1. 先将Samba共享上的HDF文件复制到本地临时目录,使用追加模式修改后再同步回共享目录
  2. 绕过GVFS,用原生CIFS命令手动挂载Samba共享:
    # 创建本地挂载点
    sudo mkdir /mnt/smb-share
    # 挂载共享(替换为你的服务器地址、共享名、用户名和密码)
    sudo mount -t cifs //xyz.com/folder /mnt/smb-share -o username=你的用户名,password=你的密码,vers=3.0
    
    挂载后使用/mnt/smb-share/file.h5路径操作文件,原生CIFS挂载对O_RDWR模式的支持更完善。

长期优化建议

  • 检查Samba服务器配置,确保启用了随机读写相关参数(如read raw = yes、write raw = yes)
  • 更新系统的GVFS和Samba组件,新版本可能修复该兼容性问题:
    sudo pacman -Syu gvfs-smb samba
    

内容的提问来源于stack exchange,提问作者Aurelien Barbotin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:18:09