首页 > 代码库 > No space left on device

No space left on device

如果向磁盘写入数据提示如下错误:No space left on device,通过df -h 查看磁盘空间,发现没满,请问可能原因是什么?请问企业应用中什么情况下会导致这个问题发生?


这个问题是由于磁盘inode被全部占用导致的。当企业中小文件特别多(一般都是<4k)的时候容易发生这个问题。磁盘空间是否满了,是由两项参数决定的第一个是inode是否满了第二个block是否满了。


下面来看一下具体分析:

  1. 磁盘被分区格式化为ext3/ext4文件系统后会生成一定数量的inode和block;

  2. inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引;

  3. ext3/ext4 文件系统的block存放的是文件的实际内容;

  4. 在ext3/ext4 文件系统下,每个block的大小一般有1k,2k,4k等。其中引导分区等为1k,其他普通分区为4k(CentOS6);

  5. 文件系统中Block的数量要大于inode的数量。


下面通过模拟环境来看一下,Block和inode分别被占满的情况


  • 模拟环境(VMware12Pro+CentOS6.8 2.6.32-642.el6.x86_64)

mkdir -p /app/logs
dd if=/dev/zero of=/dev/sdc bs=8k count=10
ls -l /dev/sdc
mkfs.ext4 /dev/sdc
tune2fs -c -1 /dev/sdc
mount -o loop /dev/sdc /app/logs/
[root@KLeth0 logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.9G 4.7G  29% /
tmpfs           491M     0 491M   0% /dev/shm
/dev/sda1       190M   33M 147M  19% /boot
/dev/sdc         73K 2.0K   67K   3% /app/logs

磁盘Block被占满的情况

[root@KLeth0 ~]# cp /bin/ls /app/logs/

cp: writing `/app/logs/ls‘: No space left on device

[root@KLeth0 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.9G  1.9G 4.7G  29% /

tmpfs           491M     0 491M   0% /dev/shm

/dev/sda1       190M   33M 147M  19% /boot

/dev/sdc         73K  70K     0 100% /app/logs

磁盘inode被占满的情况

[root@KLeth0 ~]# cd /app/logs/

[root@KLeth0 logs]# touchstr{1..10}

touch: cannot touch `str5‘: No space left on device

touch: cannot touch `str6‘: No space left on device

touch: cannot touch `str7‘: No space left on device

touch: cannot touch `str8‘: No space left on device

touch: cannot touch `str9‘: No space left on device

touch: cannot touch `str10‘: No space left ondevice

[root@KLeth0 logs]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.9G  1.9G 4.7G  29% /

tmpfs           491M     0 491M   0% /dev/shm

/dev/sda1       190M   33M 147M  19% /boot

/dev/sdc         73K 2.0K   67K   3% /app/logs     #磁盘空间未满

[root@KLeth0 logs]# df -i

Filesystem     InodesIUsed  IFree IUse% Mounted on

/dev/sda3      462384 58823403561   13% /

tmpfs          125517     1 125516   1% /dev/shm

/dev/sda1       51200    38 51162    1% /boot

/dev/sdc           16   16      0  100% /app/logs      #磁盘inode被占满


No space left on device