poetry

问题

只要涉及到根目录,使用ls和df命令就会出现卡死情况。

1
2
3
4
5
6
7
8
[root@zen] pwd
/root
[root@zen] ls /
^C
[root@zen] df h
^C
[root@zen] ls /opt
containerd google jumpserver mysql prometheus

踩坑

1、起初在网上找了一些方法,大多是目录挂载的问题;里面叫你用strace定位问题,然后在lstate的时候会发现是目录没挂载上去,但是我用strace的时候,是正常退出的,因为流程过长,strace的log放在结尾了。

类似于这样:

https://blog.51cto.com/chaichuan/2104093
https://blog.csdn.net/u010801696/article/details/78490103

2、后来发现可能是日志文件过大,或者是文件细碎导致ls太慢,通常是/var/spool/postfix/这个目录下的maildrop太大,但是我看了一下我的,并没有太大。maildrop 爆满的问题一般是 crontab 未屏蔽错误造成的,可以将crontab里的条目指定到&>/dev/null

1
2
3
4
5
6
7
8
[root@zen]# ll /var/spool/postfix/
total 56
drwx------. 2 postfix root 4096 Oct 31 2018 active
drwx------. 2 postfix root 4096 Oct 31 2018 bounce
drwx------. 2 postfix root 4096 Oct 31 2018 flush
drwx------. 2 postfix root 4096 Oct 31 2018 hold
drwx------. 2 postfix root 4096 Oct 31 2018 incoming
drwx-wx---. 2 postfix postdrop 4096 Oct 31 2018 maildrop

3、第三种可能是磁盘挂载的问题,根目录丢失之类的。

1
2
3
cat /etc/fstab
cat /etc/mtab
grep -v rootfs /proc/mounts # 修复

/etc/fstab 中的挂载点是开机加载的
/etc/mtab 中的挂载点是内核动态实时更新的
简单来说就是一次修复挂载的问题,但是我做完这几部操作,依旧没有用

https://zhang.ge/5107.html

解决

其实和另一台服务器有关,我们暂时把它称之为O[other],我们这台服务器为M[me],O上开启了NFS服务,Me服务器挂载了O上的磁盘。过了段时间,O服务器进行了重装,但是M服务器还在挂载O上的磁盘,此时other服务器没有开启NFS服务,但是Me服务器依旧挂载着O的磁盘。

于是执行ls / 命令的时候,me服务器加载目录,加载前几个好好的,在strace中可以看到,但加载到/mount_point的时候,就会向O服务器发送请求,[应该是某个NFSBug,明明O上的NFS Down了,这个M服务器还是在一直等待响应],于是看上去就像是me服务器卡死了,其实它是在等待NFS的响应。

采取的解决措施:重启,有尝试过umount卸载挂载点,但会卡住。


2020/6/22 看鸟哥Linux私房菜发现也有这方面的情况:

只要有用到文件系统, 那么整个目录树系统就会主动的去查询全部的挂载点。如果你的 NFS 服务器与客户端之间的联机因为网络问题, 或者是服务器端先关机了,却没有通知客户端,那么客户端只要动到文件系统的指令 (例如 df, ls, cp 等等) ,整个系统就会慢到爆!因为你必须要等到文件系统搜寻等待逾时后,系统才会饶了你!(鸟哥等过 df 指令 30 分钟过…)

参数 参数功能 预设参数
fg,bg 当执行挂载时,该挂载的行为会在前景 (fg) 还是在背景 (bg) 执行? 若在前景执行时,则 mount 会持续尝试挂载,直到成功或 time out 为止,若为背景执行, 则 mount 会在背景持续多次进行 mount ,而不会影响到前景的程序操作。 如果你的网络联机有点不稳定,或是服务器常常需要开关机,那建议使用 bg 比较妥当。 fg
soft,hard 如果是 hard 的情况,则当两者之间有任何一部主机脱机,则 RPC 会持续的呼叫,直到对方恢复联机为止。如果是 soft 的话,那 RPC 会在 time out 后『重复』呼叫,而非『持续』呼叫, 因此系统的延迟会比较不这么明显。同上,如果你的服务器可能开开关关,建议用 soft 喔! hard
intr 当你使用上头提到的 hard 方式挂载时,若加上 intr 这个参数, 则当 RPC 持续呼叫中,该次的呼叫是可以被中断的 (interrupted)。 没有
rsize,wsize 读出(rsize)与写入(wsize)的区块大小 (block size)。 这个设定值可以影响客户端与服务器端传输数据的缓冲记忆容量。一般来说, 如果在局域网络内 (LAN) ,并且客户端与服务器端都具有足够的内存,那这个值可以设定大一点, 比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力! 但要注意设定的值也不要太大,最好是达到网络能够传输的最大值为限。 rsize=1024 wsize=1024

for example:

1
$ mount -t nfs -o nosuid,noexec,nodev,rw  192.168.1.1:/data /tmp

最后补充下NFS无法挂载的原因分析:

  1. 客户端主机和IP网段不被允许使用, ‘mount to NFS x.x.x.x failed:system error connection refused’
  2. 服务器或客户端服务未启动,’mount to NFS x.x.x.x failed:RPC Error : programe not registered’
  3. 被防火墙拦截