Posts tagged ‘modprobe’

MySQL机器配置标准

最近我们部门在整理MySQL的配置标准。主要包括:
一、MySQL使用percona需要新增和调整的参数
二、使用了fusion io和flashcache后,对linux操作系统的配置和内核参数配置
三、由于使用了两个网卡,raid卡和drac卡等相关硬件也需要确认配置
详细信息请参考http://www.hellodb.net/http://www.penglixun.com/的相关文章,敬请期待

Mysql配置:

amysql版本:

percona-custom-5.1.57-12.8 采用icc编译。

 

bmysql配置文件新增:

my.cnf在原有的增加percona,xtradb相关配置

# New

innodb_support_xa = OFF

transaction_isolation = READ-COMMITTED

# innodb plugin

innodb_read_io_threads = 1

innodb_write_io_threads = 16

innodb_io_capacity = 40000

innodb_file_format = barracuda

innodb_file_format_check = ON

innodb_strict_mode = 1

# Percona

innodb_page_size = 4K |4k ssd or 8k sas |16k 大字段,压缩表或者全表扫描应用。

innodb_extra_rsegments = 32 (根据并发情况可调整至64)

innodb_use_purge_thread = 8

innodb_stats_update_need_lock = 0

innodb_fast_checksum = 1

# percona For SSD

innodb_adaptive_checkpoint = 3

innodb_flush_neighbor_pages = 0

innodb_adaptive_flushing = false

 

# Hander Socket

#loose_handlersocket_port = 9998

#loose_handlersocket_port_wr = 9999

#loose_handlersocket_threads = 1

#loose_handlersocket_threads_wr = 1

#loose_handlersocket_readsize = 1M

#loose_handlersocket_rcvbuf = 4M

#loose_handlersocket_sndbuf = 4M

#open_files_limit = 65535

 

c、报警和状态监控增加:无

 

 

linux操作系配置:

杂项

asys 文件系统设置

echo ’16’ > /sys/block/sdb/queue/read_ahead_kb

echo ‘512’ > /sys/block/sdb/queue/nr_requests

echo ‘deadline’ > /sys/block/sdb/queue/scheduler

echo ’16’ > /sys/block/sdc/queue/read_ahead_kb

echo ‘512’ > /sys/block/sdc/queue/nr_requests

echo ‘deadline’ > /sys/block/sdc/queue/scheduler

Fusion io attach上来就是noop,其他参数不修改。

rc.local添加开机自动设置。

 

bulimit限制

打开文件限制。open file limit。目前是10240

max locked memory限制。Unlimited

 

c、大页使用以及内存swap

使用大页的系统,为连接和操作系统预留8G以上。

sysctl.conf增加swappness=0

 

d、报警和状态监控增加:无

 

xfs配置:

amkfs操作

mkfs.xfs -f -i size=512,attr=2 -l lazy-count=1 -d su=1M,sw=2 -L /data1 /dev/sdb1

mkfs.xfs -f -i size=512,attr=2 -l lazy-count=1 -d su=1M,sw=10 -L /data2 /dev/sdc1

不采用flashcache的机器su采用raid 条带大小一般为64k.

采用flashcachesu使用raid卡条带大小(1M)sw采用读的时候磁盘数(比如10块盘,raid 1+0则为10raid5则为9)

 

bmount文件系统

mount -o defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=512M,attr2,largeio,inode64,swalloc LABEL=/redo /redo

mount -o defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=8M,attr2,largeio,inode64,swalloc LABEL=/ibddata /ibddata

/redo中存放:binloginnodb_loginnodb_tslogsockrelaylogslowlog

/ibddata中存放数据文件:mydatatmpdir

mysql的主文件目录/data/mysqldata 采用链接的方式链接到/redo/ibddata目录的各个子目录。

 

csysctl配置

xfs sysctl参数采用默认值,下面列出目前的xfs参数列表及默认值

#sysctl fs.xfs

fs.xfs.stats_clear = 0

fs.xfs.filestream_centisecs = 3000

