表3-1 标准目录与内容
目录 变名 内容
/ root目录,包含IRIX核心(unix)
/dev 设备文件包括:磁盘、磁带、CD-ROM
/etc 包含重要的系统配置文件和维护命令
/etc/config /var/config 系统配置文件
/lib 重要的编译器库文件
/sbin 最小可操作系统的命令
/tmp 临时文件
/usr 在某些文件系统中,一个文件系统的安装
点
/usr/bin /bin 命令
/usr/etc 重要的系统配置文件和维护命令
/usr/include C语言的头文件
/usr/people 用户的主目录
/usr/share/catman 帮助文件
/var 系统文件
/var/adm /usr/adm 系统日志文件
/var/mail /usr/mail 邮件
2) 一般文件系统的概念:
文件系统是指一种数据结构,它是在一个磁盘分区中被组织起来的目录和文件。一个
磁盘分区只能有一种文件系统。
文件是由一维数组组成,文件的存储结构叫inodes,一个文件不能属于两种文件系统。
目录是一个容器包含文件和子目录。一个目录不能属于两种文件系统。
任何一个文件系统的起始点是一个没有名字的目录,它作为Root文件系统。通常,Root
文件系统的目录用"/"表示。
A. Inodes:
每个文件的信息存储在inodes中,Inodes是index
node的缩写。一个inode包含以下信息:文件类型、文件的访问权限、文件大小、文件的所以者、文件的修改日期,它不包含文件名和目录。
B.文件类型:
文件系统包含以下文件类型:普通文件、目录、字符设备、块设备、链接文件。
2、IRIX文件系统类型:
1) XFS文件系统:
XFS文件系统是一种新的IRIX文件系统,它需要32M内存。
2) EFS文件系统:
EFS文件系统是IRIX文件系统早期的版本,它已不再使用。
3) NFS文件系统:
NFS文件系统是网络文件系统的缩写。在IRIX系统中,NFS系统是可选的软件。一
个主机输出NFS文件系统,网络上的其它主机通过网络可以访问被输出的NFS文件
系统。
4) /proc文件系统:
/proc文件系统为监控程序提供接口,它又叫调试文件系统。/proc文件系统安装在/proc
目录下,链接到/debug目录。/proc文件不消耗磁盘空间,所以使用df命令不会显示/proc
文件系统,它们不能被删除或移动。
3、生成文件系统:
使用mkfs_xfs、mkfs_efs命令将磁盘分区变成XFS或EFS文件系统。
例如:将dks0d2s7分区变成XFS文件系统的最简单的方法:
#mkfs_xfs /dev/rdsk/des0d2s7
详细信息参阅mkfs_xfs帮助信息
4、文件系统的安装和卸载:
文件系统必须被安装后才能使用。当文件系统被安装时,用户应给出文件系统的设备
名和目录名,目录名叫安装点。当用户安装文件系统到安装目录后,安装目录中原来
的文件不能被使用,直到卸载文件系统。
Root文件系统不象其它的文件系统,它是在系统启动时被安装,它不能被卸载。系统
管理员在维护系统时可以在最小系统状态下,卸载Root和Usr文件系统。
--------------------------
安装文件系统的方法:
--------------------------
1) 手工安装:
使用mount命令手工安装文件系统。基本格式:
#mount device_file mount_point_directory
#mount host:direcotry mount_point_directory
device_file是块设备文件;host:directory是远程主机和目录,它必须是远程主机已经使
用export命令输出;munt_point_directory是安装点,它必须在mount使用命令前已经
存在。
如果用户使用mount命令忽略device_file或mount_point_directory参数,mount命令检
测/etc/fstab文件找到错过的参数。
例如:手工安装文件系统:
#mount /dev/dsk/dks0d1s6 /usr
2) 自动安装:
/etc/fstab文件包含有关每个文件系统和swap分区的信息,当系统启动时,这些文件系
统被自动安装。/proc文件系统没有被列在/etc/fstab文件中,因为它不能使用mount命
令安装。
例如:在/etc/fstab文件中出现以下内容,系统每次启动将/dev/dsk/dks0d3s2自动安装
到/aa目录下。
/dev/dsk/dks0d3s2 /aa xfs rw,raw=/dev/rdsk/dks0d3s2 0 0
/dev/dsk/dks0d3s2:块设备文件。
/aa:安装点。
Xfs:文件系统类型。
Rw,raw=:可选项。"rw"表示文件系统可"读"、"写";"raw="表示给文件系统raw
设备文件名。
0 0:表示dump周期的频率和fsck通过的优先权。
系统磁盘的swap分区没有被列在/etc/fstab文件中,但是额外的swap分区必须被写进
/etc/fstab中。
--------------------------
卸载文件系统的方法:
--------------------------
当系统关闭时,文件系统被自动卸载。使用umount命令可以手工卸载文件系统,手
工卸载有三种基本格式:
A. umount mount_point_directory
B. umount device_file
C. umount host:directory
5、文件系统的维护:
为了维护文件系统,系统管理员需要定期执行以下工作:
A. 监视磁盘空间的大小。
B. 检测文件系统的运行状况。
C. 备份。
1) 管理磁盘空间:
通常,工作站和服务器的硬盘上有一些不用的文件,这极大的浪费了硬盘空间。作为
系统管理员应提高硬盘的利用率。
A. 显示硬盘的利用率:
管理员可以使用df、du命令快速检查硬盘的使用率。
#df
Filesystem Type blocks use avail %use Mounted on
/dev/root xfs 7827864 3309456 4518408 43 /
/dev/dsk/dks0d3s2 xfs 17768640 189104 17579536 2 /aa
#du -s /
5233925 /
du -s显示指定目录的文件大小。
B. 拷贝XFS文件系统:
使用xfs-copy可以拷贝XFS文件系统,用户可以将一个或几个文件系统拷贝到磁盘分
区或文件中。
#xfs_copy /dev/dsk/dks0d3s7 /dev/dsk/dks5d2s7
C. XFS文件系统的检测和修复:
管理员使用xfs_check、
xfs_repair命令检查XFS文件系统运行状态。xfs_repair命令
可以修复文件系统的某些问题。
在运行xfs_check
、xfs_repair之前,被检测的文件系统必须被卸载,否则文件系统会
崩溃。
xfs_repair -n命令比xfs_check检测的更完全。
# xfs_repair -n device
device是包含XFS文件系统的磁盘分区或logicl volume。
当xfs_repair没有发现问题,系统会输出下列信息:
Phase 1 - find and verify superblock...
Phase 2 - scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
.................................................................
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
- traversing filesystem starting at / ...
- traversal finished ...
- traversing all unattached subtrees ...
- traversals finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.
当xfs_repair发现文件系统问题时,可以使用xfs_repair
device命令修复。
#xfs_check -n
如果没有发现问题,xfs_check命令不返回任何信息。
==================================================
Swap
===================================================
IRIX操作系统使用磁盘的一部分作为swap空间,用于保存部分物理内存存放不
下用户程序。
查看Swap空间:
使用swap命令查看swap 空间的使用情况。
# swap -l
lswap path dev pri swaplo blocks free maxswap vswap
1 /dev/swap
0,166 0 0 1048576 1048576 1048576 0
管理员发现swap空间用完,有两种方法可以解决:增加物理内存;加入更多的
swap空间。增加swap空间不会改善大程序的性能,但可以保证程序的运行。
由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失。例如如果出现这种情况:如果当你处理一个在linux的ext2文件系统上的文档,突然机器崩溃会出现什么情况?
有这几种可能:
*当你保存文件以后,系统崩溃。这是最好的情况,你不会丢失任何信息。只需要重新启动计算机然后继续工作。
*在你保存文件之前系统崩溃。你会丢失你所有的工作内容,但是老版本的文档还会存在。
*当正在将保存的文档写入磁盘时系统崩溃。这是最糟的情况:新版文件覆盖了旧版本的文件。这样磁盘上只剩下一个部分新部分旧的文件。如果文件是二进制文件那么就会出现不能打开文件的情况,因为其文件格式和应用所期待的不同。
在最后这种情况下,如果系统崩溃是发生在驱动器正在写入元数据时,那么情况可能更糟。这时候就是文件系统发生了损坏,你可能会丢失整个目录或者整个磁盘分区的数据。
linux标准文件系统(ext2fs)在重新启动时会通过调用文件扫描工具fsck试图恢复损坏的元数据信息。由于ext2文件系统保存有冗余的关键元数据信息的备份,因此一般来说不大可能出现数据完全丢失。系统会计算出被损坏的数据的位置,然后或者是通过恢复冗余的元数据信息,或者是直接删除被损坏或是元数据信息损毁的文件。
很明显,要检测的文件系统越大,检测过程费时就越长。对于有几十个G大小的分区,可能会花费很长时间来进行检测。由于Linux开始用于大型服务器中越来越重要的应用,因此就越来越不能容忍长时间的当机时间。这就需要更复杂和精巧的文件系统来替代ext2。
因此就出现了日志式文件系统(journalling
filesystems)来满足这样的需求。
什么是日志式文件系统
这里仅仅对日志式文件系统进行简单的说明。如果需要更深入的信息请参考文章日志式文件系统,或者是日志式文件系统介绍。
大多数现代文件系统都使用了来自于数据库系统中为了提高崩溃恢复能力而开发的日志技术。磁盘事务在被真正写入到磁盘的最终位置以前首先按照顺序方式写入磁盘中日志区(或是log区)的特定位置。
根据日志文件系统实现技术的不同,写入日志区的信息是不完全一样的。某些实现技术仅仅写文件系统元数据,而其他则会记录所有的写操作到日志中。
现在,如果崩溃发生在日志内容被写入之前发生,那么原始数据仍然在磁盘上,丢失的仅仅是最新的更新内容。如果当崩溃发生在真正的写操作时(也就是日志内容已经更新),日志文件系统的日志内容则会显示进行了哪些操作。因此当系统重启时,它能轻易根据日志内容,很快地恢复被破坏的更新。
在任何一种情况下,都会得到完整的数据,不会出现损坏的分区的情况。由于恢复过程根据日志进行,因此整个过程会非常快只需要几秒钟时间。
应该注意的是使用日志文件系统并不意味着完全不需要使用文件扫描工具fsck了。随机发生的文件系统的硬件和软件错误是根据日志是无法恢复的,必须借助于fsck工具。
目前Linux环境下的日志文件系统
在下面的内容里将讨论三种日志文件系统:第一种是ext3,由Linux内核Stephen
Tweedie开发。ext3是通过向ext2文件系统上添加日志功能来实现的,目前是redhat7.2的默认文件系统;Namesys开发的
ReiserFs日志式文件系统,可以下载,目前Mandrake8.1采用该日志式文件系统。SGI在2001年三月发布了XFS日志式文件系统。可以在
oss.sgi.com/projects/xfs/下载。下面将对这三种日志文件系统采用不同的工具进行检测和性能测试。
安装ext3
关于ext3文件系统技术方面的问题请参考Dr. Stephen
Tweedie的论文和访谈。ext3日志式文件系统直接来自于其祖先ext2文件系统。其具有完全向后兼容的关键特性,实际上其仅仅是在ext2日志式文件系统上添加了日志功能。其最大的缺点是没有现代文件系统所具有的能提高文件数据处理速度和解压的高性能。
ext3从
2.2.19开始是作为一个补丁方式存在的。如果希望对内核添加对ext3文件系统的支持,就需要使用补丁,可以得到补丁程序,一共需要如下文件:
* ext3-0.0.7a.tar.bz2:内核补丁
* e2fsprogs-1.21-WIP-0601.tar.bz2
支持ext3的e2fsprogs程序套件
拷贝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目录下,进行解压:
mv linux linux-old
tar -Ixvf linux-2.2.19.tar.bz2
tar -Ixvf ext3-0.0.7a.tar.bz2
cd linux
cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1
cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
首先对内核添加SGI的kdb内核调试器补丁,第二个是ext3文件系统补丁。下来就需要配置内核,对文件系统部分的"Enable
Second extended fs development code"回答Yes。然后编译。
内核编译安装以后,需要安装e2fsprogs软件套件:
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
./configure
make
make check
make install
下来要做的工作就是在分区上创建一个ext3文件系统,使用新内核重新启动,这时候你有两种选择创建新的日志文件系统或者对一个已有的ext2文件系统升级到ext3日志文件系统。
对于需要创建新ext3文件系统的情况下,只需要使用安装的e2fsprogs软件包中的mke2fs命令加-f参数就可以创建新的ext3文件系统:
mke2fs -j /dev/xxx
这里/dev/xxx是希望创建ext3文件系统的新分区。-j参数表示创建ext3而不是ext2文件系统。可以使用参数"-Jsize="来指定希望的日志区大小(n单位为M)。
升级一个已有的ext2,使用tune2fs就可以了:
tune2fs -j /dev/xxx
你可以对正在加载的文件系统和没有加载的文件系统进行升级操作。如果当前文件系统正在被加载,则文件.journal会在文件系统加载点的所在目录被创建。如果是升级一个当时没有加载的文件系统,则使用隐含的系统inode来记录日志,这时候文件系统的所有内容都会被保留不被破坏。
你可以使用下面的命令加载ext3文件系统:
mount -t ext3 /dev/xxx /mount_dir
由于ext3实际上是带有日志功能的ext2文件系统
,因此一个ext3文件系统可以以ext2的方式被加载。
安装XFS文件系统
如果需要从技术方面了解XFS文件系统,请参考SGI的XFS文件系统和SGI信息页面。也可以参考FAQ。
XFS是一个SGI开发的linux环境下的日志文件系统,它是一个成熟的技术,最初是使用在IRIX系统上的文件系统。XFS遵循GPL版权申明。目前xfs文件系统最新版本是1.02。下载得到对内核xfs文件系统支持补丁或者直接下载RPM包方式的内核,下面我们就以补丁方式说明如何对
2.4.14内核使用xfs。首先下载如下内容
patch-2.4.14-xfs-1.0.2.bz2
patch-2.4.14-xfs-1.0.2-kdb.bz2
拷贝Linux内核linux-2.4.2.tar.bz2到
/usr/src目录下,修改老的内核目录名,然后解压新内核:
mv linux linux-old
tar -Ixf inux-2.4.2.tar.bz2
拷贝每个每个补丁到内核源码目录下(例如:/usr/src/linux),并打补丁:
zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1
zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1
然后配置内核,打开文件系统部分的内核选项:"XFS
filesystem support" (CONFIG_XFS_FS)和"Page Buffer support"
(CONFIG_PAGE_BUF)。同时需要升级下面这些系统工具到下面或更高的版本:
modutils-2.4.0
autoconf-2.13
e2fsprogs-devel-1.18
安装新内核并重启服务器。
然后下载xfs工具。这个软件包包括下面的命令来处理文件系统,使用下面的命令来安装该软件包::
tar -zxf xfsprogs-1.2.0.src.tar.gz
cd xfsprogs-1.2.0
make configure
make
make install
安装这些命令以后,就可以创建新的XFS文件系统:
mkfs -t xfs /dev/xxx
如果xxx是一个已经存在的文件系统,那么就需要使用"-f"参数来创建新分区,但是记得这将会破坏该分区的所有数据。
mkfs -t xfs -f /dev/xxx
创建以后就可以使用基于下面的命令加载新文件系统:
mount -t xfs /dev/xxx /mount_dir
安装ReiserFS文件系统
如果希望更多地从技术方面了解reiserFS文件系统,请参考NAMESYS和FAQ。
ReiserFS文件系统从2.4.1-pre4开始就是Linux内核的正式支持的文件系统了。为了使用reiserFS文件系统那你首先需要在系统上安装文件系统支持工具(如:创建ReiserFS文件系统的mkreiserfs工具)。最新的ReiserFS文件系统版本可以以补丁的方式添加到2.2.x或者2.4.x内核中。这里我们以2.2.19为例:
第一步,首先下在内核源码,并下在ReiserFS文件系统的2.2.19补丁,目前补丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2。同时应该下载工具软件包:
reiserfsprogs-3.x.0j.tar.gz。
然后解压内核源码和补丁包到/usr/src中:
tar -Ixf linux-2.2.19.tar.bz2
bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0
编译内核支持reiserfs,安装内核。然后安装文件系统工具软件:
cd /usr/src/linux/fs/reiserfs/utils
make
make install
安装新内核并重新启动。现在就可以创建新的reiserfs文件系统,并加载:
mkreiserfs /dev/xxxx
mount -t reiserfs /dev/xxx /mount_dir
文件系统性能测试
测试环境使用的计算机环境如下:Pentium III - 16 Mb
RAM - 2 Gb
HD,操作系统为RedHat6.2。所有的文件系统都能正常工作,所以就进行benchmark分析来对它们进行性能比较。首先我直接拔掉系统电源以模拟系统掉电情况,以测试日志文件系统恢复过程。所有的文件系统都成功地经过了文件扫描检测阶段,在数秒以后系统都经过了扫描然后正常启动了系统。
下一步就采用了bonnie++性能测试程序进行测试,这个程序对一个文件进行数据库类型的访问,进行了创建、读和删除小文件,这些操作对于Squid、INN或者Maildir格式的邮件服务器程序(qmail)是最常见的操作。性能测试命令为:
bonnie++ -d/work1 -s10 -r4 -u0
其对加载在/work1目录下的文件系统进行了10Mb(-s10)的测试。因此在执行测试之前必须创建适当类型的文件系统并加载到目录/work1下。其他的参数指定内存大小(-r4)的M数,和以root身份运行测试程序,测试结果如下:
每种测试都有两组数据:文件系统速度(K/sec)和CPU占用率(%CPU)。速度越高,文件系统越好。而对于CPU率来说,数字越小性能越好。可以看到Reiserfs文件系统在文件操作方面(Sequential
Create和Random Create部分的)
的性能最好,超出其他文件系统10倍之多。在其他方面(Sequential
Output和Sequential
Input)则和其他文件系统性能不相上下。对于其他文件系统则没有特别明显的区别。XFS性能接近ext2文件系统,ext3文件系统则比ext2要稍微慢上一些(因为记录日志需要一些额外的时间)。最后使用从得到的性能测试程序mongo,并对其进行了修改以对三种日志文件系统进行测试。这里在mongo.pl程序中添加了添加了加载xfs和
ext3文件系统的命令,并对其进行格式化处理,然后就开始性能测试分析。该脚本格式划分区/dev/xxxx,加载其并在每个阶段运行指定数目的进程:创建、拷贝、符号连接处理、读、显示文件状态信息、重命名和删除文件。同时,该程序在创建和拷贝阶段以后会计算分段数(fragmentation)。
Fragm = number_of_fragments / number_of_files
可以在结果文件中得到同样的测试比较结果:
log - 原始结果
log.tbl - 比较程序的输出结果
log_table - 表格式的结果
下面的命令进行测试:
mongo.pl ext3 /dev/hda3 /work1 logext3 1
如果要测试其他文件系统,就需要把上面命令的参数中的ext3修改为reiserfs或xfs。其他参数分别为要加载的分区,加载路径,保存测试结果的文件名及启动的进程数。
下面的表格是测试结果。数据单位为秒。值越低性能越好。第一个表格测试使用的数据块大小为100字节,第二个表格为1000字节,最后一个为10000字节
从上面的表格可以看到ext3在状态删除和重命名方面要性能更好一些,而ReiserFS文件系统在文件创建和拷贝性能表现更出色。同时也可以看到reiserFS正如其技术文档提到的其在小文件处理方面性能相当出色。
结论
目前Linux至少有两个健壮可靠的日志文件系统可供选择(XFS和reiserFS),其都得到了广泛的应用。例如Mandrake8.1就默认支持reiserFS文件系统。
从性能测试的结果可以看到,reiserFS是最好的选择。