Posts tagged ‘mount’

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

mount点fail以后影响rpm和check_raid

今天碰到一个比较奇怪的问题。我们的一台机器,突然跑rpm和check_raid会hang死。
另外一个同事跟进以后发现把这个系统中一个已经失效mount点强制umount掉以后就能够恢复。
感觉这个是两个问题啊。

库哥通过strace最终找到了具体的原因。
通过strace可以看到rpm运行的时候会首先检查整个文件系统的挂载点。
由于该挂载点的提供服务者已经下线,所以对应的节点访问会hang住。
也就导致了rpm无法继续运行下去。
目前还不能确认这种问题的影响面有多少。

另外一位大牛旺旺介绍了文件系统IO延时的文章。先记录下来,细细品味
Brendan Gregg 写的关于文件系统IO延时的系列文章,,虽然是基于Solaris系统做的,,对于Linux以及相关的系统也比较有参考意义,,有兴趣的同学可以了解下.
http://dtrace.org/blogs/brendan/2011/05/11/file-system-latency-part-1/
http://dtrace.org/blogs/brendan/2011/05/13/file-system-latency-part-2/
http://dtrace.org/blogs/brendan/2011/05/18/file-system-latency-part-3/
http://dtrace.org/blogs/brendan/2011/05/24/file-system-latency-part-4/

may your success