fs.xfs.inherit_nodefrag = 1

fs.xfs.rotorstep = 1

fs.xfs.inherit_nosymlinks = 0

fs.xfs.age_buffer_centisecs = 1500

fs.xfs.xfsbufd_centisecs = 100

fs.xfs.inherit_noatime = 1

fs.xfs.inherit_nodump = 1

fs.xfs.inherit_sync = 1

fs.xfs.xfssyncd_centisecs = 3000

fs.xfs.error_level = 3

fs.xfs.panic_mask = 0

fs.xfs.irix_symlink_mode = 0

fs.xfs.irix_sgid_inherit = 0

fs.xfs.restrict_chown = 1

 

d、报警和状态监控增加:无

 

flashcache 配置

a、创建cache以及开机载入cache

第一次创建:flashcache_create mysql_data_cache /dev/fioa /dev/sdc1

开机重启时载入:flashcache_load mysql_data_cache /dev/fioa /dev/sdc1

blocksize设置为4k,为默认值。该值采用和perconapage_size一致大小

 

bsysctl配置:

需要修改的四个参数:

dev.flashcache.fast_remove = 1

dev.flashcache.reclaim_policy = 1

dev.flashcache.dirty_thresh_pct = 90

dev.flashcache.cache_all = 1

这些参数直接在/etc/sysctl.conf中修改。

 

下面列出flashcache所有的sysctl参数:

#sysctl dev.flashcache

dev.flashcache.cache_all = 0

dev.flashcache.fast_remove = 1

dev.flashcache.reclaim_policy = 0

dev.flashcache.pid_expiry_secs = 60

dev.flashcache.max_pids = 100

dev.flashcache.do_pid_expiry = 0

dev.flashcache.max_clean_ios_set = 2

dev.flashcache.max_clean_ios_total = 4

dev.flashcache.dirty_thresh_pct = 90

 

以下三个是用于控制flashcache的命令,可以利用这三个参数

dev.flashcache.stop_sync = 0

dev.flashcache.do_sync = 0

dev.flashcache.zero_stats = 0

 

c、报警和状态监控:

命令:

dmsetup status mysql_data_cache

性能监控状态值为:

read hit percent(99) write hit percent(51) dirty write hit percent(44)

 

命令:

dmsetup table mysql_data_cache

性能监控状态值为:

cache percent(98) dirty percent(88)

上面五个百分比在一张图中展示。

 

fusion io 配置

a、内核参数调整:

use_workqueue=0

disable-msi=0

use_large_pcie_rx_buffer=1

其他内核模块参数值采用默认。

这些内核参数直接通过在/etc/modprobe.d/iomemory-vsl.conf配置中新增:

options iomemory-vsl use_workqueue=0

options iomemory-vsl disable-msi=0

options iomemory-vsl use_large_pcie_rx_buffer=1

来添加,文件中其他参数不予调整

 

列出flashcache所有内核参数如下:

parm: enable_ecc:int

parm: enable_two_plane:int

parm: disable_msi:int

parm: bypass_ecc:int

parm: force_soft_ecc:int

parm: bypass_whitening:int

parm: dont_whiten:int

parm: force_sw_read_completions:int

parm: ecc_correction_target_threshold:int

parm: ecc_correction_per_pad_retire:int

parm: ecc_correction_retire_threshold:int

parm: preallocate_memory:Cards for which to preallocate memory

(card <serial> serial number required) (array of charp)

parm: preallocate_mb:int

parm: expected_io_size:int

parm: iodrive_load_midprom:int

parm: iodrive_load_eb_map:int

parm: iodrive_scan_nv_data:int

parm: tcmd0:int

parm: tcmd1:int

parm: tread0:int

parm: tread1:int

parm: twrite0:int

parm: twrite1:int

parm: taddr0:int

parm: taddr1:int

parm: tintr_hw_wait:int

parm: iodrive_tread_hw_wait:int

parm: iodrive_tread_hw_wait_mlc:int

parm: iodrive_tstat_hw_wait:int

