之前因为这个问题,在心中憋了好久。最近有时间了解到操作系统的概念,才一解心中疑惑。先上几个网上截图。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev01-root 75G 58G 14G 82% /
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 396M 292K 396M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 4.0K 2.0G 1% /run/shm
/dev/sda1 228M 149M 68M 69% /boot
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/dev01-root 4964352 4964352 0 100% /
udev 503779 440 503339 1% /dev
tmpfs 506183 353 505830 1% /run
none 506183 5 506178 1% /run/lock
none 506183 2 506181 1% /run/shm
/dev/sda1 124496 255 124241 1% /boot
WHAT?明明还有很大剩余空间,怎么就无法创建文件了?怎么理解?
因为inode(inode是OS为了管理磁盘而占用的额外的磁盘空间)与data block(data block是真正存储数据的磁盘块)不是一一对应的。在ext4系统中,两者的比例为1:4,即4个data block才会分配一个inode。这样的设置一般情况下是合理的,比如一般的文件都是几个M,或者大文件几个G,只耗费一个inode)。但是这种制度也会导致,如果你磁盘上放的都是不超过一个block(linux一个block为4K)的小文件,就会出现一个Inode只占用一个data block,极端情况下就会导致inode用完,但是data block还没有用完的情况(极端情况下,磁盘利用率只有40%)。
现在的Linux文件基本上都已经是ext4,但是这个也是基于ext2做的一个改进。
ext2的磁盘划分大概如下(注意super block和GDT在每个block group 都有,存在冗余),其中indoor table就是存放inode的地方:
请尊重原创。
看别人踩坑,铺平自己的路,欢迎关注猿界汪汪队;
参考资料:
http://www.csdn123.com/html/topnews201408/91/8991.htm
http://akaedu.github.io/book/ch29s02.html#id2857323