一次离奇的设备无法写文件问题排查
缘起
最近在拉Android的源码做一些分析,还需要切到不同的分支上去。
而在晚上一次操作后,直接报了设备没有空间,写入失败的问题。
经过一番折腾才发现是分区的inode数满了导致的,因此把过程记录下(其实对于非常熟悉linux的人来讲,分分钟就能发现这个问题的)。
折腾过程
既然是不能写入,那果断df
下看看设备空间吧,结果神奇的发现还有200多G呢。。。
/dev/sda2 930G 652G 279G 71% /data
于是想是不是硬盘挂了,那试试touch
下呢,结果touch也是失败。。。。
touch: 无法创建'hello': 设备上没有空间
这些怀疑是分区坏了,那fsck
检查一下吧
# 卸载分区 sudo umount /dev/sda2 # fsck 检查 sudo fsck /dev/sda2
结果依然是正常的。。。
fsck,来自 util-linux 2.31.1[/sbin/fsck.ext4 (1) -- /data] fsck.ext4 /dev/sda2 e2fsck 1.44.1 (24-Mar-2018) /dev/sda2:没有问题***
绕了一圈看起来设备没有问题,就是写不进去,那是不是inode不够了呢,创建不了文件了。。
于是df -i
看了下,这下立马看到原因了,inode居然没有了。。。。
/dev/sda2 3.0M 3.0M 0 100% /data
这个盘我为了节省空间,在格式化时我设置了3M的inode数,也就是文件数,这样看来是源码的小文件非常多,把inode占满了,导致创建文件失败。。。。
于是删除一些不必要的文件就好啦,好像动态增大inode是不能操作的,以后在研究。
总结
这些基础的检查,不能只会那一种,比如df
命令,既要知道-h查看容量信息,也要会使用df -i
查看inode信息,这样在日常问题排查才能快一些~~
发表评论