parm: iodrive_tstat_hw_wait_mlc:int

parm: iodrive_dma_delay:int

parm: use_large_pcie_rx_buffer:int

parm: use_workqueue:int

parm: default_gc_low_water:int

parm: default_gc_high_water:int

parm: always_rebuild_md:int

parm: auto_attach:int

parm: auto_attach_cache:int

parm: parallel_attach:int

parm: disable_groomer:int

parm: groomer_backoff:int

parm: use_new_io_sched:int

parm: max_md_blocks_per_device:int

parm: strict_sync:int

parm: use_command_timeouts:int

parm: fio_dont_init:int

parm: max_requests:int

parm: reduced_write_threshold:int

parm: capacity_warning_threshold:int

parm: read_only_threshold:int

parm: iodrive_read_retire_threshold:int

parm: disable_rle:int

parm: force_minimal_mode:int

parm: early_oom_threshold:int

parm: flashback_mode:int

parm: flashback_warning_as_failure:int

parm: fio_dev_wait_timeout_secs:int

parm: fio_dev_optimal_blk_size:int

parm: exclude_devices:PCI addresses of devices to exclude during initialization

(full <domain>:<bus>:<slot>.<func> address required) (array of charp)

parm: include_devices:Only initialize devices with these PCI addresses

(full <domain>:<bus>:<slot>.<func> address required) (precedence over exclude_devices) (array of charp)

parm: thermal_throttle_disable:int

parm: compaction_timeout_ms:int

parm: persistent_discard:int

parm: debug_DBGS_DIGEST:uint

parm: debug_DBGS_DMA:uint

parm: debug_DBGS_ECC:uint

parm: debug_DBGS_GENERAL:uint

parm: debug_DBGS_GROOM:uint

parm: debug_DBGS_INJECT:uint

parm: debug_DBGS_LOG_FILE:uint

parm: debug_DBGS_LRBTREE:uint

parm: debug_DBGS_MEDIA_ERROR:uint

parm: debug_DBGS_METADATA:uint

parm: debug_DBGS_PCIE:uint

parm: debug_DBGS_PTRIM:uint

parm: debug_DBGS_REQUEST:uint

parm: debug_DBGS_SHOW_INJECT:uint

parm: debug_FIND_BUG_DA:uint

parm: debug_FIO_PRINT_DANGLING:uint

parm: debug_FIO_PRINT_DIGEST:uint

parm: debug_FIO_PRINT_OBJECT:uint

parm: debug_PRINT_APPEND_FAILURES:uint

parm: debug_PRINT_APPEND_POINT:uint

parm: debug_PRINT_DEPACKETIZER:uint

parm: debug_PRINT_DMA:uint

parm: debug_PRINT_DMA_READ:uint

parm: debug_PRINT_DMA_WRITE:uint

parm: debug_PRINT_ECC_READ:uint

parm: debug_PRINT_ECC_WRITE:uint

parm: debug_PRINT_GROOM_RANGES:uint

parm: debug_PRINT_GROOM_SCAN:uint

parm: debug_PRINT_IDLE_GROOM:uint

parm: debug_PRINT_LEB_OPERATIONS:uint

parm: debug_PRINT_NAND_READ:uint

parm: debug_PRINT_NAND_READ_DETAILS:uint

parm: debug_PRINT_NAND_WRITE:uint

parm: debug_PRINT_PACKETIZER:uint

parm: debug_PRINT_PARITY_OPERATIONS:uint

parm: debug_PRINT_PROGRESS:uint

parm: debug_PRINT_REATTACH:uint

parm: debug_PRINT_REQUESTS:uint

parm: debug_PRINT_REQUEST_LIST:uint

parm: debug_PRINT_RESOURCES:uint

parm: debug_PRINT_SCAN:uint

parm: debug_PRINT_SCAN_ENTRIES:uint

 

b、报警和状态监控:

命令:

fio-status -fk -an /dev/fct0

报警监控:

media_status=Healthy。非healthy报警

 

