大多数当前流行的Linux文件系统,包括EXT3和EXT4,都将文件系统barrier作为一个增强的安全特性。它保护数据不被写入日记。但是,在许多情况下,我们并不清楚这些barrier是否有用。本文就为什么要在你的Linux系统上启用barrier做出了解释。

Linux日志和barrier功能

要理解barrier,你首先需要理解文件系统日志功能。常用的文件系统使用日志功能来保证文件系统的完整性。该功能背后的思很简单:在写入新的数据块到磁盘之前,会先将元数据写入日志。预先将元数据写入日志可以保证在写入真实数据前后一旦发生错误,日志功能能很容易地回滚到更改之前的状态。这个方法确保了不会发生文件系统崩溃的情况。

单独使用日志功能不能保证没有任何差错。现在的磁盘大都有大容量的缓存,数据不会立即写入到磁盘中,而是先写入到磁盘缓存中。到这一步,磁盘控制器就能更加高效地将其复制到磁盘中。这对性能来说是有好处的,但是对日志功能来说则相反。为了保证日志百分之百可靠,它必须绝对保证元数据在真实数据写入之前被预先写入。这就是我们要介绍文件系统barrier的原因。

我们很容易理解使用barrier的根本原因:barrier本身禁止在barrier之后写入数据,真实的数据块将在barrier被写入之前完全写入磁盘。使用barrier可以确保文件系统的完整性,因为barrier功能在EXT4文件系统中是默认启用的(除非你的操作系统更改了这个默认设置)。

检查Linux文件系统的barrier:启用还是禁用?

你可以通过/proc/mounts文件来监控文件系统barrier的当前状态;对于每一个挂载的文件系统,打开这个文件都能看到所有的挂载选项。如果你看到barrier=1,那么你的文件系统就正在使用barrier功能。下列信息是一个文件系统的例子:

/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0/dev/mapper/luks-3e67401f-44c6-4a27-a1bf-cdf0dcf45f65 /home ext4 rw,seclabel,noatime,barrier=1,data=ordered 0 0

文件系统barrier何时不工作?

Barrier的问题在于,它不能应用于所有条件下。如果设备映射器作为存储层的优先级使用,那么文件系统barrier就无法工作了,因为设备映射器不支持barrier。所以,哪怕你的文件系统默认支持barrier,还是无法在逻辑卷、软RAID或者多径磁盘上运行该功能(RED HAT和所有相关的Linux版本都将barrier作为默认选项)。

解决这个问题的方案之一就是避免使用设备映射器。所以在安装服务器时,你需要充分考虑配置选项。首先,你不该使用LVM安装服务器,而应该选择用传统的分区方式。接着,你不能使用和设备映射器配合工作的多径磁盘,它会在SAN上创建多个冗余径。某些情况下,SAN供应商会提供一个专有驱动器作为选择,但不是所有供应商都提供该选项。最好的办法是采用智能硬件。

使用barrier保护的风险之一是,在系统中断时,数据会留在缓存中,而永不会写入文件系统。一个简单的电池备份控制器可以避免这个问题。当服务器使用的这个控制器出故障了,磁盘控制器仍然能保证变更操作,这充分排除了barrier使用的需要。

使用barrier的另一个不利之处在于,你需要付出降低性能的代价。如果你需要顶级的性能,那么你可以用挂载选项-o barrier=0来关闭barrier功能,比如:mount /dev/sda2 -o barrier=0 /data。

文件系统barrier功能非常有用,但是不能和设备映射器配合工作。如果你需要使用这类设备,但是又想要保证文件系统完整性,那么你可以用电池备份磁盘控制器。如果你的硬件不支持这个,那么你只能避免使用设备映射器,这样才能用barrier功能来保障文件系统完整性。还有,如果你希望得到更好的系统性能,最好也不要开启barrier功能,它会降低系统运行速度。

