第十三单元 文件系统
文件结构
为了能在设备上存储与读取文件,需要在分区上创立文件系统
文件系统记录目录与文件我们称之为文件结构
每一个文件系统在linux里被解释成油一个根目录为起点的目录树结构
Linux将各个文件系统mount在系统目录树中使用
Linux 文件结构
文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。但是在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。
因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。
文件系统
不同的操作系统与设备,有着很多种的文件系统
不同的文件系统存放、搜索文件的方式都有不同
Linux支持多种文件系统的读写
Linux最主要使用的是ext2/ext3文件系统
Linux文件系统
文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。
Linux可以对多种文件系统做读写操作,Windows的FAT16、FAT32、NTFS文件系统在Linux都可以做相应的操作。
ext2/ext3文件系统
ext2/ext3文件系统支持rwx权限及文件属性(attributes)
ext2/ext3文件系统采用block+inode的方式存放文件
ext2/ext3文件系统上有一块空间被称为超级块(superblock)用于存放文件系统的远数据,诸如卷标名、block数、inode数等
inode存放文件的元数据,包含文件权限、属性、更改时间等
linux
ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
文件属性
在ext2/ext3文件系统中,对每个文件,还提供额外的属性支持
用户可以用lsattr来检查文件的属性
系统用户可以用chattr来改变文件的属性
chattr这个命令很重要,尤其是系统安全方面
+-=:分别表示增加、减少、(设定)属性,添加指令则是+,撤销指令则是-
A:当设定了属性A,这个文件的存取时间atime就不能更改了
a:设定a以后,这个文件只能增加数据而不能删除数据,只有root可以设定
i:则表示这个文件“不能被删除、更名、设定链接也无法写入新数据”
这几个参数很有用,其他的就不一一列举了
ext3文件系统
ext3文件系统即添加了日志功能的ext2,可与ext2文件系统无缝兼容
ext2文件系统可以通过增加日志的方式简单的升级到ext3文件系统
ext3文件系统支持三种日志模式:规则(默认,仅记录元数据) 日志化(将数据像元数据一样记录入日志)
写回(只在fsck时发生)
使用一个日志的文件系统减少了系统崩溃后恢复文件系统所花费的时间。因为没有必要运行fdisk来检查文件系统。
现在基本上是ext3文件系统了,这是默认选定的,ext4文件系统也正在推广了
将原ext2文件系统升级成为ext3文件系统:
[root @stationxx root]# tune2fs –j /dev/hda1
[root @stationxx root]# mke2fs –j /dev/hda2
创建文件系统
如果我们需要使用一个分区用于存储文件,则我们要在这个分区上建立文件系统
常用的创建文件系统的工具:mkfs
可以用于创建各种文件系统,由-t参数指定 mke2fs
创建ext2/3文件系统,支持指定block大小等功能
• 对于一个新建立的分区,需要重新启动系统,才能在其之上建立文件系统,例如:
[root @stationxx root]# mkfs –t vfat /dev/hda9
mke2fs支持的常用参数:
• -b:指定block的大小。
• -c:在创建文件系统的同时检查分区坏块
• -i:指定bytes/inode比率。
• -N:指定inode总数。默认情况下由block数与bytes/inode比率算出
• -m:指定保留块的比率。默认为5%。保留块一般会被用于文件交换等特殊工具。
• -j:为ext2文件系统添加日志
• -L:创建文件系统的同时设定label。
使用文件系统
为了使用一个文件系统,往其中存入读文件,用户需要先挂载文件系统
挂载的指令:mount
语法:
mount –t 文件系统类型 [其他参数] 设备 挂载点
• 设备指的是一个具体的文件系统,可以用设备名或卷标名表示
•
挂载点必须是一个存在的目录。如果目录下原来有文件,则在文件系统挂载后,原文件暂时不能访问。直到挂载上的文件系统被卸载。
• 我们一般采用/mnt目录下的一个空目录为挂载点。
mount参数
n -t 文件系统类型:用于指定挂载文件系统的类型,一般这个参数是必须的。
n -o 参数:补充追加的参数
n ext2文件系统默认采用的参数:rw、suid、dev、exec、auto、nouser、async
defaults包含的参数
n rw:允许对文件系统进行读写操作
n suid:允许使用set uid和set gid
n dev:允许包含设备文件
n exec:允许二进制文件执行
n auto:允许自动辨别文件系统类型
n nouser:只允许超级用户挂载文件系统
n async:异步管理文件的改变
n 其他参数通常有:
n loop:使用回访设备挂载文件系统
n ro:对文件系统只能进行读的操作
n user:允许一般用户挂载文件系统
/etc/fstab
配置文件系统挂载信息
mount文件系统若给出的参数不全,系统会从/etc/fstab中读取参数补全
系统启动会参考/etc/fstab中的配置项目自动加载文件系统
也被fsck、dump、quotaon、swapon等程序使用
/etc/fstab文件每一行由空格分为六项,包括:
• 设备文件
• 挂载点
• 文件系统类型
• mount参数:包含defaults和auto的行会在开机时自动被加载。
• dump参数:0表示永不备份。1表示每天备份,2表示每两天备份一次,依次类推。
• fsck顺序:0表示忽略。1、2、3表示检查顺序。一般1被根文件系统使用。网络文件系统与光驱软驱等设备应该被忽略。
当前挂载系统
用户可以通过直接键入mount后回车来检查当前挂载中的文件系统
也可以通过查看文件中/etc/mtab文件来查看当前挂载中的文件系统
也可以通过使用内存映像文件/proc/mounts来查看
卷标
n 由于设备文件名可能在硬盘结构发生变化时更动,因此Red Hat Linux对ext2文件系统使用卷标来挂载与卸载。
n 卷标记录在ext2/ext3文件系统的超级块中
n 用户可以用e2label指令来查询与更改ext2文件系统的卷标
查询ext2、ext3文件系统的卷标
更改ext2/ext3文件系统的卷标
用卷标名挂载文件系统
[root @stationxx root]# mount –L data /data
[root @stationxx root]# mount LABEL=data /data
卸载文件系统
当一个文件系统使用完毕,用户应当卸载该文件系统
umount指令用于卸载文件系统
语法:umount [参数] 设备/挂载点
一个正在使用的文件系统是无法被卸载的
由于已经加载的文件系统的信息会被自动记录于/etc/mtab,所以用户需要给出设备挂载点中的一个参数即可
[root @stationxx root] # umount /mnt/cdrom
文件系统维护
n fsck/filesystem check:用于检查与修复文件系统
n e2fsck:检查与修复ext2文件系统
n 系统在启动时自动会被检查
n tune2fs:更改ext2文件系统属性
n resize2fs:更改ext2文件系统的大小
n parted:更改多种文件系统大小
ext3基于ext2,因此这些工具可以使用在ext3的文件系统上
自动挂载
n 系统通过autofs服务自动挂载文件系统
n 需要后台的automount进程
n autofs服务的开闭由/etc/init.d/autofs脚本控制
n 主要应用于软驱与光驱等场合
n 如果该设备一段时间没有被使用,autofs会自动卸载
一般我们通过更改/etc/auto.master和/etc/auto.misc文件来完成automount的设定。
• auto.master文件每一行表示一个自动挂载集群。每一行的格式为:
自动挂载目录集合 参考文件(默认为/etc/auto.misc)
• auto.misc文件中记录的则是每一个自动挂载的设备。每一行的格式为:
挂载点(实际挂载点为“/自动挂载目录集合/挂载点”)自动卸载等待时间 设备文件名
磁盘限额
n Linux内核支持基于文件系统的磁盘限额
n 每一个组或用户,可以单独设置其磁盘限额
n 磁盘限额包括对block的限制与对inode的限制,每一种限制又可以分为软限制与硬限制
n 软限制被突破后,经过一段时间(grace time),会自动变成硬限制
软限制即在达到此限制后,系统会警告用户,但仍允许用户继续占用硬盘空间。
硬限制不允许普通用户突破。
quota的配置与使用,本人有些愚钝,不是很懂,以后单独分析一下