ext4的延迟分配特性(delalloc)保证文件在磁盘中的连续,提高文件的读写性能,但是却增加了丢数据的概率。

Hadoop和HBase中建议将延迟分配特性关闭。

可以使用下面的方法关闭延迟分配

  1. mount -t ext4 -o remount,nodelalloc /${dev} /${mnt};
  2. 编辑/etc/fstab中相关mount项,添加nodelalloc挂载参数

linux文件系统的一些概念:

superblock:记录文件系统的整体信息,包含inode/block的大小、总量、使用量、剩余量,以及文件系统的格式,文件系统挂载时间,最近一次数据写入时间,最近一次校验磁盘的时间等。

inode:记录文件的属性,一个文件占用一个inode,inode大小(ext2中)大约为128B,并记录文件数据所在的block号码,具体来说包含的信息如下:

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime表示inode上一次变动的时间,mtime表示文件内容上一次变动的时间,atime表示文件上一次打开的时间
  • 链接数:指有多少文件名指向这个inode
  • 文件数据的block号码
    在文件的block数量很大时,通常会采用多级block来记录block号码,这里采用Bitmap标记未使用的inode号码。

block:实际记录文件的内容,若文件太大,则会占用多个block,通常的block大小有1K,2K,4K三种,这里内核记录block信息的数据结构是Bitmap。

block group:硬盘分区上所有的block被聚在一起分成几个大的block group。其中每个block group中有多少个block是固定的。从上面的图可以看出来!每个block group都相对应一个group descriptor,每个group descriptor当中有几个重要的block指针,指向block group中的inode table、block bitmap和inode bitmap。

使用dumpe2fs命令可以查询某块设备上superblock和blockgroup的详细信息。

Hard Link:硬链接,硬链接文件和原始文件对应同一个inode号码,增加硬链接文件一般不改变磁盘的空间与inode数目,通常硬链接文件不能跨越文件系统建立,并且不能生成目录的链接文件。
  Symbolic Link:符号链接,创建一个新的文件,读取该文件时会让数据读取指向它link的文件的文件名,和原始文件的inode号码不同。  

扇区是硬件设备传送数据的基本单位,而块是VFS(虚拟文件系统)和文件系统传送数据的基本单位,一个块对应磁盘上一个或多个相邻的扇区,而VFS系统将其看成是一个单一的数据单元。   
扇区:为了达到可接受的性能,硬盘和类似的设备快速传送几个相邻字节的数据。块设备的每次数据传输操作都是作用于一组称为扇区的相邻字节。大部分磁盘设备中,一个扇区的大小是512字节。
块:它必须是扇区大小的整数倍,因为每个块必须包含整数个扇区。因此在80X86体系结构中,允许块的大小为512,1024,2048和4096字节。每个块在RAM中都有自己的缓冲区。

  Ext3与Ext4的比较:

1. 与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。 
  2. 更大的文件系统和更大的文件。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB的文件系统,以及 最大16TB 的文件。 
  3. 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。 
  4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。 
  5. 多块分配。 当写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。 
  6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。 
  7. 快速 fsck。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。 
  8. 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。 
  9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。 
  10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。 
  11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。 
  12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。 
  13. 默认启用 barrier。 磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。

转载于:https://www.cnblogs.com/lnlvinso/p/6822638.html

