Linux通过node存储⽂件信息,但inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统⾃动
将硬盘分成两个区域。
1.
⼀个是数据区,存放⽂件数据;
2.
另⼀个是inode区(inode table),存放inode所包含的信息,描述文件的信息。
inode也是占内存的,⼀般是
128
字节或
256
字。如果一个磁盘中小文件比较多,每个小文件独立存放的话,会有很多inode,占用不小的内存,并且在对文件增删改查的时候,需要遍历的文件比较多,效率低。
所以将多个小文件合并存放,将多个小文件合并成一个文件存放。至于小文件是多大,可自行定义。
小文件存储原理:将多个小文件合并成一个文件,称为一个trunk。一个trunk的大小可自行设定。
一个trunk中存放多个小文件,每个小文件前有一个head描述小文件的信息。一个trunk结构如下:
,红色部分为小文件head。
如何在磁盘中查找小文件呢?当开启小文件存储后,上传成功后返回给客户端的fileid会发生变化。
文件名结构如下:
文件名中存放着文件所在的trunk ID、所占内存大小以及文件在trunk中的起始位置。可通过这些信息找到文件所在位置。
采用一个平衡树对trunk中的空闲位置进行管理。同样大小的空间采用链表进行连接,当有小文件加入的时候,通过平衡树搜索合适大小的位置,对于多余的空间,会再次作为空闲空间加入平衡树。