![df 挂起,我不知道为什么](https://linux22.com/image/137844/df%20%E6%8C%82%E8%B5%B7%EF%BC%8C%E6%88%91%E4%B8%8D%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88.png)
[backstory] 我有一个 CentOS 7.5.1804 邮件服务器(postfix/dovecot),似乎可以工作,但是当我添加新的电子邮件客户端时,它没有为用户创建邮件文件夹[/backstory]
我运行 df -h 来查看是否空间不足并且它挂起。然后我运行 df ,它也挂了。我发现这个问题:如何杀死一个不重启就无法杀死的进程?并开始四处探索。
我的服务器上只有两个物理驱动器。我可以在每个挂载点(/ 和 /mnt/external)上运行 df 并且它运行正常。我运行了 mount ,它显示了大量我不熟悉的条目。我很确定它们不会全部出现在 df 中,因此我将 df 的输出与我拥有的另一个 CentOS 机器(相同版本)上的挂载进行了比较,并且 df 显示了一些挂载点(/、/dev、/ dev/shm、/run、/sys/fs/cgroup、/boot、/run/user/1000),因此我尝试在可疑服务器上分别对其中的每一个运行 df,它们都正确完成。
我能够在挂起的 df 实例上访问 /proc/$PID/* (引用问题中的答案之一表明),并且我可以 cat /proc/$PID/syscall ,它没有改变,但我不不知道如何解释。
StackExchange,你是我唯一的希望! (好吧,也许不是,但我希望有人能指出我正确的方向)
dmesg 输出:
[4400391.164795] systemd-journald[16672]: File /run/log/journal/b2bcc90256f446df876bea47007f387b/system.journal corrupted or uncleanly shut down, renaming and replacing.
[4400392.726853] SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs
this repeats 556 times
[4856400.839491] SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs
[4856640.666072] INFO: task df:22269 blocked for more than 120 seconds.
[4856640.666180] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[4856640.666310] df D ffff88007fc13680 0 22269 21526 0x00000084
[4856640.666316] ffff88004fa57a30 0000000000000082 ffff880079fd4440 ffff88004fa57fd8
[4856640.666320] ffff88004fa57fd8 ffff88004fa57fd8 ffff880079fd4440 ffff88003641cf98
[4856640.666324] ffff88003641cfa0 7fffffffffffffff ffff880079fd4440 ffff880035e44e00
[4856640.666328] Call Trace:
[4856640.666338] [<ffffffff816096a9>] schedule+0x29/0x70
[4856640.666342] [<ffffffff816075f9>] schedule_timeout+0x209/0x2d0
[4856640.666347] [<ffffffff810980e6>] ? finish_wait+0x56/0x70
[4856640.666351] [<ffffffff81607a42>] ? mutex_lock+0x12/0x2f
[4856640.666355] [<ffffffff8124a8fa>] ? autofs4_wait+0x37a/0x870
[4856640.666359] [<ffffffff81609ba6>] wait_for_completion+0x116/0x170
[4856640.666363] [<ffffffff810a9500>] ? wake_up_state+0x20/0x20
[4856640.666366] [<ffffffff8124ba5b>] autofs4_expire_wait+0x6b/0x110
[4856640.666371] [<ffffffff81270fcd>] ? selinux_inode_setsecurity+0x6d/0x140
[4856640.666374] [<ffffffff81248b52>] do_expire_wait+0x172/0x190
[4856640.666378] [<ffffffff81248d7b>] autofs4_d_manage+0x9b/0x160
[4856640.666383] [<ffffffff811d0b85>] follow_managed+0xb5/0x300
[4856640.666386] [<ffffffff811d149b>] lookup_fast+0x19b/0x2e0
[4856640.666390] [<ffffffff811d4495>] path_lookupat+0x165/0x7a0
[4856640.666394] [<ffffffff811ab5a5>] ? kmem_cache_alloc+0x35/0x1d0
[4856640.666397] [<ffffffff811d6a0f>] ? getname_flags+0x4f/0x1a0
[4856640.666400] [<ffffffff811d4afb>] filename_lookup+0x2b/0xc0
[4856640.666404] [<ffffffff811d7b37>] user_path_at_empty+0x67/0xc0
[4856640.666408] [<ffffffff810f0ad2>] ? from_kgid_munged+0x12/0x20
[4856640.666412] [<ffffffff811cba1f>] ? cp_new_stat+0x14f/0x180
[4856640.666415] [<ffffffff811d7ba1>] user_path_at+0x11/0x20
[4856640.666419] [<ffffffff811cb513>] vfs_fstatat+0x63/0xc0
[4856640.666422] [<ffffffff811cba7e>] SYSC_newstat+0x2e/0x60
[4856640.666426] [<ffffffff810fac96>] ? __audit_syscall_exit+0x1e6/0x280
[4856640.666429] [<ffffffff811cbd5e>] SyS_newstat+0xe/0x10
[4856640.666434] [<ffffffff81614209>] system_call_fastpath+0x16/0x1b
strace df 结尾为:
stat("/sys/fs/selinux", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
stat("/proc/sys/fs/binfmt_misc",
答案1
感谢@StéphaneChazelas,我使用 strace 来查看 df 挂在哪里,这导致了这个答案:https://serverfault.com/a/918160/256146
重新启动它,然后重新启动 dovecot 恢复系统操作。