Linux运维笔记
我们一直在努力

在CentOS 6中创建XFS文件系统

XFS文件系统在CentOS 7上已经成为一个常用的,并且默认就自带的文件系统,他是一个读写效率和性能优异的文件系统,但是CentOS 6默认只有EXT4和EXT3。

什么是XFS:

 XFS,一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统。后来被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。在存储很大的环境下进行格式化操作,XFS文件系统的速度比ext3、ext4文件系统快了很多!而且据说XFS可以支持到100T,读写速度也优于其他文件系统。

 

1.安装XFS软件包:


在CentOS 6中已经自带有xfs的安装包了,我只需要安装 xfsprogs xfsdump 这2个包,如果yum源里没有,可以在CentOS的光盘里找下,我这里用的是CentOS 6.5的操作系统,是在阿里云ECS上的

[root@user1 /]# yum install -y xfsprogs xfsdump
Loaded plugins: security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package xfsdump.x86_64 0:3.0.4-4.el6_6.1 will be installed
---> Package xfsprogs.x86_64 0:3.1.1-20.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================
Package                 Arch                 Version                  Repository                 Size
=====================================================================================================
Installing:
 xfsdump                x86_64               3.0.4-4.el6_6.1          base                      252 k
 xfsprogs               x86_64               3.1.1-20.el6             base                      725 k

Transaction Summary
=====================================================================================================
Install     2 Package(s)

Total download size: 977 k
Installed size: 3.9 M
Downloading Packages:
(1/2): xfsdump-3.0.4-4.el6_6.1.x86_64.rpm                                     | 252 kB     00:00 
(2/2): xfsprogs-3.1.1-20.el6.x86_64.rpm                                       | 725 kB     00:00 
----------------------------------------------------------------------------------------------------
Total                                                                2.5 MB/s | 977 kB 00:00 
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : xfsprogs-3.1.1-20.el6.x86_64                                                     1/2 
  Installing : xfsdump-3.0.4-4.el6_6.1.x86_64                                                   2/2 
  Verifying  : xfsprogs-3.1.1-20.el6.x86_64                                                     1/2 
  Verifying  : xfsdump-3.0.4-4.el6_6.1.x86_64                                                   2/2

Installed:
xfsdump.x86_64 0:3.0.4-4.el6_6.1                xfsprogs.x86_64 0:3.1.1-20.el6

 

2.创建xfs文件分区并格式化:


[root@user1 /]# fdisk /dev/vdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n                 # 创建新分区
Command action
   e extended
   p primary partition (1-4)
p                                       # p是主分区,e是扩展分区
Partition number (1-4): 1               # 分区序号
First cylinder (1-208050, default 1):   # 磁盘开始柱面,可以不指定直接按回车,系统会自行寻找
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-208050, default 208050):  # 结束柱面也可以不用指定,交由系统去处理
Using default value 208050

Command (m for help): w                  # 保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@user1 /]# mkfs.xfs -f /dev/vdb1    # 创建xfs文件系统
meta-data=/dev/vdb1              isize=256   agcount=4, agsize=6553573 blks
         =                       sectsz=512  attr=2, projid32bit=0
data     =                       bsize=4096  blocks=26214292, imaxpct=25
         =                       sunit=0     swidth=0 blks
naming   =version 2              bsize=4096  ascii-ci=0
log      =internal log           bsize=4096  blocks=12799, version=2
         =                       sectsz=512  sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096  blocks=0, rtextents=0

 

3.挂载磁盘,并在fstab中添加开机自动挂载项:


mount -t xfs /dev/vdb1 /data   # 挂载设备到/data目录

修改fstabvim /etc/fstab 

# 挂载源        挂载点     文件系统 
/dev/vdb1      /data     xfs          defaults 0 0