性能监控:

logical_written_bytes=2664888862208

logical_read_bytes=171877629608448

physical_written_bytes=27684857382680

physical_read_bytes=223401928291768

监控每隔一段时间的变化量而不是这个总量。

 

命令:

fio-get-erase-count -s /dev/fct0

性能监控:

Max: 149

Avg: 79.00

监控活动的block刷写的最大次数以及平均刷写次数

 

fio-get-erase-count -b -s /dev/fct0

Total blocks: 29

监控坏块的个数。

 

硬件相配置

网卡配置:

a、网卡绑定和IP分配

两块网卡,两两交叉配置bond

机器上有几个MySQL实例配置几个IP。各个IP在两个bond0上平均分配

另外增加一个专门的主机监控IP

 

b、网卡中断

网卡中断不绑定到CPU上。

 

c、报警和状态监控:

主机监控IP主要用来做mysql_host主机监控

各个实例IP监控用来监控数据库状态。

 

Numactl配置:

a、单机单实例关闭numa。在内核中直接关闭

多实例情况下,numa内存分配采用bind

采用在my.cnf中的[mysqld_safe]组中添加

mysqld=mysqld_using_numactl

来使用多实例MySQL绑定CPU的目的。

这里列出numa可能的配置选项:

default bind interleave preferred

 

b、增加的报警和状态监控:无

 

 

raid配置:

a、条带大小

raid配置界面,提交装机申请的时候指定,

flashcache设置条带设置为1MSAS盘采用默认64K

 

bLSI raid卡设置

/opt/MegaRAID/MegaCli/MegaCli -LDSetProp -CachedBadBBU -Lall -aALL

/opt/MegaRAID/MegaCli/MegaCli -LDSetProp -DisDskCache -Lall -aALL

/opt/MegaRAID/MegaCli/MegaCli -LDSetProp -NORA -Lall -aALL

/opt/MegaRAID/MegaCli/MegaCli -LDSetProp -WB -Lall -aALL

/opt/MegaRAID/MegaCli/MegaCli -LDSetProp -Direct -Lall -aALL

设置电池断电的时候仍然使用cache;不使用磁盘cache;不进行预读;设置为write back;设置为direct

(hp的机器暂时不管)

增加报警和状态监控:无

 

drac卡配置:

运行local_hw_oob_init.sh脚本,使得机器可以通过ipmi连接屏幕并通过ipmitool工具重启。

报警和状态监控:无

 

linux内核模

/etc/sysconfig/modules新增脚本:

fio.modules flashcache.modules xfs.modules

使得xfs,iomemory-vsl,flashcache开机自动载入

 

附:

block size设置规则:

mySQLraid卡,目前我们需要设置:

aperconapage size(ssd机器为4k , sas则设为8k ,大字段,压缩表或者全表扫描应用则设置为16k)

bflash cacheflashcache_create创建cache时的 block size(默认为4k)

cfusion iofio-format block size(默认不使用fio-format重新格式化fusion io)

dxfssu条带大小(xfs建议自己指定su条带大小,默认值一般不好)

eraid卡条带大小(默认值64K)

 

block size的相互关系如下:

1percona page size根据机器类型和应用类型来设置。

2flashcache_createblock size指定为percona page size一样的大小

3、一般情况下不使用fio-format重新格式化fusion io

4raid卡条带大小flashcache机器设置条带设置为1M,如果是SAS盘采用默认64K

5xfssu条带大小跟raid卡条带大小一样,并且应该为percona page size的整数倍。sw采用读的时候磁盘数(比如10块盘,raid 1+0则为10raid5则为9)

 

 

 


may your success

fusion io使用入门

fuison io使用PCI插槽,大大缩短了到CPU和内存的路径,使得io访问效率大大提高。
这篇文档简单介绍
1、fusion io文档工具的下载
2、fusion io内核模块(驱动)的载入
3、fusion io工具的简介

