• 由异常掉电问题---谈xfs文件系统


    本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!!

    目录结构

      一.相关知识

      二.问题提出

      三.处理方法

      四.最终结果

    一、相关知识

    1.xfs文件系统(概念性知识网上很多,自己去查喽)

      文件系统的定义:

        文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

      xfs文件系统:

        是一个日志型文件系统

        日志文件系统?加一个日志来记录文件系统的更改,即使在断电或者是操作系统崩溃的情况下也能保证文件系统一致性

        怎么保持的?

        要向磁盘写数据的时候,肯定要改变元数据,日志就要在这之前记录要怎么去改元数据的,当发生异常掉电或者文件系统崩溃后,进行修复时会检查文件系统的一致性,当出现不一致  时,可通过它来恢复。

                                                          (在数据下刷到磁盘之前,会先将对元数据的变动存放在日志中)

    2.VM参数

      1.Vm( virtual memory )是什么

        1).不同的linux 内核版本,VM的参数是不一样的,本文介绍的kernel 3.4.24-v64

        2).VM的相关参数位于/proc/sys/vm,用来优化虚拟内存的

        3)./proc这个目录?  Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而     不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,    是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

        4). /proc/sys包含了系统信息和内核参数

        5). /etc/sysctl.conf所有内核配置信息,可做永久性修改

      注:由于VM参数较多,感兴趣的话可参考我的另一篇随笔《vm参数简介》

    3.XFS文件系统参数

      1.这个网上内容比较少,我做如下几点介绍

        1)xfs文件系统各个参数只有在xfs文件系统被挂载到linux系统上时,我们才能获取到。

        2)xfs文件系统的参数位于/proc/sys/fs/xfs里,可以实时查看或调试各个参数

      注:XFS参数较多,感兴趣的话可以参考我的另一篇随笔《XFS参数简介》

    4.我的理解:VM参数和XFS参数是两套控制缓存的参数,他们应该具有以下的关系:

      vm参数与xfs参数影响的阶段不同:

      这里面涉及到的是linux的缓存机制,详细信息请参考《Linux 内核的文件 Cache 管理机制介绍》

     与《Linux 文件系统剖析》这里我做简单的介绍:linux在具体文件系统(ext3,xfs,fat32等等)之上,存在了虚拟文件系统。虚拟文件系统对具体文件系统进行了‘封装’,这也使得linux可以挂载多种文件系统,但只使用同一套的函数或者命令。对于文件系统的缓存,这里细分了page cache和buffer cache。他们都存在于内存中,但是page cache主要用于缓存文件的内容,用于频繁的读取,buffer cache则用于将数据下刷到磁盘。通过实验可以发现,当用dd写裸设备时,buffer cache增长迅速,当像文件系统里copy数据时,page cache增长迅速。具体请参考文档

    二、问题的提出

    写这篇文章是因为带有xfs文件系统的机器上,在有IO的情况下出现异常掉电时,文件系统会出现损坏(不一致,数据丢失等)。当对这个xfs文件进行修复时,文件系统为十几T的情况下,修复时间非常慢,我们最终也没有解决这个问题,估计现阶段除了使用PMBUS电池或者UPS,还没有更好的方法来解决xfs文件系统异常掉电问题。

    三、处理方法

    我们主要针对以下变量进行了测试:

    1.VM参数的dirty_radio与dirty_background_radio

    2.xfs参数的age_buffer_centisecs、xfsbufd_centisecs、xfssyncd_centisecs

    3.mkfs.xfs参数

    4.mount参数

    5.内存大小

    6.cpu多线程

    注:详细的测试结果和处理方法由于商业机密,不能泄露

    四、最终结果

    这里我给大家展示一下华为公司针对xfs修复的一个流程:

    结束:希望提出更多关于xfs文件系统修复相关的建议,谢谢!

  • 相关阅读:
    TCP/IP四层模型
    Java编程题
    大整数阶乘的运算(可以计算1000!) .
    sleep和wait的区别
    Javascript保留字(Javascript Reserved Words)
    WEBLOGIC 内存溢出 解决方案
    Java学习的30个目标以及系统架构师推荐的书
    笔记分析
    MySQL分区(Partition)功能试验
    Java线程:生产者消费者模型
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/4083582.html
Copyright © 2020-2023  润新知