inode

※部分内容得先看前一篇:扇区与块(sectors,block)

文件的实际数据是写入block的,但文件的元数据呢(如创建者,大小,日期等,但除了文件名),这些都是写入一个叫inode的东西。简单点就是一个文件一个inode。

硬盘格式化时文件系统会将硬盘分成数据区和inode区(inode table),并且可以指定每多少KB分配一个inode之类的。

#  tune2fs -l /dev/cciss/c0d0p5
Inode count:              29097984
Block count:              29095715
Inode size:               128
可以看到一个inode大小为128byte,及inode和block的数量。

所以这里有一点要注意,如果你无法创建文件,可能是空间满了(block用光了),也可能是inode用光了。
特别是如果你有大堆小文件,再小的文件也要消耗inode。但如果你都是大文件,那inode太多其实也浪费了硬盘空间,毕竟一个inode也要128bye呢。
所以格式化时要先清楚自己主要存储的是什么样的文件,来权衡inode的数量。

# touch 1.txt
当建一个空文件,通过df -i可以发现可用inode数的确-1了。

# mkdir 1
当建一个文件夹时,通过df -i可以发现可用inode数也会-1。

# stat 1.txt
  File: `1.txt'
  Size: 0               Blocks: 0          IO Block: 4096
Device: 6805h/26629d    Inode: 27591990    Links: 1
可以发现,1个空文件不会占用block,但会占用inode。所以一个空文件的实际占用空间是128byte(一个inode的大小)。

再看一个非空文件(大小正好是一个block)
# stat 2.txt
  File: `2.txt'
  Size: 4096            Blocks: 8          IO Block: 4096
Device: 6805h/26629d    Inode: 27591991    Links: 1
注意这里的Blocks: 8不是指8个block,而是8个扇区(1个block)的意思!

再看一个非空文件(大小正好是一个block大小+1)
# stat 3.txt
  File: `3.txt'
  Size: 4097            Blocks: 16         IO Block: 4096
Device: 6805h/26629d    Inode: 27591995    Links: 1
可以发现,这个文件得占16个扇区(2个block)。

再来看一个硬链接
# touch 1.txt
# ln 1.txt 2.txt
# ls -i
2982861 1.txt  2982861 2.txt
可以发现inode号是一样的。

# ls -l
-rw-r--r-- 2 root dba 0  5月 22 11:26 1.txt
-rw-r--r-- 2 root dba 0  5月 22 11:26 2.txt

# stat 1.txt
  File: `1.txt'
  Size: 0               Blocks: 0          IO Block: 4096
Device: 6805h/26629d    Inode: 2982861     Links: 2

# stat 2.txt
  File: `2.txt'
  Size: 0               Blocks: 0          IO Block: 4096
Device: 6805h/26629d    Inode: 2982861     Links: 2
inode号一样,本质就是同一个文件,不过可以发现links数是2。
然后删掉任何一个文件,links数变为1。

再来看看软链接
# touch 1.txt
# ln -s 1.txt 2.txt
# ls -i
2982861 1.txt  2982862 2.txt
可以发现inode号是不一样的。

# ls -l
-rw-r--r-- 1 root dba 0  5月 22 11:28 1.txt
lrwxrwxrwx 1 root dba 5  5月 22 11:28 2.txt -> 1.txt
发现连文件大小都不一样,根本就是两个文件。links数也是各自为1。

最后,如果要读取一个文件比如/tmp/1.txt,简单来说流程是这样的:
打开/找到tmp对应的inode号,然后去inode table中根据这个inode号得到相关的块信息,然后读取,再打开tmp,查找1.txt得到相应的inode号……
PS:/的inode号是2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值