一次离奇的设备无法写文件问题排查

缘起

最近在拉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信息,这样在日常问题排查才能快一些~~


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。