Linux 系统中的每一个分区都是一个文件系统。
文件系统就是指对存在物理空间上的文件的一种管理软件(个人认为)
Linux 2.4 内核以后,开始支持大量的文件系统;
日志文件系统; ext3   ReiserFS   XFSJFS
Linux2.4内核以后支持的文件系统有; JFS , ReiserFs, ext,  ext2,  ext3,  , ISO9660,  XFS,   Minx,  MSDOS,  UMSDOS, VFAT, NTFS,  HPFS,  NFS,  SMB,   SysV,  PROC 等等
 
Ext2/ext3  采用block+ innode 方式来存放文件
Ext2/ext3  有一个空间被称为超级块
(superblock)  存放文件系统的原数据
包括;卷标名, block数,  inode 数 等等
Inode是存放文件元数据,包括文件权限,属性,更改时间等数据
Inode 就是一个索引节点, 这个inode纪录文件的属性,位置等信息。
每个inode都有一个号码,称为索引节点号(inode号)
Linux 文件系统将索引节点号和文件名同时保存在目录中。所以目录只是将文件的名称和他的索引点号结合在一起的一张表,目中的每个文件名和索引点号称为一个连接。
一个文件只有一个对应的inode号,但是一个inode可以有多个文件名与其对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问他。
书上说ext2不是日志文件系统
从ext2 变成ext3不需要格式化,用tune2fs 就可以
从ext3 变成ext2 可以不用作任何的改动
Ext3 特性;
1.        高效性; 非法关机后恢复ext3文件系统只要10秒左右
2.        数据完整性;避免非法关机对数据完整性的破坏
3.        文件系统的速度; 对磁盘驱动器读写进行了优化
4.        数据的转化; ext2-ext3,   ext3-ext2
5.        多种日志模式;对所有数据进行日志纪录模式,只对metadata进行日志纪录,而不对数据进行日志纪录
Data=journal    所有数据日志纪录模式  
Data=writeback  对metadata日志纪录模式
提示metadata是定义文件系统中的数据,即数据中的数据
Root可以根据实际的工作情况来定义,在系统的工作速度和数据完整性来选择
将一个新的分区格式化成ext3文件系统
# mke2fs   -j     /dev/hda8
将ext2 转换成ext3文件系统
# tune2fs  -j     /dev/hda9
提示; 将ext2文件系统转换成ext3时,不需要将分区卸载。直接转换就可以。不要忘记把/etc/fstab 里的ext2改成ext3
用e2fsck 修复ext3文件系统
1. # umount   /dev/hda8    先卸载该分区.
2.#e2fsck  -fy  /dev/hda8  修复该分区
 
Reiserfs文件系统
1997  年 hans  reiser 把reserfs文件系统在网上公布
Reserfs  比ext2fs要快的的多
当前reserfs 只能在intel结构体系上使用
Reiserfs 文件系统一直被用于在高端的unix系统上
Reiserfs 特点;
1.        先进的日志机制
Reiserfs 日志机制在每个实际数据要修改之前把相应的日志写入到磁盘空间,这样提高数据的安全性
2.        高效的磁盘利用率
Reiserfs对一些小的文件不分配inode。而是将这些小文件打包,存放在同一个磁盘块中。而其他的文件系统是每个文件都要占用一个block块。这意味着如果有1000个小文件,那么就要占用1000个block。这样非常浪费磁盘空间。
3.        独特的搜索方式
Reserfs基于平衡树(balanced tree)搜索,这种方式的速度要比ext2快的多。平衡树是一种高效的算法。
4.        支持海量硬盘
Reserfs可以管理上百G的数据。Rerserfs最大支持文件系统的尺寸是16TB。这非常适合企业级应用。
5.        优异的性能
Reserfs 文件系统启动X -windows的速度比ext2快2倍
 
文件的附加属性
# chattr  +〔AadijS〕  filename  设置文件的附加属性
# lsattr  filename    查看文件的附加属性
A; 当文件被改变时,文件的更改时间不变
a;  只能向该文件追加内容,不可以更改原内容
i; 文件不可以删除, 重命名, 改变内容
j; 在ext3文件系统中,次文件一定被写入日志
S; 当文件被改动,此改动会同步写入文件系统
 