一、fusion io文档工具的下载
fusion io的文档可以直接在 http://support.fusionio.com/ 注册用户并下载。
登录以后选择产品名称,产品版本,使用的操作系统。这里我们选择的是iodrive,r2.3.1,linux_rhel-5。
选择完成以后,可以有6种下载类:
1、文档:专门下载fusion io的相关文档。里面有fusion io卡的硬件安装手册,User guide等等。
2、驱动:你可以在这里下载fusion io的驱动程序。包括各个不同内核的驱动版本。
如果你的内核是定制过的,请自行下载源码包并重新编译
3、工具:这里包含了 fusion io的各个相关工具集。
4、iomanager:这个是针对fusion io的单机图形化管理界面。
如果你的机器不允许运行图形界面,这个你就不用关注了。
5、firmware:这里是fusion io最新的firmware。
fusion io号称升级firmware不仅能够修复bug还能够提升性能。所以尽量升级到最新的firmware吧。
6、SDK:这个是fuison io的开发包。
如果你不对fusion io做一些开发工作,这个你也无需关注。

二、fusion io内核模块(驱动)的载入
fusion io的内核模块下载以后,直接安装增加/lib/modules/2.6.18-164.el5/extra/fio/iomemory-vsl.ko文件。
直接用
modprobe -v iomemory-vsl
就可以载入对应的fusion io模块。
万一你的内核版本是定制过的,或者从网站上无法下载。请参考 http://hatemysql.com/2011/06/20/%E6%90%AD%E5%BB%BAxfs%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/ 中的模块编译。
iomemory-vsl默认是利用udevd开机自动加载的,具体的配置请参考user guide.

三、fusion io工具的简介。
fusion io的工具包括:
fio-attach fio-beacon.py fio-detach.py fio-format.py fio-ioctl-lock fio-snmp-agentx fio-su-to-root
fio-attach.py fio-bugreport fio-dump-mid fio-get-erase-count fio-pci-check fio-status fio-update-iodrive
fio-beacon fio-detach fio-format fio-govcfg fio-read-lebmap fio-status.py fio-write-lebmap

1、fio-attach 。
fusion io因为直接插在PCI插槽上的,是PCI设备(/dev/fct0),而我们使用它的时候希望是作为块设备(当作磁盘一样来使用),那么我们就需要把它attach为磁盘设备/dev/fioa。
这个工具就是这个用途的。
fio-attach /dev/fct0 可以直接把第一个fusion io设备挂载为 /dev/fioa磁盘设备。这样我们就可以很方便的使用/dev/fioa作为裸盘或者flashcache的缓存了。

2、fio-detach
和fio-attach相反。将块设备detach下来。、
fio-detach /dev/fct0
fusion io卡默认会自动attach。如果需要修改这个行为可以参考user guide,修改/etc/modprobe.d/iomemory-vsl.conf文件中的options iomemory-vsl auto_attach=0

3、fio-beacon
这个工具用于点亮fusion io上的三个LED灯。用于定位fusion io卡。这个工具需要先detach fusion io卡

4、fio-read-lebmap
用于读取fusion io的event log。它会导出一个xml文件,硬件坏块等相关信息都会记录到这个日志中。

5、fio-write-lebmap
清除或者写fusion io的event log

6、fio-bugreport
收集fusion io和机器的相关信息,用于提交bug。可以参考它收集的信息做一些报警和性能监控。

7、fio-dump-mid
dump fusion io卡的一些硬件信息
#fio-dump-mid /dev/fct0
[board]
date = 20110406
manufacturer = 004
name = Low-Profile ioDIMM Adapter
part_number = 00119200008
fpga_id = 0
id = 36406
#serial_number = 000000008e360132dc46001c6b642000
factory_firmware_version = 0

[product]
name = Fusion-io ioDrive 320GB
part_number = FS1-004-320-CS

8、fio-format
低格fusion io卡,会丢失掉fusion io卡上的信息。fusion io默认会保留20%的空间以备存储介质损坏,你如果想把保留的空间也用上,可以用这个。
低格fio-format你也可以用来指定fusion io的块大小。

