Overlayfs复制创建一个空文件

问题描述 投票:0回答:1

我正在做一些奇怪的事情,创建了一个overlayfs挂载,其中较低的目录是FUSE卷(我已经实现了)。这似乎通常可以正常工作,我可以通过overlayfs挂载从FUSE挂载读取文件,并且文件内容正确。我还可以在overlayfs挂载中创建新文件,这并不奇怪,因为这只要求较低的FUSE层在尝试ENOENT该文件时返回LOOKUP响应。失败的是,当我尝试附加到现有文件时,我只获取了附加内容,而不是先获取现有内容,然后又获取了附加内容。我以为我的FUSE卷应该在做某件事,而事实并非如此,这是导致此错误的原因。但是,查看日志并不会抱怨任何未实现的方法,并且没有任何错误。这是相关事件文件(“ foo”)的日志。

2020/04/15 10:35:42 rx 9: LOOKUP i9223372036854775808 ["foo"] 4b
2020/04/15 10:35:42 tx 9:     OK, {i9223372036854775809 g0 tE=0s tA=0s {M0100644 SZ=0 L=0 0:0 B0*0 i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 10: OPEN i9223372036854775809 {O_RDONLY,0x8000}
2020/04/15 10:35:42 tx 10:     OK, {Fh 1 }
2020/04/15 10:35:42 rx 11: GETATTR i9223372036854775809 {Fh 0}
2020/04/15 10:35:42 tx 11:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.827290 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 12: GETATTR i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 12:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.827290 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 13: READ i9223372036854775809 {Fh 1 [0 +4096)  L 0 NONBLOCK,0x8000}
2020/04/15 10:35:42 tx 13:     OK,  4096b data (fd data)
2020/04/15 10:35:42 rx 14: GETATTR i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 14:     OK, {tA=0s {M0100600 SZ=4 L=1 0:0 B8*4096 i0:9223372036854775809 A 1586972142.855292 M 1586972142.855292 C 1586972142.855292}}
2020/04/15 10:35:42 rx 15: FLUSH i9223372036854775809 {Fh 1}
2020/04/15 10:35:42 tx 15:     OK
2020/04/15 10:35:42 rx 16: RELEASE i9223372036854775809 {Fh 1 NONBLOCK,0x8000  L0}
2020/04/15 10:35:42 tx 16:     OK
2020/04/15 10:35:42 rx 17: GETATTR i9223372036854775808 {Fh 0}
2020/04/15 10:35:42 tx 17:     OK, {tA=0s {M040755 SZ=0 L=0 0:0 B0*0 i0:9223372036854775808 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 18: LISTXATTR i9223372036854775808 {sz 0}
2020/04/15 10:35:42 tx 18:     OK
2020/04/15 10:35:42 rx 19: GETATTR i9223372036854775809 {Fh 0}
2020/04/15 10:35:42 tx 19:     OK, {tA=0s {M0100644 SZ=0 L=0 0:0 B0*0 i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000}}
2020/04/15 10:35:42 rx 20: LISTXATTR i9223372036854775809 {sz 0}
2020/04/15 10:35:42 tx 20:     OK

如果很重要,则将熔丝层写入go中。

go fuse overlayfs
1个回答
0
投票

首先,此设置不是很奇怪。其次,您将有更多机会在[email protected]上获得答案。

但是,据我所知,问题似乎出在您的保险丝fs中:

2020/04/15 10:35:42 rx 9:查找i9223372036854775808 [“ foo”] 4b2020/04/15 10:35:42 tx 9:OK,{i9223372036854775809 g0 tE = 0s tA = 0s{M0100644 SZ = 0 L = 0 0:0 B0 * 0 i0:9223372036854775809 A 0.000000 M0.000000 C 0.000000}}

2020/04/15 10:35:42 rx 19:GETATTR i9223372036854775809 {Fh 0}2020/04/15 10:35:42 tx 19:好的,{tA = 0s {M0100644 SZ = 0 L = 0 0:0 B0 * 0i0:9223372036854775809 A 0.000000 M 0.000000 C 0.000000}}

不确定原因,但是您的fs报告了在查找中找到的文件的大小为零,稍后读取文件时,报告大小正确的是4。

我希望您在保险丝fs上运行stat(1)或ls -l,观察这个问题。可能是您正确实现了fstat(2)而不是lstat(2)?

谢谢,阿米尔[]

© www.soinside.com 2019 - 2024. All rights reserved.