将原ext2转换升级成ext3文件系统
#  tune2fs  -j     /dev/hda1  这是直接转换
#  mke2fs  -j    /dev/hda2   这是格式化转换
 
常见的文件系统
Minix ; linux第一个支持的文件系统,比较古老,现在每人用了
ISO9660; 标准的cdrom 文件系统
NFS ; 是sun公司推出的网络文件系统,准许多台计算机共享一个文件系统
提示; redhat linux默认是不支持ntfs 文件系统的。我们可以自己编辑kernel来让系统支持ntfs,但是可能会对数据造成损坏
 
常用创建文件系统工具
Mkfs  可以用于创建各种文件系统,由-t参数来指定
Mke2fs  创建ext2/ext3文件系统
 
# Mk2fs   -j    /dev/hda2
 
文件系统的使用
设备;就是一个具体的文件系统,可以用设备名或卷标名来表示
挂载点:必须是一个目录。当一个目录下有文件时,则在该文件系统被挂载后,原文件暂时无法访问。直到当前挂载的文件被卸载以后,才能继续访问
 
Mount命令参数
挂载时使用mount命令
基本格式; mount 〔-参数〕  〔设备名〕  〔挂载点〕
Mount  -t   指定文件系统的类型
Umount  卸载文件系统
Mount  -o  loop   disk1.iso  挂载.iso 文件
Mount  -o 选项指定挂载文件系统时的选项。有些时候也可以/etc/fstab来指定。常用的有
ro  ; 以只读的方式挂载
rw  ;  以读写的方式挂载
nouser ; 使一般的用户无法挂载设备
user ; 可以让一般的用户挂载设备
 
配置/etc/fstab
/etc/fstab 这个文件是文件系统的挂载信息
当mount一个文件系统时如果给出的参数不全,系统会从/etc/fstab文件中读取参数来补全
当系统启动时,系统会根据这个/etc/fstab这个文件中的配置信息来自动加载文件系统
这个文件同时,还可以被fsck, dump, quotaon,  swapon等程序所使用
fstab 文件的格式
fs_spec  fs_file  fs_type   fs_options    fs_dump  fs_pass
/dev/hda1   /boot   ext2       defaults      1        1   
 
fs_spec ; 这个字段表示要加载的文件系统所在的设备或远程文件系统
fs_file;  表示文件系统的挂载点
fs_type; 文件系统的类型
说明;对于swap设别,该字段为none; 对于加载目录名中包含空格的情况,用40来表示空格
Fs_options; 因为在给指定的设备加载文件系统时,需要使用特定的参数,多个参数是由逗号分开的。对于大多数的系统都是default就可以满足需要了
加载文件系统可以指定的参数;
ro  ;  以只读的方式加载
sync;  不对该设备的写操作进行缓冲处理,这可以防止在非法关机时破坏文件系统和数据的完整性。但是这样却降低了计算机的工作效率
user ;  准许普通用户可以挂载这个文件系统
quota  ;  强制的在该文件系统上进行磁盘配额
noauto ;  不在使用mount -a  命令 (在系统启动时) 加载文件系统
fs_dump ;  该选项被“dump”命令使用来检查一个文件系统应该以多快的频率进行转存,如果不需要转存就设置为0
fs_pass ;  这个字段表示fsck命令用来决定在启动时需要被扫描文件系统的顺序,根文件系统“/” 对应该字段的值为1,其他文件系统应该为2。如果该文件系统不需要在启动时扫描,则设置为0
 
检查当前系统中挂载的文件系统
# mount      使用mount命令
# cat   /etc/fstab    使用/etc/fstab 文件
#  cat   /proc/mounts    使用内存镜像文件
 
卷标的含义
由于设备的文件名可能在硬盘结构发生变化时而改变,因此redhat linux 对ext2文件系统使用卷标来挂载和卸载
卷标纪录在ext2/ext3文件系统的超级块中(superblock)
e2label 命令可以查询和更改ext2文件系统的卷标名
# cat  /etc/fstab
LABEL=/      /        ext3       default    1   1
/dev/hda7     /usr      ext3      default    1   1
第二的意思就是说,把/dev/hda7这个分区挂载到/usr这个目录上
第一行没有指明分区,意思是把LABEL(卷标)为/ 的分区mount到/ 分区上。 这样写的好处就是当你的硬盘从主板上的IDE1(hda)移动到IDE2(hdc)上的时候,系统仍然可以自动的挂载正确的分区
 
