去年年底购入了渣雷的下载宝,用 ntfs 格式化后,性能一直不佳(后面发现是因为那个渣系统会索引文件),后用 ext4 格式,但是格式之后发现居然少了 15G 左右。
inode
inode是指在许多“类Unix文件系统”中的一种数据结构。每个inode保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、socket、管道, 等等)的元信息数据,但不包括数据内容或者文件名。(from: 维基百科)
通俗的说,inode 其实就是文件的索引值。
inode 也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode 区(inode table),存放 inode 所包含的信息。
每个 inode 节点的大小,一般是 128 字节或 256 字节。inode 节点的总数,在格式化时就给定,一般是每1KB或每2KB 就设置一个 inode。假定在一块 1GB 的硬盘中,每个 inode 节点的大小为 128 字节,每 1KB 就设置一个inode,那么 inode table 的大小就会达到 128MB,占整块硬盘的 12.8%。
一个 inode 大小现在默认值是 256 字节,默认是 16K 一个 inode。也就是默认 inode 会消耗 1/64 硬盘容量也就是 16GB。
正常系统装机,这样分配 inode 数量并没有什么问题,因为系统安装会有大量的小文件。但是移动硬盘、存储盘,往往存放的是大体积的小姐姐(大雾),所以不需要太多的 inode。
格式化硬盘
默认格式化:
1 | sudo mkfs.ext4 -n /dev/sdc1 // -n 表示模拟,如果不加就真的执行了 |
mkfs.ext4
有两个参数:
1 | -i bytes-per-inode // 多少个字节一个 inode |
默认 16k 相当于:
1 | sudo mkfs.ext4 -i 16384 -n /dev/sdc |
只要修改 -i
参数,就可以达到减少 inode 数量的目的。(比如 256 k 相当于 16384 * 16 = 262144)。
除了自定义选择参数,还有一些默认参数配置在/etc/mke2fs.conf
。
1 | small = { |
使用方式:
1 | sudo mkfs.ext4 -T largefile -n /dev/sdc |
参照: