ext4的新特性-bigalloc
- 格式:pdf
- 大小:213.70 KB
- 文档页数:19


使⽤mkfs.ext4格式化⼤容量磁盘
使⽤mkfs.ext4默认参数格式化磁盘后,发现格式化时间特别长,并且格式化会占⽤磁盘很⼤的空间。
例如2TB的磁盘格式化会占⽤10分钟左右时间,并占⽤30G左右的磁盘空间。
究其原因,原来inode会占⽤磁盘空间,每个inode占⽤256b⼤⼩空间。
默认情况下,mkfs2fs会为每16kb的磁盘空间分配⼀个inode,
格式化时系统根据磁盘⼤⼩,计算可以保存的⽂件个数,进⽽为inode保留空间。
所以格式化⼤容量磁盘,系统会分配过多inode,为inode预留过多空间,导致磁盘空间占⽤特别⼤。
例如:⼀个2Tb的磁盘,格式化时会出现以下信息
mkfs.ext4 -n /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
122101760 inodes, 488378368 blocks
24418918 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
linux ext4 读写流程
Linux ext4 文件的读写流程涉及到多个环节,下面是详细的读写流程:
1. 用户层请求:用户层通过系统调用(如 write() 函数)发起文件读写请求。
2. 系统调用处理:内核接收到用户层的读写请求后,会进行相应的处理。例如,write() 函数会将数据缓冲到内核缓冲区,然后准备进行实际的磁盘写入。
3. 磁盘分配策略: ext4 文件系统根据磁盘空间情况和文件系统参数来决定如何分配新的数据块。这一过程涉及到 ext4 特定的磁盘分配策略,如扩展块分配(extend_block)和迁移块(move_block)等。
4. 文件系统元数据操作:内核会更新文件系统的元数据,如文件索引、文件大小、分配位图等,以反映磁盘上实际的数据变化。
5. 块设备操作:内核将数据从用户缓冲区拷贝到磁盘的 ext4 块设备上。这一过程涉及到块设备的 I/O 操作,如 block_write() 函数。
6. 同步和挂起:根据 ext4 文件系统的配置,内核可能会在写入数据后同步磁盘数据(如使用 fsync() 函数)并挂起其他 I/O 操作。
7. 完成操作:内核完成磁盘写入后,将返回结果给用户层,通知读写操作成功或失败。
读流程类似,只是在磁盘读取数据时,数据是从磁盘的 ext4 块设备读取到内核缓冲区,然后传递给用户层。
需要注意的是,这里的读写流程是一个简化版,实际操作可能会根据具体情况进行调整。ext4 文件系统的读写性能取决于多个因素,如磁盘性能、文件系统参数和内核优化等。在不同场景下,ext4 文件系统的读写流程可能会有所不同。
`resizepart`是Linux系统中用于调整分区大小的命令。这个命令在`resize2fs`和`resize4fs`中使用,主要用于调整ext2、ext3和ext4文件系统的分区大小。
`resizepart`命令的基本语法如下:
```
resizepart [选项] 分区号
```
其中,分区号是指需要调整的 分区 的 设备 名称。
这个命令的主要选项包括:
- `size`:新的分区大小,单位是字节。
- `resize`:调整分区的大小,这个选项是必须的。
- `move`:移动分区,这个选项需要指定新的开始位置,单位是块。
- `max`:最大的分区大小,单位是字节。
- `min`:最小的分区大小,单位是字节。
- `ignore`:忽略错误。
在使用`resizepart`命令时,需要注意的是:
- 在调整分区大小之前,需要确保没有在该分区上进行任何操作,以免造成数据丢失。
- 在调整分区大小之后,需要重新挂载该分区,以便可以使用新的分区大小。
- 如果新的分区大小超过了最大限制,那么`resizepart`命令将会报错。
- 如果新的分区大小小于最小限制,那么`resizepart`命令也会报错。
XFSVSEXT4
ext4是第四代扩展⽂件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的⽇志⽂件系统,是ext3⽂件系统的后继版本
ext4的⽂件系统容量达到1EB,⽽⽂件容量则达到16TB,这是⼀个⾮常⼤的数字了。对⼀般的台式机和服务器⽽⾔,这可能并不重要,但对
于⼤型磁盘阵列的⽤户⽽⾔,这就⾮常重要了。ext3⽬前只⽀持32000个⼦⽬录,⽽ext4取消了这⼀限制,理论上⽀持⽆限数量的⼦⽬录
xfs是⼀种⾮常优秀的⽇志⽂件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的⽂件系统技术
xfs是⼀个64位⽂件系统,最⼤⽀持8EB减1字节的单个⽂件系统,实际部署时取决于宿主操作系统的最⼤块限制。对于⼀个32位Linux系
统,⽂件和⽂件系统的⼤⼩会被限制在16TBxfs在很多⽅⾯确实做的⽐ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁
的细化做的也⽐较好
XFS 是由硅⾕图形公司 (Silicon Graphics, Inc.) 开发的⾼性能⽇志式⽂件系统。XFS 因其基于分配组 (allocation group) 的设计⽽特别擅长并
⾏ IO。当该⽂件系统跨越多个存储设备时,这种设计使得 IO 线程数、⽂件系统带宽、⽂件和⽂件系统⼤⼩都具有极⼤的可伸缩性。
XFS⼀种⾼性能的⽇志⽂件系统,最早于1993年,由为他们的⽽开发,是IRIX 5.3版的默认⽂件系统。2000年5⽉,以发布这套系统的源代
码,之后被移植到Linux 内核上。XFS 特别擅长处理⼤⽂件,同时提供平滑的。
PS:XFS只有在RHEL7/Centos7上⾯才能默认使⽤。
XFS Wiki:
XFS特性
主要特性包括以下⼏点:
数据完全性
采⽤XFS⽂件系统,当意想不到的宕机发⽣后,⾸先,由于⽂件系统开启了⽇志功能,所以你磁盘上的⽂件不再会意外宕机⽽遭到破坏了。