跳转至

8.4 EOS 文件存储

8.4.1 EOS 文件系统概况

EOS 文件系统是一套基于 xrootd 框架的面向 EB 级数据存储的分布式文件系统。目前提供 LHAASO、HXMT 等多个实验的海量数据存储服务。

当前 EOS 文件系统的信息如下表所示。

实例名 挂载点 实例服务器地址 总空间 用途
LHAASO实验 /eos eos01.ihep.ac.cn 46 PB LHAASO本地实验数据
LHAASO稻城 /eos/daocheng lhmteos01.ihep.ac.cn 5.84 PB LHAASO稻城快速重建
HXMT实验 /mnt/hxmt hxmteos01.ihep.ac.cn 806.22 TB HXMT实验数据
JUNO实验 /eos/juno junoeos01.ihep.ac.cn 6.69 PB JUNO实验

8.4.2 EOS 文件系统使用说明

eos 使用

EOS 目前提供两种访问方式:客户端 FUSE 方式和 xrootd 方式。

FUSE 方式

此方式是以挂载点的方式来访问 EOS 系统,类似于访问本地文件系统。对于不同的实验存储实例,其挂载点如上表所示。比如对于 LHAASO 实验的挂载目录为 /eos,HXMT 实验的挂载目录为 /mnt/hxmt。在登录节点上,可以通过挂载点来访问 EOS 文件系统中的数据。

注意

JUNO 实验不提供 FUSE 方式。

xrootd 方式

此方式是使用 xrootd 协议访问 EOS 系统,访问方式为:

root://EOS_MGM_SERVER//filepath

注意

  • xrootd 默认使用 1094 端口
  • 在端口后需要使用 //
  • filepath 需要使用 绝对路径

此处的 EOS_MGM_URL 为实例的服务器地址,如果不存在,请自行设置:

export EOS_MGM_URL=root://xxx.ihep.ac.cn/

用户可以使用 xrootd 自带的命令,也可以使用 eos 命令来访问。以 LHAASO 实验为例,如果要列出 LHAASO 实验中某个文件情况,命令如下:

xrdfs root://eos01.ihep.ac.cn/ ls /eos/user/file.txt

或者:

eos root://eos01.ihep.ac.cn/ ls /eos/user/file.txt
表 8.4-1 eos 命令与系统命令对照表
Eos命令(推荐使用) Linux命令(不可用) 说明
eos ls ls 查看文件列表
eos cp cp 拷贝文件
eos mv mv 移动文件
eos cp /eos/user/myfile - | cat cat 查看文件内容
eos cp /eos/user/myfile - | tail tail 查看文件内容
eos mkdir mkdir 创建文件夹
eos touch touch 创建文件
eos newfind -f /eos/mypath 无 查找某一个目录下所有文件列表(包含子目录)
eos newfind -d /eos/mypath 无 查找某一个目录下所有目录列表(包含子目录)
eos ln ln 创建软链接
eos quota 无 查看个人空间使用大小(/eos/user/a-z/username)
eos stat -f ls 判断文件是否存在,如果不存在,返回值为空
eos file info stat 可查看文件的 Modify 修改时间和 Change 状态改动时间

其中,Linux 下的 cat 和 tail 命令可以用 xrdfs 相应命令代替,需要在 xrdfs 后面加上 EOS 的域名,比如 LHAASO EOS,就是 eos01 或 eos01.ihep.ac.cn:

  • 查看文件全部内容:xrdfs eos01 cat /eos/user/myfile
  • 查看文件尾部 N bytes 内容:xrdfs eos01 tail -c N /eos/user/myfile
  • 实时查看文件尾部内容:xrdfs eos01 tail -f /eos/user/myfile

作业中使用 xrootd

前提:作业中使用 xrootd 读写文件的前提是物理软件需要支持 xrootd 协议。 对于 ROOT 软件,目前已支持 xrootd 方式,但需要注意目前有三种方式产生 TFile 对象:

  • 声明:TFile(PATHNAME):不支持 xrootd
  • 新文件:new TFile (PATHNAME):不支持 xrootd
  • 打开方法:TFile::Open(PATHNAME):支持 xrootd

举例:

  • 对于 ROOT 格式的文件,可以直接用 TFile::Open 打开:
TFile *filein = TFile::Open("root://eos01.ihep.ac.cn//eos_absolute_path_filein_name.root");

或

TFile *fileout = TFile::Open("root://eos01.ihep.ac.cn//eos_absolute_path_fileout_name.root");
  • 对于非 ROOT 格式的文件,也可以用 ROOT 的 TFile 类直接读写,需要在文件名后增加一个参数 ?filetype=raw。举例:
void rawfile(){

    int size;

    char buf[1024];

    TFile *rf = TFile::Open("root://eos01.ihep.ac.cn//eos/user/c/chyd/set.log?filetype=raw");

    size = rf->GetSize();

    printf("size is %d\n", size);

    memset(buf, 0, 1024);

    rf->ReadBuffer(buf, 1024);

    printf("%s\n", buf);

    rf->Close();

}

如果使用 Python 和 PyROOT,打开文件的方法:

f = ROOT.TFile.Open("root://eos01.ihep.ac.cn//eos_absolute_path_fileout_name.root")

查看用户的资源配额

命令格式:

eos quota your_eos_path

示例如下:

eos quota /eos/user/z/zhangsan

输出示例:

By user ...
# _______________________________________________________________________________________________
# ==> Quota Node: /eos/user/z/zhangsan/
# _______________________________________________________________________________________________
user       used bytes logi bytes used files aval bytes aval logib aval files filled[%]  vol-status ino-status
zhangsan   800 GB  800 GB  10 k-   1.00 TB    200GB    25M -  9.08       ok         ok              
        (已用空间)          (已使用文件数) (空间配额)(文件数配额)     
By group ...
# _______________________________________________________________________________________________
# ==> Quota Node: /eos/user/z/zhangsan/
# _______________________________________________________________________________________________
# ...............................................................................................
group      used bytes logi bytes used files aval bytes aval logib aval files filled[%]  vol-status ino-status
u07        800 GB  800 GB  10 k-   0 B        0 B        0 -        100.00     ignored    ignored 

查看 EOS 回收站

命令格式:

eos recycle help

可支持 ls(列表)、purge(清空)、restore(恢复)三种操作。

查看用户个人回收站中的文件:

eos recycle ls

输出示例:

# Deletion Time            UID      GID      SIZE         TYPE          RESTORE-KEY      RESTORE-PATH                                                    
# ==============================================================================================================================
Sat Dec 29 16:32:03 2018   zhangsan  u07      13           file          0000000008b0f7bf /eos/user/z/zhangsan/test.txt  

清空用户个人回收站中的文件:

eos recycle purge

恢复用户个人回收站中的某个文件:

eos recycle restore [--force-original-name|-f] [--restore-versions|-r] <recycle-key> 

示例:

eos recycle restore 0000000008b0f7bf

注意

目前 /eos 回收站中的文件只保留 3 天时间。

常见问题(FAQ)

见常见问题。

🤖 AI 助手
💬 快速提问 ×

有问题?输入后跳转到对话页继续交流