我使用 scp 将一些文件复制到文件服务器主机上的 XFS 本地分区,并通过 SSH 创建指向本地新部署文件的符号链接。该分区通过 NFS 导出并安装在多个主机上。
scp new-file-version fileserver:/nfs/exported/path
ssh fileserver ln -s new-file-version /nfs/exported/path/file
如果我在文件服务器本地检查部署的文件和符号链接,一切都很好:
fileserver$ ls -l /nfs/exported/path
lrwxrwxrwx 1 root root 56 Oct 30 12:30 file -> new-file-version
-rwxr-xr-x 11 root root 220 Oct 30 12:34 new-file-version
-rwxr-xr-x 11 root root 220 Oct 30 12:12 previous-file-version
但是,当我尝试查看已部署的文件或通过 NFS 复制它们时,我在刚刚创建的符号链接中收到一些输入/输出错误:
nfsclient$ ls -l /nfs/mounted/path
ls: cannot read symbolic link /nfs/mounted/path/file: Input/output error
lrwxrwxrwx 1 root root 56 Oct 30 12:30 file
-rwxr-xr-x 11 root root 220 Oct 30 12:34 new-file-version
-rwxr-xr-x 11 root root 220 Oct 30 12:12 previous-file-version
NFS 挂载路径上的 stat 命令报告以下信息:
nfsclient$ stat /nfs/mounted/path
File: '/nfs/mounted/path'
Size: 175 Blocks: 0 IO Block: 32768 directory
Device: 2ch/44d Inode: 560507638 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-02 14:25:04.677606317 +0100
Modify: 2018-11-02 14:25:28.630755680 +0100
Change: 2018-11-02 14:25:28.630755680 +0100
Birth: -
请注意,访问时间早于修改/更改时间,尽管我刚刚读取了目录内容。
如果我重试该操作,经过一番尝试后最终会成功:
nfsclient$ ls -l /nfs/mounted/path
lrwxrwxrwx 1 root root 56 Oct 30 12:30 file -> new-file-version
-rwxr-xr-x 11 root root 220 Oct 30 12:34 new-file-version
-rwxr-xr-x 11 root root 220 Oct 30 12:12 previous-file-version
然后 stat 报告此信息并更新访问时间:
nfsclient$ stat /nfs/mounted/path
File: '/nfs/mounted/path'
Size: 175 Blocks: 0 IO Block: 32768 directory
Device: 2ch/44d Inode: 560507638 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-02 14:25:30.925774294 +0100
Modify: 2018-11-02 14:25:28.630755680 +0100
Change: 2018-11-02 14:25:28.630755680 +0100
Birth: -
关于为什么会发生这种情况有任何线索吗?
答案1
嗯,根据https://bugzilla.redhat.com/show_bug.cgi?id=1416532,这是 RHEL7.3 中的一个错误,这正是我们使用的版本。
它已在内核 kernel-3.10.0-562.el7 中修复。