请支持无法使用硬连接(hard link)的文件系统 #3444
Replies: 4 comments
|
I traced this against the rc.7 persistence code. The hard link is not only avoiding a copy: it provides complete-before-visible publication and a no-overwrite race boundary. Ordinary POSIX |
|
在HarmonyOS上目前找不到可以创建硬连接的文件系统,因为SELinux规则阻止用户创建硬连接,即使f2fs原本支持硬连接也无法创建。 |
|
作为用户,如果会话真的因为碰撞损坏了,那我直接删除掉会话就行了,没什么大不了的。但如果所有会话都不能开始,那我就什么都没有了,对我来说显示是更糟糕的。 |
|
也许可以把所有文件都存在sqlite数据库里,然后虚拟出一套文件系统API来用,这样应该可以实现原子发布和避免暴露 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
并不是所有文件系统都支持硬连接,或者当前用户也不一定有权限创建硬连接。
比如HarmonyOS内的用户就完全无法创建硬连接,我们只能得到以下报错:
分析代码可知硬连接只是为了把临时文件做原子发布,然后临时文件会被马上删除,似乎改成rename也没有影响。
希望可以在硬连接失败后退回使用rename,uuid冲突的可能性是很小的,这种超小的文件被覆盖风险完全可以接受。
其实我已经为我自己创建了一个补丁来解决这个问题:
https://gitcode.com/hu60cn/ohos-script/blob/master/ohos-patch-dsh-hardlink.sh
方法是编写一个
fs.link函数的替代品来进行回退(为了保证语义我只能回退到copyFile),目前它在我的电脑上工作良好。所以看起来 deepseek harness 并不需要硬连接的“两个路径一份内容”这个语义,那退回
rename或copyFile是完全可行的,至少比彻底用不了好的多。All reactions