barrier linux,Linux系统上启用barrier?相关推荐

  1. qt creator:一款能够在windows/linux/mac系统上开发c程序的IDE

    qt creator:一款能够在windows/linux/mac系统上开发c程序的IDE 下面是下载地址:http://download.qt.io/official_releases/qtcrea ...

  2. 如何在Linux/MacOS系统上安装Microsoft SQL Server

    转载来源:https://hub.docker.com/_/mssql-server-linux 如何在Linux/MacOS系统上安装Microsoft SQL Server 快速安装 # 首先在L ...

  3. linux桌面版mint安装,在Linux Mint系统上安装Spotify桌面客户端的方法

    本文介绍在Linux Mint系统上安装Spotify桌面客户端的方法. 简介 Spotify是世界上最大的音乐流媒体服务,每天都有成千上万人使用它来听音乐和消费播客,包括许多Linux用户,您可以通 ...

  4. linux命令行蜂鸣声太大,在Linux Gnome系统上关闭终端的硬件蜂鸣声的方法

    在Linux Gnome操作系统上发出哔哔的声真很烦人,尤其是在Linux终端上尝试使用TAB完成命令时,那么如何永久禁用此哔声呢,本文将给出在Linux发行版上关闭终端的硬件蜂鸣声的方法,可以在Ub ...

  5. linux 终端发出哔声,在Linux Gnome系统上关闭终端的硬件蜂鸣声的方法

    在Linux Gnome操作系统上发出哔哔的声真很烦人,尤其是在Linux终端上尝试使用TAB完成命令时,那么如何永久禁用此哔声呢,本文将给出在Linux发行版上关闭终端的硬件蜂鸣声的方法,可以在Ub ...

  6. linux7 epel,在CentOS 7/RHEL 7系统上启用EPEL的方法

    本文介绍在CentOS 7/6.RHEL 7/6操作系统上启用EPEL(Extra Packages for Enterprise Linux)的方法.默认情况下,它没有在CentOS或RHEL上设置 ...

  7. 闲谈IPv6-Anycast以及在Linux/Win7系统上的Anycast配置

    正则安安每晚每隔三小时必然哭闹,我索性也就不睡了,反正也睡不好,起来泡茶,喝酒,作文. 浙江温州皮鞋?湿,下雨☔️进水不会胖! 杭州,外面依然是寒雨夜,屋里也没开空调,我穿个夏天的短袖,旁边放一杯热茶 ...

  8. 在阿里云 Alibaba Cloud linux 2系统上安装 centos-release-scl

    发现在阿里云提供的Alibaba Cloud linux 2上安装Zabbix 5.0时报错, 运行:yum install centos-release-scl 结果得到:No package ce ...

  9. linux实际内存,为什么Red Hat Linux在系统上报告的可用内存少于实际可用内存?

    不要将空闲内存与未使用的内存混淆. unix世界中的空闲内存是一个物理内存页面,没有映射到它的逻辑数据.未使用的内存确实有一些数据映射到它,但它当前没有被正在运行的进程使用. % free -m to ...

最新文章

  1. java curl json_curl javaSSm框架中传入json数组的格式方法
  2. 高并发场景下更新数据库报错,记录一次 MySQL 死锁问题的解决
  3. Xamarin XAML语言教程控件模板的模板绑定
  4. 深度阅读之《Mastering Go》
  5. 磁盘的块大小(Block Size)和扇区大小(Sector Size)
  6. 【编译原理】第二章练习题
  7. 如何自己养卡,快速提升信用卡额度?
  8. 让 AI 为你写代码 - 体验 Github Copilot
  9. mybatis-id使用自增长的添加操作
  10. 如何让隐藏在大数据背后的价值发挥出来?
  11. 【HDU 6031]】 Innumerable Ancestors
  12. node js npm grunt安装,elasticsearch-head 5.X安装
  13. vue3图片对比组件
  14. 计算机网络的核心概念
  15. pacman 查询_pacman常用命令
  16. java-net-php-python-java门诊信息管理系统计算机毕业设计程序
  17. 【已解决】ModuleNotFoundError: No module named ‘snmp_cmds‘ 缺少snmp-cmds包
  18. 面试官:什么是BFC?BFC有什么特性?如何创建BFC?BFC有什么作用?
  19. 让TXT文本等其他任意格式的文件,不在IE中打开,而直接下载的方法
  20. 康福中国服务器位置,康福中国camfrog服务器管理命令有哪些?

热门文章

  1. MySQL主从配置的一些总结
  2. 09、HTLM中直接写get请求和模板标签分片功能
  3. 获取访问者的IP地址
  4. Shall的变量功能
  5. 使用DjangoUeditor将Ueditor移植到Django(BAE环境下)
  6. option等为空的选择
  7. [Google App Engine] Hello, world!
  8. golang 1.18 新增泛型 简介
  9. python文档生成工具 sphinx 简介
  10. linux 空文件 sed 不能写入数据