<< Back to shouce.jb51.net

Chapter 1. 文件系统

Table of Contents

1.1. 管理文件系统
1.2. 文件和目录的权限
1.3. 文件属性
1.4. 文件访问控制列表(Access Control Lists,ACL)
1.5. RAID

文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。Linux通过VFS(虚拟文件系统)支持多种文件格式。Linux支持的各种常用的文件系统有以下几种。

Table 1.1. Linux文件系统类型

文件系统类型名称用途
Second Extended filesystemext2最常用的Linux文件系统
Three Extended filesystemext3ext2的升级版,带日志功能
Minix filesystemminixMinix文件系统,很少用
RAM filesystemramfs内存文件系统,速度超快
Network File System(NFS)NFS网络文件系统,由SUN发明,主要用于远程文件共享
DOS-FAT filesystemmsdosms-dos文件系统
VFAT filesystemvfatWindows95/98采用的文件系统
NT filesystemntfsWindows NT采用的文件系统
HPFS filesystemhpfsOS/2采用的文件系统
/proc filesystemproc虚拟的进程文件系统
ISO 9660 filesystemiso9660大部份光盘所用的文件系统
UFS filesystemufsSun OS所用的文件系统
Apple Mac filesystemhfsMacintosh机采用的文件系统
Novell filesystemncpfsNovell服务器所采用的文件系统
SMB filesystemsmbfsSamba的共享文件系统
XFS filesystemxfs由SGI开发的先进的日志文件系统,支持超大容量文件
JFS filesystemjfsIBM的AIX使用的日志文件系统
ReiserFS filesystemreiserfs基于平衡树结构的文件系统

在Debian Administration上有篇文章,测试了ext3, reiser, xfs, jfs四种日志文件系统,XFS是综合评分最高的文件系统。网址是:http://www.debian-administration.org/articles/388

1.1. 管理文件系统

使用mount命令就可在Linux中挂载各种文件系统,如:

debian:~# mount -t vfat /dev/hda1 /mnt/hda1

上面这条命令就把/dev/hda1这个fat分区挂载到了/mnt/hda1目录下。“-t”参数指定文件系统类型,常见的文件类型见上面“Linux文件系统类型”一表的内容。在挂载硬盘时,还有一个“-o”参数,它可指定挂载文件系统时的一些选项,如:

  • codepage=xxx,指定代码页,如936(简体中文)、437(英文)等。

  • iocharset=xxx,指定字符集,如utf8、gb2312等。

  • ro,以只读方式挂载。

  • rw,以读写方式挂载。

mount命令的参数选项是很丰富的,以上介绍的只是常用一些功能,详细介绍请参考man手册。

使用mkfs命令可以创建文件系统,如:

debian:~# mkfs -t ext2 /dev/fd0 1400

这条命令在软盘上创建一个容量为1.44M的ext2文件系统。

使用fsck命令可以检查文件系统,如:

debian:~# fsck -t ext2 /dev/hda3

使用mkswap命令可以创建swap空间,如:

debian:~# mkswap -c /dev/hda4
debian:~# swapon /dev/hda4      #启用新创建的swap空间,停用可使用swapoff命令

设备文件是Linux中一种特殊的文件,它对应每种硬件设备,如硬盘、软驱等。它可以像文件一样对它进行读写操作。设备文件位于/dev目录下,/dev/hda代表第一个IDE硬盘,/dev/fd0代表第一个软驱。/dev/null是一个虚设的设备,它就像一个无底的黑洞,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有任何反馈。所以我们经常把不想在屏幕显示的信息全部送到/dev/null中。下面是一个设备文件的信息:

brw-rw----  1 root disk 3, 0 2005-07-07 05:29 /dev/hda

大家注意文件的size列,它是由逗号分隔的两个数字(3,0),第一个值代表主设备号(major device number),第二个值代表次设备号(minor device number)。主设备号对应内核相应的功能,而次设备号对应由驱动程序管理的特定设备。所以同一类设备的主设备号都是相同的,次设备号则不同。内核根据主设备号将I/O的要求导向到适当的驱动程序上,而该驱动程序以次要编号来判断出指定要使用的设备。系统安装同,默认已安装了大部份的设备文件,在/dev目录下可查询到很多的设备文件。但有时我们也需新增一设备文件,这时我们可使用mknod命令,命令格式如下:

mknod -m permissions name type major minor
-m permissions参数可有可无,主要用于设置设备文件的权限
name是所要创建的设备名,要有完整的路径,如/dev/rhda
type是设备文件的类型,c代表字符设备,b代表块设备
major指定设备的主编号
minor指定设备的次编号

使用dumpe2fs device | more可显示文件系统的详细信息。如:

debian:/var/log# dumpe2fs /dev/hdb1 |more
dumpe2fs 1.37 (21-Mar-2005)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          ef214b73-810a-4098-bf01-ab9a85d9c651
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              3662848
Block count:              7323624
Reserved block count:     366181
Free blocks:              428630
Free inodes:              3470727
First block:              0
Block size:               4096
Fragment size:            4096
Blocks per group:         32768       #文件系统中每个块组的大小
Fragments per group:      32768
Inodes per group:         16352
Inode blocks per group:   511
Last mount time:          Thu Jul  7 20:09:57 2005
Last write time:          Thu Jul  7 23:42:51 2005
Mount count:              15
Maximum mount count:      30
Last checked:             Fri Jun 17 05:31:36 2005
Check interval:           2592000 (1 month)
Next check after:         Sun Jul 17 05:31:36 2005
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128

superblock是每个分区中最重要的信息,如果分区的superblock信息被破坏,则分区就不能使用。所以每个分区的superblock都被备份了。如果ext2文件系统的块组大小是32768,则superblock备份就存放在以32769开始的块组中。使用e2fsck -f -b 32769 /dev/hdb1就可用superblock备份信息修复文件系统的superblock