ext4 关闭延迟分配相关推荐

  1. [ext4]空间管理 - 分配机制

     在Ext4系统中,存在很多分配策略,比如预分配.多块分配.延迟分配等   Prealloc预分配 在ext4系统中,对于小文件和大文件的空间申请请求,都有不同的分配策略.对用小文件的空间请求,e ...

  2. Linux 内存的延迟分配

    Linux 内存的延迟分配 Linux内存的延迟分配就是在你未使用内存(均值物理内存)的时候,操作系统是不会真正的分配物理内存的, 比如 int *p = (int*)malloc(1024 * 10 ...

  3. java中延迟_Java中的延迟分配

    java中延迟 程序员本质上是懒惰的,而similis simili gaudet就像程序是懒惰的一样. 您听说过延迟加载吗? 还是懒惰的单身人士? (不过,我个人更喜欢单一麦芽版本.)如果使用Sca ...

  4. Java中的延迟分配

    程序员本来就是懒惰的,而similis simili gaudet就像程序是懒惰的一样. 您听说过延迟加载吗? 还是懒惰的单身人士? (不过,我个人更喜欢单一麦芽版本.)如果使用Scala或Kotli ...

  5. 19-windows10窗口关闭延迟解决

    1.右击电脑,选择属性. 2.选择高级系统设置---高级---性能---设置---视觉效果---调整为最佳性能(系统默认是第一个)---应用--一路确定

  6. 深入理解ext4等Linux文件系统

    了解 ext4 的历史,包括其与 ext3 和之前的其它文件系统之间的区别. 目前的大部分 Linux 文件系统都默认采用 ext4 文件系统,正如以前的 Linux 发行版默认使用 ext3.ext ...

  7. 了解Linux文件系统:ext4及更高版本

    大多数现代Linux发行版都默认使用ext4文件系统,就像以前的Linux发行版默认使用ext3,ext2和ext(如果您回过头来看)一样. 如果您是Linux或文件系统的新手,您可能想知道ext4带 ...

  8. linux 2.6.39 ext3 ext4 更快 tf,ext3,ext4,xfs,jfs,reiserfs和btrfs文件系统性能对比(转载)...

    转载自:http://www.cnblogs.com/tommyli/p/3201047.html#top http://blog.csdn.net/kickxxx/article/details/9 ...

  9. 深入理解 ext4 等 Linux 文件系统

    目前的大部分 Linux 文件系统都默认采用 ext4 文件系统,正如以前的 Linux 发行版默认使用 ext3.ext2 以及更久前的 ext. 对于不熟悉 Linux 或文件系统的朋友而言,你可 ...

最新文章

  1. 31页PPT概述:图神经网络表达能力有多强?
  2. Aqua Data Studio【下载】ads-windows-x64-16.0.5
  3. md5加密后怎么解密_手机怎么解密已加密的PDF?不会还有人不知道这招吧?
  4. JavaScript截断/切片/修剪掉字符串中的最后一个字符
  5. c语言里除法符号,c语言整除符号(c语言switch用法举例)
  6. abp框架java_ABP框架的体系结构及模块系统讲解
  7. 《A Survey on Aspect-Based Sentiment Analysis: Tasks, Methods, and Challenges》阅读笔记
  8. 使用Quagga测试Neutron BGP动态路由(by quqi99)
  9. 想学脑电,没有数据为什么不看这里?
  10. 【编程基础の基础】“#define _GNU_SOURCE“或是在编译时“-D _GNU_SOURCE“代表了什么?有什么用
  11. 5 个无聊 Python 程序,用 Python 整蛊你的朋友们吧
  12. html2canvas页面滚动时截图不全空白问题
  13. 2021计算机专业分数线,计算机专业好的大学排名及录取分数线(2021参考)
  14. 每个人表面上都想改变自己,但内心却都抗拒改变,这仅仅是人性的懒惰和矛盾?
  15. 程序员必备的6个辅助开发的软件神器
  16. python语言的标准库有哪些,python标准库函数有哪些
  17. 【CodeForces 1255D --- Feeding Chicken】
  18. 【C++】一个简单的模拟实现鼠标脚本精灵
  19. AndroidX86模拟器Genymotion的一些使用和另一款Andy模拟器
  20. miui13刷magisk面具root

热门文章

  1. 8_python基础—高级变量类型(字符串、列表、元组、字典、集合)
  2. python构建知识库_使用Mediawiki构建个人知识库
  3. python的常用语句_python常用语句
  4. bp神经网络matlab实例蚊子,bp神经网络matlab实例
  5. mac osx 下的 mysql_Mac OSX下的MySQL数据库升级
  6. python 二维列表从小到大_给Python开发者准备的110道面试题
  7. 运行报错Error starting ApplicationContext
  8. 【BZOJ3295】动态逆序对,CDQ分治/BIT套权值线段树
  9. 【BZOJ1206】【HNOI2005】虚拟内存,我也就能写写这种模拟题了
  10. 【codevs1690】开关灯,线段树练习