9、 fio-get-erase-count
该工具用于获得fusion block刷写的量。因为SLC或者MLC设备寿命跟刷写的次数有关,这个可以用于观察fusion io的健康程度。
fio-get-erase-count -b /dev/fioa
可以获得fusion的坏块个数和坏块号。
fio-get-erase-count /dev/fioa
可以获得没坏的所有fusion io block的刷写数。
fio-get-erase-count -s /dev/fioa
可以获得所有fusion io block的统计信息。
这里fusion io block跟具体的fio-format的块大小无关。我们320G的 fusion io分了4093个块,每个块大概100M左右。具体这个block代表什么还真不知道。

10、fio-govcfg
#fio-govcfg /dev/fct0
Opening device ‘/dev/fct0’
Lifespan extender functionality is NOT supported on this device.
用于Lifespan extender functionality。我们的卡不支持。

11、fio-ioctl-lock
查询,锁住或者解锁 /etc/fct0 的ioctl锁。

12、fio-pci-check
检查pci bus tree的状态,特别是fusion io的。它会重设状态值,如果上次报错,那么第二次就不会报错了。
fio-pci-check -vvf
可以生成详细的bus tree信息。
目前还不知道怎么把它用于报警监控

13、fio-snmp-agentx
实现了fusion io SNMP的sub-agent。它通过agentx协议连接SNMP的master agent。

14、fio-su-to-root
su到root或者其他用户,来执行命令。

15、fio-update-iodrive
更新fusion io的固件版本(firmware)。
下载好fusion io的最新firmware以后,rpm安装会在/usr/share/fio/firmware/下产生iodrive_#.fff的firmware文件。
利用
fio-update-iodrive /usr/share/fio/firmware/iodrive_#.fff
就可以更新固件版本了

16、fio-status
这个命令比较重要,用于生成fusion io的状态信息。
fio-status -an
用于生成fusion io的详细信息
fio-status -fk -an
生成的fio-status -an format成了
physical_written_bytes=27684857382680
的形式。
fio-status的输出很多,比较重要的有
Media status: Healthy; Reserves: 100.00%, warn at 10.00%
Media status状态可能值为healthy, nearing wearout, write-reduced or read-only。其实只要不是healthy就可以报警了。
Logical bytes written : 2,665,512,646,144
Logical bytes read : 171,877,631,506,944
Physical bytes written: 30,415,610,387,704
Physical bytes read : 226,129,092,711,168
显示了fusion io逻辑上和物理上实际读写的量。

附fio-status的输出:
#fio-status -an

Found 1 ioDrive in this system
Fusion-io driver version: 2.3.1 build 123

Adapter: ioDrive
Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:36406
Low-Profile ioDIMM Adapter, PN:00119200008, Mfr:004, Date:20110406
External Power: NOT connected
Powerloss protection: available
PCIE Bus voltage: avg 12.15V, min 12.11V, max 12.17V
PCIE Bus current: avg 0.39A, max 1.31A
PCIE Bus power: avg 4.77W, max 15.85W
PCIE Power limit threshold: 24.75W
PCIE slot available power: 25.00W
Sufficient power available: Unknown
PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
Connected ioDimm module:
fct0: Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:28212

