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

为何rhdf5 R包可读取本地HDF5文件却无法读取外接SSD中的文件?

rhdf5读取外接SSD中H5文件失败,本地文件正常的问题排查与解决

问题描述

使用R的sleuth包分析RNA-seq数据时,遇到rhdf5包的文件读取异常:调用H5Fopen()读取外接SSD中的abundance.h5文件时,报错HDF5. File accessibility. Unable to open file.,但读取本地磁盘(桌面)的同一份文件完全正常。两份文件内容完全一致,原文件存储在外接SSD,今日复制到本地。需求是保留文件在外接SSD中直接使用。

已尝试的无效方案

  • 设置环境变量Sys.setenv(HDF5_USE_FILE_LOCKING = "FALSE")和Sys.setenv(RHDF5_USE_FILE_LOCKING = "FALSE"),无效果
  • 参考过sleuth相关社区问题及Stack Overflow的H5文件读取提问,未解决问题

相关代码与环境信息

> library("rhdf5")

> H5Fopen("/pathway/to/external/SSD/abundance.h5")
# 报错如下:
Error in H5Fopen("/pathway/to/external/SSD/abundance.h5") : 
  HDF5. File accessibility. Unable to open file.

> H5Fopen("/Users/myname/Desktop/abundance.h5")
# 此命令执行完全正常

> sessionInfo()
R version 4.1.3 (2022-03-10)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS 13.0

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rhdf5_2.38.1

loaded via a namespace (and not attached):
 [1] KEGGREST_1.34.0        progress_1.2.2         tidyselect_1.2.0      
 [4] xfun_0.36              vctrs_0.5.1            generics_0.1.3        
 [7] htmltools_0.5.4        stats4_4.1.3           BiocFileCache_2.2.1   
[10] yaml_2.3.6             utf8_1.2.2             blob_1.2.3            
[13] XML_3.99-0.13          rlang_1.0.6            pillar_1.8.1          
[16] glue_1.6.2             DBI_1.1.3              rappdirs_0.3.3        
[19] BiocGenerics_0.40.0    bit64_4.0.5            dbplyr_2.2.1          
[22] GenomeInfoDbData_1.2.7 lifecycle_1.0.3        stringr_1.5.0         
[25] zlibbioc_1.40.0        Biostrings_2.62.0      memoise_2.0.1         
[28] evaluate_0.19          Biobase_2.54.0         knitr_1.41            
[31] IRanges_2.28.0         fastmap_1.1.0          biomaRt_2.50.3        
[34] GenomeInfoDb_1.30.1    curl_4.3.3             fansi_1.0.3           
[37] AnnotationDbi_1.56.2   Rcpp_1.0.9             filelock_1.0.2        
[40] cachem_1.0.6           S4Vectors_0.32.4       XVector_0.34.0        
[43] bit_4.0.5              hms_1.1.2              png_0.1-8             
[46] digest_0.6.31          stringi_1.7.8          dplyr_1.0.10          
[49] rhdf5filters_1.6.0     cli_3.5.0              tools_4.1.3           
[52] bitops_1.0-7           magrittr_2.0.3         tibble_3.1.8          
[55] RCurl_1.98-1.9         RSQLite_2.2.20         crayon_1.5.2          
[58] pkgconfig_2.0.3        ellipsis_0.3.2         xml2_1.3.3            
[61] prettyunits_1.1.1      assertthat_0.2.1       rmarkdown_2.19        
[64] httr_1.4.4             rstudioapi_0.14        Rhdf5lib_1.16.0       
[67] R6_2.5.1               compiler_4.1.3        

解决方案建议

1. 检查外接SSD的权限与文件系统格式

  • macOS对外接NTFS格式磁盘默认只读,即使显示可写也可能存在权限异常。建议将SSD格式化为APFS或Mac OS扩展(日志式),或安装NTFS读写工具确保权限正常。
  • 手动赋予R/RStudio读取SSD的权限:打开「系统设置」→「隐私与安全性」→「文件与文件夹」,找到R或RStudio,勾选外接SSD的访问权限。

2. 使用完整的磁盘挂载路径

避免使用自定义短路径,直接使用/Volumes/[SSD名称]/开头的完整路径,例如:

H5Fopen("/Volumes/MyExternalSSD/abundance.h5")

3. 更新rhdf5及依赖库

当前使用的rhdf5版本为2.38.1,尝试更新到适配arm64架构的最新版本:

if (!require("BiocManager"))
    install.packages("BiocManager")
BiocManager::install("rhdf5")
BiocManager::install("Rhdf5lib")

4. 直接使用sleuth封装的接口

sleuth本身封装了H5文件读取逻辑,尝试直接用sleuth_prep()指定SSD中的文件路径,绕过手动调用H5Fopen的权限问题:

library(sleuth)
# 替换为你的样本信息CSV路径,其中包含SSD中的abundance.h5路径
so <- sleuth_prep("/Volumes/MyExternalSSD/sample_info.csv")

5. 进阶:彻底禁用HDF5文件锁定

除了在R中设置环境变量,尝试在终端启动R前先设置变量:

export HDF5_USE_FILE_LOCKING=FALSE
R

或者调用H5Fopen时指定只读模式并禁用锁定:

H5Fopen("/Volumes/MyExternalSSD/abundance.h5", flags = H5F_ACC_RDONLY)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:20:35