如果向磁盘写入数据提示如下错误:No space left on device,是什么原因造成的?应该怎么解决?
下面来看一下具体分析:
磁盘被分区格式化为ext3/ext4文件系统后会生成一定数量的inode和block;
inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引;
ext3/ext4 文件系统的block存放的是文件的实际内容;
在ext3/ext4 文件系统下,每个block的大小一般有1k,2k,4k等。其中引导分区等为1k,其他普通分区为4k(CentOS6);
文件系统中Block的数量要大于inode的数量。
提示:No space left on device 可能的原因有2种:
1、block满了,大文件或日志文件不断写入导致的;
2、inode满了,当企业中小文件特别多(一般都是<4k)的时候容易发生这个问题;
通过df -h 查看磁盘空间,下面通过模拟环境来看一下,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]# touch str{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被占满