我正在监视一个包含来自 Google Chrome 的下载的目录,ls -la
并在输出中得到以下内容:
-????????? ? ? ? ? ? 'Unconfirmed 784300.crdownload'
我从未在输出中看到过这样的问号。
目录中还有其他文件具有正常的元数据输出。当我ls -la
再次运行时,输出一切正常;该文件仍然具有相同的名称,但元数据现在可见。稍后,下载完成后,文件将按预期重命名为其最终名称。
我检查/var/log/syslog
并dmesg
输出并没有看到任何内核消息。
我想知道我是否遇到了某种竞争条件?我想知道文件首次创建后是否有短暂的时间信息尚不可用?
ext4 文件系统,具有看似标准的安装选项(rw、relatime、errors=remount-ro)、Ubuntu 20.04.1 LTS 上的 5.4.0-59-generic 内核
答案1
ls
这是一个(临时?)文件,在读取其目录条目和尝试从其索引节点获取元数据之间的时间内消失了。
您可以通过ls
在调用文件之前停止lstat
、删除该文件,然后让它继续运行来重现该情况:
$ mkdir dir; touch dir/file
$ gdb -q ls
Reading symbols from ls...(no debugging symbols found)...done.
(gdb) br __lxstat
Breakpoint 1 at 0x4200
(gdb) r -l dir
...
Breakpoint 1, __GI___lxstat (vers=1, name=0x7fffffffdfca "dir",
buf=0x55555557c538) at ../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c:34
(gdb) c
...
Breakpoint 1, __GI___lxstat (vers=1, name=0x7fffffffd3f0 "dir/file",
buf=0x55555557c538) at ../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c:34
...
(gdb) shell rm dir/file
(gdb) c
...
/usr/bin/ls: cannot access 'dir/file': No such file or directory
total 0
-????????? ? ? ? ? ? file
想知道我是否遇到了某种竞争条件?
有点像,但不是真的。这只是一个事实,即ls
在执行其操作时不会锁定文件系统;-)
无论如何,这是不是文件系统损坏或类似的症状。