文件系统中最大可容纳的文件个数是有限的,那受何限制呢?
linux文件系统分为inode区和block区,其中inode用来存储文件的属性信息,
block区用来存储文件的实际内容。
所以实际影响文件系统中inode个数的因素有两个:
一个是文件系统inode的数量;
一个是block区的大小。
sh-3.2# touch /tmp/ooxx
sh-3.2# ls -lh /tmp/ooxx
-rw-r--r-- 1 root root 0 Dec 17 02:33 /tmp/ooxx
sh-3.2# du -h /tmp/ooxx
0 /tmp/ooxx
sh-3.2#
sh-3.2# echo 0 > /tmp/ooxx
sh-3.2# ls -lh /tmp/ooxx
-rw-r--r-- 1 root root 2 Dec 17 02:34 /tmp/ooxx
sh-3.2# du -h /tmp/ooxx
4.0K /tmp/ooxx
sh-3.2#
通过上述实验,发现文件内容可以为空。
如果文件内容为空的话,那么这个文件也不会去占用block空间。
如果实际文件内容不为空,那么实际文件内容大小和该文件所占用的block大小是不同的概念。
这从ls命令和du命令的执行结果就可以看到,
虽然文件内容只有两个两个字节长度,但是仍然要占用4K字节的block空间。
这说明一个block的大小是4K?
如何确认block大小?
stat命令可以用来查看block大小。
sh-3.2# stat -f /mnt/usb/sda1/
File: "/mnt/usb/sda1/"
ID: 80100000000 Namelen: 1530 Type: msdos
Block size: 4096
Blocks: Total: 975342 Free: 344921 Available: 344921
Inodes: Total: 0 Free: 0
sh-3.2#
另一种方法是在已知分区大小的提前下,使用df命令确认block的个数,
也可以确认block大小。
sh-3.2# df /mnt/usb/sda1/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 3901368 2521680 1379688 65% /tmp/mnt/usb/sda1
sh-3.2#
默认情况下使用df命令用来显示block的使用状况。
如果想要查看inode的使用状况,可以使用df命令并制定-i选项。
sh-3.2# df -i /mnt/usb/sda1/
Filesystem Inodes Used Available Use% Mounted on
/dev/sda1 0 0 0 0% /tmp/mnt/usb/sda1
sh-3.2#
sh-3.2# df /mnt/usb/sda1/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 3901368 2521684 1379684 65% /tmp/mnt/usb/sda1
sh-3.2#
sh-3.2# df -B 4096 /mnt/usb/sda1/
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 975342 630421 344921 65% /tmp/mnt/usb/sda1
sh-3.2#
为什么/mnt/usb/sda1的inode个数为0?
这是因为它不是ext2类型文件系统吗?
上面讲了一个文件系统实际可以存储的文件数会受到inode数量以及block数量影响的。
所以会有如下两种情况:
1. 文件系统inode已经用完,但是block仍然有大量剩余,这通常是因为文件大小小的缘故;
2. 文件系统block已经用完,但是inode还有大量剩余,这通常是因为文件大小太大的缘故。
针对这两种情况都会造成文件系统空间浪费的现象。
所以如果用户有特别的需求,都可以重新配置自己的文件系统。
linux下有mkfs命令,通过指定合适的参数来配置自己需要的文件系统。