首页 > 代码库 > iNode与Block
iNode与Block
1. inode和block
先介绍一下硬盘的整体结构。硬盘中包含多个硬盘盘片,硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头(Head),将这个磁头固定,使硬盘盘片旋转一周,所走轨迹就是磁道(Track)。硬盘内所有盘片的相同磁道号的集合成为磁柱(Cylinder)。每一磁道被划分成许多区域,每个区域叫一个扇区(Sector)。扇区是硬盘的最小存储物理量,一个扇区的存储容量大约是512字节(约0.5K)。
知道了硬盘的大体结构之后,再来谈谈怎么进行硬盘分区。进行硬盘分割的最小单位是磁柱,分割完之后自然就是格式化(format)。在Linux中进行格式化必须考虑Block与inode,Block还好理解,它是磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为n*512Bytes,例如4K。
Block是记录文件内容的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜索inode table找到这个文件的属性及数据存放地点,然后再查找数据存放的Block进而将数据取出。inode数量在一开始已被设定好,其设定方式通常是"硬盘大小/一个容量",这个容量比Block大一些较佳,例如刚才将Block设为4K,那么这个容量可以设为8K左右。所以,一块1GB的硬盘如果以8K大小划分它的inode数,则会有131072个inode。一个inode的大小为128Byte,这样,我们就可以清楚地知道,一个分区被格式化为一个文件系统之后,基本上它一定会有inode table与数据区域两大块,一个用来记录文件的属性信息与该文件存放的Block块,一个用来记录文件的内容。
2. 硬链接
---------------------------------
当系统要读取某个文件时,它会先读inode table,然后根据inode的信息到数据区域将数据取出备用。硬链接就是再建立一个inode链接到文件放置的Block块。也就是说,进行硬链接时,实际上您的文件内容不会改变,只是原来的inode与后来添加的inode均可指定到该文件存放的地点,因此,读取两个inode的结果都是读取同一个文件的内容。不过,这样一来就有个问题,因为inode会链接到Block块,而"目录"本身仅消耗inode,这样,硬链接就不能链接目录。所以,硬链接有两个最大的限制:
(1) 不能跨文件系统,因为不同的文件系统有不同的inode table;
(2) 不能链接目录。
3. 软链接(符号链接)
---------------------------------
相对于硬链接,符号链接比较好理解,基本上,它是再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。由于只是利用文件作为指向的动作,所以,当源文件被删除,符号链接的文件就打不开了,屏幕会显式"无法开启某文件"。
因此,硬链接比较安全,因为即某一个inode被删除,只要还有一个inode,该文件就能被找到。
总结
磁盘分区格式化为ext4文件系统后会生成一定数量的inode和block;
一个文件被创建后至少要占用一个inode和一个block;
用书来做比喻:
①首页的目录索引就相当于Inode;
②每一页就是一个Block;
③整本书就是一个磁盘或分区。
inode的知识:
(1)inode是索引节点,作用是存放文件的属性信息以及作为文件的索引,指向文件的实体->Block;
(2)inode是一块存储空间,Centos6非启动分区inode默认大小字节为256字节,Centos5为128字节;
(3)inode是一串数字,不同文件对应的inode(一串数字)在文件系统中是唯一的;
(4)inode相同的文件,互为硬链接的文件;
(5)查看inode总量与使用量情况的命令:df -i:
Block的知识:
(1)磁盘Blck读取数据是按block为单位读取的;
(2)ext3/ext4文件系统的Block存放的是文件的实际内容;
(3)一个文件可能占用多个block,每读取一个block就会消耗一次磁盘IO;
(4)如果要提升磁盘的性能的话,那么就要尽可能一次性地读取数据数量足够多;
(5)如果文件很小,也至少要占用一个block并且剩余空间不能被使用;如果block的大小为4k,那么存放1K的文件,剩余3K就浪费了;
(6)block并非越大越好,Block太大对于小文件的存放就会浪费磁盘空间;
例如:1000K的文件,Block为4K,占用250个Block;
Block为1K,占用1000个Block。
消耗磁盘IO分别为:1000次与250次,试问谁的效率更高?
(7)多数为大文件(大于16K)一般设置Block大一点;
多数为小文件(小于16K)一般设置Block小一点。
(8)Block设置也是磁盘化分区的时候:
mkfs.ext4 -b 2048 -1 2056 /dev/sdb
(9)文件较大时Block设置大一些会提升磁盘效率;
(10)block的大小有1k,2k,4k,其中引导分区等均为1k,其他普通分区为4k(centos6)。(视频等特殊业务可以调大block值)。
查看磁盘中inode及block的大小与数量:
本文出自 “墨” 博客,请务必保留此出处http://jinyudong.blog.51cto.com/10990408/1901336
iNode与Block