文件备份 No space left on device错误
时间:2010-10-22 来源:jason_luo
今天查看backup.log文件,发现报了很多错误:
gzip: stdout: No space left on device
mysqldump: Got errno 32 on write
这种错误原因: 因为文件的inode耗尽。
Linux/Unix like OS 的文件系统中每个目录树中的节点并不是像 Windows 那样直接包含文件的具体信息,而只包含了文件名和 Inode number 。通过 Inode number 所找到对应于文件名的 Inode 节点中才真正记录了文件的大小/物理地址/所有者 /访问权限/时间戳/被硬链接的次数等实际的 metadata 。因此你可以在 Linux 系统中通过硬链接( hard link ) 的方式给某个文件创建无数个位于不同目录下的文件名,而实际的文件数据只需要一份拷贝。
但也正因为这种文件系统的结构,当你在 Linux 中进行 IO 操作的时候,需要的资源除了磁盘空间以外,还要有剩余的 Inode 才行。缺省情况下, Linux 在系统安装过程中按照1 个 Inode 对应 2k 磁盘空间来计算每个分区的最大 Inode 数。一旦文件系统创建之后,每个分区可用 Inode 数就无法进行动态调整。
我们的备份硬盘出现此类错误的原因是因为我们有大量的小图片和其他的小的文件,可能会耗尽Inode。
解决的办法也很简单:先查看一下当前各个磁盘Inode使用的情况。
- ##[root@svr1 disk2]# df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/mapper/VolGroup00-LogVol00
- 37781504 1024057 36757447 3% /
- /dev/sda1 26104 62 26042 1% /boot
- tmpfs 189160 1 189159 1% /dev/shm
- /dev/sdc5 122109952 12918904 109191048 11% /disk2
- /dev/sdb5 122109952 616980 121492972 1% /disk3
- mfs#192.168.100.15:9421
- 1001869388 863377 1001006011 1% /gmfs
然后呢,想办法减少小文件数量。使文件系统的 Inode释放出来,就ok了。