btrfs:ls 在目录中列出相同的文件两次

pus*_*ous 5 filesystems btrfs

我在 Linux 4.10.8 上使用 btrfs。硬重启后,谷歌浏览器声称无法找到本地数据。一旦我添加了相关的用户 ID,其中一些就回来了,所以我很好奇发生了什么。我查看了 ~/.config/google-chrome,发现了这个:

$ ls -i 

...
3529523 'Local State'
3529523 'Local State'
...
Run Code Online (Sandbox Code Playgroud)

这是同一个文件,具有相同的 inode,两次。我猜这可能是 Google Chrome 感到困惑的原因,尽管它似乎在每次重新启动之间都能正常工作——向这个 Local\State 文件写入了很多内容。但是,当我重新启动它时,它说它无法加载本地状态。SMART 检查和 btrfsck 都不报告任何错误。有任何想法吗?

Stu*_*art 2

我在使用内核的 btrfs 上遇到了同样的问题,4.14.0但我的重复文件是.config/google-chrome-unstable/Default/TransportSecurity. 我能够通过这样做来修复它

cd .config/google-chrome-unstable/Default
mkdir -p ~/tmp/Default
chmod 700 ~/tmp/Default
tar cf - . | (cd ~/tmp/Default && tar xf -)
cd ~
rm -rf .config/google-chrome-unstable/Default # this will error because the directory isn't empty because the duplicated file left some residue
mv .config/google-chrome-unstable/Default{,.old}
mv ~/tmp/Default .config/google-chrome-unstable/
Run Code Online (Sandbox Code Playgroud)

现在当我ls -l .config/google-chrome-unstable/Default.old得到:

ls: cannot access '.config/google-chrome-unstable/Default.old/TransportSecurity': No such file or directory
total 0
-????????? ? ? ? ?            ? TransportSecurity
Run Code Online (Sandbox Code Playgroud)

此时我重新启动到单用户模式并运行:

umount /home
btrfs check --repair /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

它注意到损坏的目录并修复了它。您也许可以从那里开始,但为了完整起见,我将保留我采取的其他步骤。