最近配置了一台大容量存储的机器用于信息库数据备份

—————————————————————————————————————-

类型:2U式储服务器

中央处理器:2颗Intel INTEL G6950 2.8G/双核/L3 3M/32NM;

系统内存:96GB DDR3 ECC 800/1066/1333MHz,支持3通道通讯模式, 提供 6个DIMM

系统硬盘:300G SSD(raid1 不支持热插拔);

存储硬盘:16*2000G 企业版 SATAII 7200RPM,3.5"硬盘;最多支16个3.5英寸硬盘热插拔安装位;磁盘阵列:Adaptec 16通道 阵列控模块(WZ51645),512M Cache,支持RAID 0、1、1E、5、5EE、6、10、50、60、JBOD.;

网络:2个10/100/1000M自适应以太网卡;

电源:760W 2+1服务器冗余电源;

装的是centos 6.5的系统 8个3T的存储盘做了 raid5(即raid5+1) 系统有效容量空间大概在22T。

—————————————————————————————————————-

准备开始对大容量存储做分区以及格式化挂载

由于MBR分区支持最大容量只有2T 如果超过2T的话 就要使用gpt分区

首先使用parted命令把硬盘转换成gpt分区

——————————————————————

如没有parted命令我需要安装,可以通过yum -y install parted命令安装[root@ ~]$ parted /dev/sdb

GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted)

由MBR转为GPT磁盘

—————————————————————————————————————-

(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted)

设定你要做的分区的type以及size(根据实际情况来) 0 ,-1表示起点容量和终点容量,其差就是分区容量,单位是M mkpart primary 0 -1 表示划分全部容量

—————————————————————————————————————-

(parted) mkpart primary 0 -1
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted)
(parted)
(parted) p
Model: Adaptec RAID 6 (scsi)
Disk /dev/sdb: 28.0TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 28.0TB 28.0TB primary
(parted) quit
Information: You may need to update /etc/fstab.

欧了 已经分区完毕 接下来开始格式化硬盘并挂载

Centos6 默认已经支持ext4 那就用ext4文件系统吧

———————————————————————————————————————–[root@ ~]$ mkfs.ext4 /dev/sdb1

mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: Size of device /dev/sdb1 too big to be expressed in 32 bits
using a blocksize of 4096.

按照报错提示 尝试更改blocksize 为4096 报错依旧。

查阅了相关资料 貌似ext4目前也還沒有真的支援16TB以上的单分区空間

不纠结了 决定直接改用xfs算了

开始安装xfs

—————————————————————————————[root@ ~]$ yum install kmod-xfs xfsprogs

[root@ ~]$ modprobe xfs //载入xfs文件系统模块

[root@ ~]$ lsmod |grep xfs //查看是否载入了xfs模块

用xfs格式化并挂载

—————————————————————————————[root@ ~]$ mkfs.xfs -f /dev/sdb1

mount /dev/sdb1 /data/

添加至fstab 让系统启动自动挂载

—————————————————————————————————————-[root@ ~]$ vi /etc/fstab //打开fstab

UUID=c3749d2d-08b5-45a3-9aa4-312b6161d471 /data xfs defaults 1 2 //添加挂载信息指定文件系统xfs (uuid 通过blkid /dev/sdb1 命令获取)

也可以写为

/dev/sdb1 /data xfs defaults 1 2

—————————————————————————————————————-

至此大功告成!

查看并下相关信息[root@ ~]$ df -lTh

Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb2 ext4 30G 5.2G 23G 19% /
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
/dev/sdb1 ext4 124M 31M 88M 26% /boot
/dev/sda1 xfs 26T 33M 26T 1% /data
补充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=value

This 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 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.

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