手动添加新分区,自定义卷标
#  e2label   /dev/hdax   /new
#   mkdir     /new
最后在/etc/fstab 文件中加入
LABEL=/new      /new       ext3      default   1    1
这样就ok了, 下次重启后系统会自动挂载这个/new分区
 
查询 ext2/ext3 的卷标名
#  e2label    /dev/hda2    查看
Boot                       系统返回信息
 
更改ext2/ext3的卷标名
# e2label   /dev/hda2       data   更改
# e2label    /dev/hda2             查看
Data                               系统返回信息
 
用卷标名来挂载文件系统
#  mount  —L   data   /data
#  mount   LABEL=DATA   /data
 
当你想创建,删除分区或重新划分分区大小,分区所在的设备就不能是正在使用的(分区不能被挂载,并且交换空间也不能被启动)。达到这个目录的最简单的方法就是,进入救援模式中引导系统。由于已经加载的文件系统的信息会自动的写道/etc/mstab中,所以用户只需要给出设备或挂载点中的一个参数即可
如果驱动器不包括任何这在使用的分区,你可以使用umount来卸载分区,使用swapoff 命令来关闭硬盘驱动器上的交换空间
 
文件系统的维护命令
Fsck  /filesystem   check ; 用于检查和修复文件系统
e2fsck; 检查和修复ext2/ext3文件系统
tun2fs; 更改ext2文件系统的属性
resize2fs; 更改ext2文件系统的大小
parted;  更改多种文件系统的大小
 
linux有个parted 工具可以调整分区的大小,但是他是有限制的。如果向增大一个分区那么该分区后面必须有没有使用的空间,而且这个分区没有被mount
# parted      /dev/had    resize   3   644   1300
意思是把分区3  调整从柱面644 到柱面1300结束,重新启动后就会生效了。
 
Linux系统将每隔20次启动系统或30天对文件系统进行一次检查。这些属性可以用tune2fs 来设定(时间间隔的周期以秒指定)
#  tune2fs   -i   0   /dev/hdb5
设置检查文件系统的时间间隔秒数(-i)为0,0就是禁止根据时间的周期进行检查。
 
文件系统访问控制列表
可以为多个用户和组建立文件访问控制列表
基本格式化为; mount   -o   acl
Getfacl
Setfacl
Acl 访问控制列表
自定义访问控制列表是一种机制,每一个acl由一个用户标识和组标识结合的整体。用户标识与组标识配合相对应的访问权限组成了
(user.group.mode)
访问级别
(u.g,rwx) 特定的一个用户,特定的组
(u.%,rwx)特定的一个用户, 任意的组
(%.g,rwx)任意一个用户,特定的组
(%.%,rwx)任意一个用户,任意一个组
 
每一个文件都有13组的访问权限模式,如果有多个类型的访问权限条目,那么较详细的条目的优先级较高。在acl中设置某一个特定用户的读写权限,如果设置了m(ask), 那用户的权限还要受到
m(umask)的限制。原来是要两个权限相与一下,才四用户的正确权限
比如; 设置userA 的权限为r+w,而m设置为r,那么userA的权限为r。
自动挂载文件系统
系统通过autofs服务自动的挂载文件系统
需要后台的automount 进程
Autofs服务的开关由 /etc/init.d/autofs脚本来控制
主要应用在软驱和光驱的场合
如果该设备在一段时间内没有被使用,那么autofs会自动卸载该设备
Autofs 服务的主要配置文件
/etc/auto.master  和   /etc/auto.misc
通过这两个文件来完成automount的设定
Auto.master 的每一行表示一个自动挂载的集群
每一行的格式为
自动挂载目录的集合     参考文件(默认文件为/etc/auto.misc)
Auto.misc 文件中纪录的则是每一个自动挂载的设备
每一个行的格式为;
挂载点(实际挂载点为“/自动挂载的目录集合/挂载点”)  自动卸载的时间    设备文件名