解决磁盘有空间但创建不了文件-修复服务器文件系统
解决磁盘有空间但创建不了文件
实战场景:在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了80%,还有1.9G的剩余空间,但是无法创建新的文件。当时使用的是root用户。服务器没有被黑。
[root@GDH ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 10G 8.0G 1.9G 80% /
常识: 只要权限够,磁盘上有空间一定可以创建文件。 这个是错的。
排查:
[root@GDH ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3 5242880 5242880 0 100% /
#后来用df -i查看了一下/data所在的分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
查找原因:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案1:删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
解决方案2 : 在/data备份好一些文件,然后删除这些文件,释放一些inode,然后创建一个文件夹/data/cache2。在cache2下挂载一个新分区: sda4 ,下次写数据需要写到新分区cache2目录下。
inode分区完后,可以增加吗? 不可以。 inode总数是在格式化时定下来。
[root@GDH ~]# mkfs.ext4 -I 500000000000 /dev/sda1 #可以指定大小
参数:
[-i bytes-per-inode] [-I inode-size]
修复服务器文件系统
实战场景:公司服务器突然断电后,再次启动后,报如下错误。
解决方法:
输入root 密码
fsck -f -y /dev/sda1 #把引导分区文件系统修复一下 # 慎用,给领导说一声
fsck -f -y /dev/sda3 #把根分区文件系统修复一下 # 慎用,给领导说一声
reboot 重启
fsck参数:
-y 对所有问题都回答 “yes”
-f 即使文件系统标记为 clean 也强制进行检查