fct0 Attached as ‘fioa’ (block device)
Fusion-io ioDrive 320GB, Product Number:FS1-004-320-CS SN:28212
ioDIMM3 320GB MLC, PN:00279200404, Mfr:004, Date:20110406
Powerloss protection: protected
PCI:04:00.0, Slot Number:2
Vendor:1aed, Device:1005, Sub vendor:1aed, Sub device:1010
Firmware v5.0.7, rev 101971
320.00 GBytes block device size, 396 GBytes physical device size
Format: block, v300, 625,001,920 sectors, 512 bytes per sector
4096 blocks, 512 pages, 189056 bytes/page (25 pads, 2 planes, 4 banks)
Error correction: 11 bits per 240 bytes, expect 4 bits
NAND Mfr: Samsung
NAND Cell Type: MLC
Device ID: 0xd7
Page Size (bytes): 4096
Block Size (bytes): 524,288
Plane Size (bytes): 8,589,934,592
Spare bytes per page: 128
FPGA ID:0 Format UID:000000006e340132dc460042910a5000
PCIE slot available power: 25.00W
Sufficient power available: Unknown
PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
Internal temperature: 46.8 degC, max 48.7 degC
Board temperature: 40 degC
Internal voltage: avg 1.008V, max 1.008V
Aux voltage: avg 2.476V, max 2.476V
Media status: Healthy; Reserves: 100.00%, warn at 10.00%
Thresholds: write-reduced: 96.00%, read-only: 94.00%
Lifetime data volumes:
Logical bytes written : 2,665,512,646,144
Logical bytes read : 171,877,631,506,944
Physical bytes written: 30,415,610,387,704
Physical bytes read : 226,129,092,711,168
RAM usage:
Current: 406,177,792 bytes
Peak : 406,665,216 bytes
Persistent Driver Settings:
dual_plane = 1

xfs文件系统入门

xfs是一个优秀的文件系统。
我们这篇文章专门介绍怎么让自己的磁盘分区使用xfs文件系统。
简单涉及三个方面:
1、xfs内核模块的编译和载入。
2、mkfs.xfs在磁盘分区上构建xfs文件系统
3、将构建好的xfs文件系统mount到系统中来。
4、开机自动load xfs模块。

1、xfs内核模块载入
xfs在centos 5.4(内核2.6.18-164.el5)之前是需要自己编译,或者下载对应内核的xfs模块的。还好,我们使用的系统是5.4,支持xfs模块。
也就是说,我们只需要
modprobe -v xfs
就可以载入xfs内核模块。
万一有问题,有可能是你之前modprobe引入了其他的xfs,你可以考虑
depmod -a
试一下,然后再modprobe -v xfs。

下面的这一段为作者凑字数的,请忽略
那么对于之前的xfs模块,你可能需要自己去下载xfs的内核模块,linux要求内核模块和内核完全匹配,希望你能找到正确的内核模块。
这里提供一个下载地址:http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/kmod-xfs-0.4-2.x86_64.rpm
好吧,万一,你真的找不到,那就自己编译把,先下载源码包:
http://mirrors.ustc.edu.cn/centos/5/extras/SRPMS/xfs-kmod-0.4-2.src.rpm
然后直接用rpmbuild命令来编译:
rpmbuild -D ‘kversion uname -r‘ –rebuild xfs-kmod-0.4-2.src.rpm
正常的来说,应该不会有问题。
这里插一个小插曲,我在centos 5.4机器上编译这个的时候就出现了问题:
In file included from /usr/src/redhat/BUILD/xfs-kmod-0.4/_kmod_build_/xfs.h:20,
from /usr/src/redhat/BUILD/xfs-kmod-0.4/_kmod_build_/quota/xfs_dquot.c:18:
/usr/src/redhat/BUILD/xfs-kmod-0.4/_kmod_build_/linux-2.6/xfs_linux.h:120: error: redefinition of ‘set_buffer_unwritten’
include/linux/buffer_head.h:126: error: previous definition of ‘set_buffer_unwritten’ was here
这里是因为xfs在centos 5.4以后把set_buffer_unwritten的函数定义直接放到include/linux/buffer_head.h里面去了,因为它自己带了xfs,放在哪里它说了算,
当时找到http://bugs.centos.org/view.php?id=3364,他们还判断可能是bug,呵呵,不过下面的这个办法确实可以编译成功,
diff -up linux-2.6/xfs_linux.h.orig xfs-kmod-0.4/xfs/linux-2.6/xfs_linux.h
— linux-2.6/xfs_linux.h.orig 2006-09-20 06:42:06.000000000 +0300
+++ linux-2.6/xfs_linux.h 2009-05-21 11:06:19.000000000 +0300
@@ -117,7 +117,7 @@
* not need to distinguish – we use the BH_Delay flag for both
* delalloc and these ondisk-uninitialised buffers.
*/
-BUFFER_FNS(PrivateStart, unwritten);
+//BUFFER_FNS(PrivateStart, unwritten);