# 查看挂载后的情况
[root@user1 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 10G 8.8G 54% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/vdb1 100G 33M 100G 1% /data    # 分区使用信息

[root@user1 /]# mount
/dev/vda1 on / type ext4 (rw,barrier=0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/vdb1 on /data type xfs (rw)    # 可以看到挂载的文件系统和权限

 

4.挂载测试:


测试:

写性能

[root@user1 /]# time dd if=/dev/zero of=/data/test.txt bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0841794 s, 1.2 GB/s

real	0m0.088s
user	0m0.001s
sys	0m0.084s

读性能

[root@user1 /]# time dd if=/data/test.txt of=/dev/null bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0269814 s, 3.9 GB/s

real   0m0.029s
user   0m0.001s
sys    0m0.028s

 

5.补充XFS优化:


# mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16/dev/sdb1

   -i size=512:默认的值是256KB,这里的设置是为了selinux的,这个设置针对inode size,selinux使用xfs的Extend Attribute,首先要写到inode中,如果容量不够(默认是256KB的时候就不够,刚刚多一点点),就写到block中,这会损失性能,当需要使用selinux的时候。这似乎对一般用户没什么作用,因为一般用户都不用selinux的,大家对linux系统的安全性还是挺信任的,不过,说实话,我不信任,况且RedHat 的FC已经默认配置了selinux,这很好。做了这个改动,方便以后我在系统中配置selinux而不担心性能的损失。 

   -l size=128m:注意是小写的m,不是大写的。默认值的是10m(bsize=4096 x blocks=2560)。这个值可以设置成32m(分区容量不小于250M)/64m(分区容量不小于500M)/128m(分区容量不小于700M),对于分区容量的限制,我这里列出的只是大概,最大可设128m。修改这个参数成128m,可以显著的提高xfs文件系统删除文件的速度,当然还有其它,如拷贝文件的速度。 这个参数需要大内存的支持,内存太少的机器大概不能设置这么高。(标准是什么?512M?1G?我不了解,所以我上面说要自己实际的测试一下。) 

   -l lazy-count=valueThis changes the method of logging various persistent counters  in  the  superblock.   Under metadata  intensive  workloads, these counters are updated and logged frequently enough that the superblock updates become a serialisation point in the  filesystem.  The  value  can  be either 0 or 1. 
       With  lazy-count=1,  the superblock is not modified or logged on every change of the persis-tent counters. Instead, enough information is kept in other parts of the  filesystem  to  be able  to  maintain  the  persistent  counter  values  without  needed  to  keep  them in the superblock.  This gives significant improvements in performance on some configurations.  The default  value  is  0 (off) so you must specify lazy-count=1 if you want to make use of this feature. 

   -d agcount=4 :默认值是根据容量自动设置的。可以设置成1/2/4/16等等,这个参数可以调节对CPU的占用率,值越小,占用率越低。这是理论上的,在我的机器上,agcount=1反而比agcount=2的cpu占用率还高,我想这是因为我的cpu是双核的原因吧。要注意,cpu的占用率低,那每一秒处理的数据量也会降低一些。我比较了agcount=2和4,发现还是4比较好。这样一来,这个参数的设置,就是需要自己去选择的了。 

mount的xfs选项(关键参数nobarrier):

vi /etc/fstab  

修改挂载选项  

/dev/sdb1               /data              xfs     defaults,noatime,nobarrier       0

重新挂载  

mount -o remount /data  

nobarrier 
        Many hardware RAID have a persistent write cache which preserves it across power failure, interface resets, system crashes, etc. Using write barriers in this instance is not recommended and will in fact lower performance. Therefore, it is recommended to turn off the barrier support and mount the filesystem with “nobarrier”. But take care about the hard disk write cache, which should be off. 

noatime 默认的方式下linux会把文件访问的时间atime做记录,这在绝大部分的场合都是没有必要的,如果遇到机器IO负载高或是CPU WAIT高的情况,可以尝试使用noatime,疗效好,见效快。

nobarrier挂载

XFS文件系统默认在挂载时启用“写入屏障”的支持。该特性会一个合适的时间冲刷下级存储设备的写回缓存,特别是在XFS做日志写入操作的时候。这个特性的初衷是保证文件系统的一致性,具体实现却因设备而异——不是所有的下级硬件都支持缓存冲刷请求。在带有电池供电缓存的硬件RAID控制器提供的逻辑设备上部署XFS文件系统时,这项特性可能导致明显的性能退化,因为文件系统的代码无法得知这种缓存是非易失性的。如果该控制器又实现了冲刷请求,数据将被不必要地频繁写入物理磁盘。为了防止这种问题,对于能够在断电或发生其它主机故障时保护缓存中数据的设备,应该以 nobarrier 选项挂载XFS文件系统。

 

   logbufs=value 
             Set  the number of in-memory log buffers.  Valid numbers range from 2-8 inclusive.  The default value is 8 buffers for filesystems with a blocksize of 64K, 4 buffers for filesystems with a blocksize of 32K,  3 buffers for filesystems with a blocksize of 16K, and 2 buffers for all other configurations.  Increasing the number of buffers may increase performance on some workloads at the cost of the memory used for  the additional log buffers and their associated control structures. 

   logbsize=value 
             Set  the  size  of each in-memory log buffer.  Valid sizes are 16384 (16K) and 32768 (32K).  The default value for machines with more than 32MB of memory is 32768,  machines  with  less  memory  use  16384  by default.

测试后发现读写性能还可以更好,测试方法同上。

五、XFS的优缺点

优点:

1、数据可恢复
采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。
2、快速传输
XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。笔者曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。
3、文件系统可扩展
XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大 小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。

XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

注:一般大于2T的分区用PARTED来分,而对于大于16T的分区虽然可以用PARTED来分,但使用EXT4分区格式来挂载时,也易出错。在这个时候把大于16T的单个分区用XFS来格式化,然后挂载是可以正常的。

4、I/0读写快

XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒

缺点:

XFS文件系统无法被收缩。
历史上XFS上的元数据操作曾比其它文件系统都慢,表现为在删除大量小文件时性能糟糕。该性能问题是被Red Hat的XFS开发者Dave Chinner在代码中定位到的。使用一个叫“延迟记录”的挂载选项可以成数量级地提升元数据操作的性能。该选项几乎把日志整个存在内存中。Linux内核主线版本2.6.35中作为一个试验性特性引入了这个补丁,在2.6.37中使它成为了一个稳定的特性,并计划在2.6.39中把它作为默认的日志记录方法。早期测试显示在有少量线程的环境中其性能接近EXT4,在大量线程的环境下超过了EXT4。

 

 

 

赞(0) 打赏

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址