#define restricted_chown xfs_params.restrict_chown.val
#define irix_sgid_inherit xfs_params.sgid_inherit.val
去掉了BUFFER_FNS就忽略了相关定义。

2、mkfs.xfs在磁盘分区上构建xfs文件系统
内核模块载入以后,构建xfs文件系统还需要一些辅助的包。
简单列出如下:
wget http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/xfsdump-2.2.46-1.el5.centos.x86_64.rpm;
xfsdump对xfs文件系统备份和恢复的工具,主要包括/sbin/xfsdump和/sbin/xfsrestore工具。
wget http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/xfsprogs-2.9.4-1.el5.centos.x86_64.rpm;
wget http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/xfsprogs-devel-2.9.4-1.el5.centos.x86_64.rpm;
xfs的管理工具包,包含了很多xfs工具,以xfs_打头的,基本都在这个包里,本段最重要的工具mkfs.xfs就在这个包里
wget http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/dmapi-2.2.8-1.el5.centos.x86_64.rpm;
wget http://centos.ustc.edu.cn/centos/5/extras/x86_64/RPMS/dmapi-devel-2.2.8-1.el5.centos.x86_64.rpm
dmapi是向上层提供数据管理接口的软件包。
上面的两个-devel开发包都可以不安装,
安装好这些rpm包以后,我们就可以对我们的磁盘分区来构建xfs文件系统了。
对了,之前的对磁盘进行分区等相关操作:
parted -s /dev/sdb mklabel gpt
parted — /dev/sdb mkpart primary 1 -1
不在本文介绍范围,却是构建文件系统的必要条件。
好,构建xfs文件系统,正式开始:
mkfs.xfs -f -i size=512,attr=2 -l size=128m,lazy-count=1 -d su=64k,sw=5 -L /data /dev/sdb1
就这么一个命令。你可以指定日志,inode和数据文件,分配组的各个参数。
具体的参数请man mkfs.xfs来查看。比较重要的是数据文件的两个参数:su和sw

3、将构建好的xfs文件系统mount到系统中来。
构建好文件系统以后,我们就可以把它mount上来。
如果你需要每次系统启动的时候就将对应的磁盘分区mount上来,那么你需要修改/etc/fstab,
否则,你只需要执行mount命令就好。
我们这里采用的是/etc/fstab的方法。
LABEL=/data /data xfs defaults,noatime,nodiratime,noikeep,nobarrier,logbufs=8,logbsize=32k,allocsize=512M,attr2,largeio,inode64,swalloc 0 0
这个就是我们在/etc/fstab中的对应项。
LABEL=/data这个是因为我们在mkfs.xfs中使用了-L /data为/dev/sdb1打上了标签。
后面的mount选项比较重要,
具体的选项可以参见:http://www.netmite.com/android/mydroid/kernel/Documentation/filesystems/xfs.txt

4、开机自动load xfs模块。
这里xfs文件系统可以自动载入,但是,xfs内核模块怎么才能设置成每次开机的时候自动启动列。
就不卖关子了,在centos 5的系统中,有一个/etc/sysconfig/modules/文件夹,系统启动的时候,会自动扫描和执行该文件夹下的脚本。
对linux启动时执行些什么东西可以参考:http://linux.vbird.org/linux_basic/0510osloader.php
我们只需要在该目录下模拟原有的脚本编写一个同样的脚本,并且在脚本里写上 modprobe xfs就行了,我的脚本xfs.modules如下:
#cat /etc/sysconfig/modules/xfs.modules
#!/bin/sh
MODULES=”xfs”
[ -f /etc/sysconfig/xfs ] && . /etc/sysconfig/xfs
for i in $MODULES ; do
modprobe $i >/dev/null 2>&1
done
呵呵,不过/etc/sysconfig/xfs文件还没有。

may your success