文档介绍::Linux的文件管理
Linux文件管理概述
Linux支持多种不同类型的文件系统,包括EXT、EXT2、MINIX、UMSDOS、NCP、ISO9660、HPFS、MSDOS、NTFS、XIA、VFAT、PROC、NFS、SMB、SYSV、AFFS以及UFS等。
Linux文件系统概念
演变:
Minix文件系统(64Mb)
EXT(Extended file system)文件系统(2Gb)
Xia文件系统(2Gb)
EXT2(Second Extended file system)文件系统(4Tb)
几个术语:
1 i-节点(inode)
文件描述信息包括:文件类型、访问权限、拥有者、时间、尺寸、块指针。
2 目录
树型目录结构,这是一种存储文件目录项的文件。含义同Unix。
3 链接
多个文件名指向同一inode,实现文件共享。
4 设备文件
Linux文件系统的管理
Linux中,一个文件系统在物理数据组织上一般划分成引导块、超级块、inode区以及数据区。
引导块位于文件系统开头,通常为一个扇区,存放引导程序、用于读入并启动操作系统。
超级块由于记录文件系统的管理信息,根据特定文件系统的需要超级块中存储的信息不同。
inode区用于登记每个文件的目录项,第一个inode是该文件系统的根节点。数据区则存放文件数据或一些管理数据。
Linux操作系统究竟支持几种不同类型的文件系统
通过文件系统类型注册链表来描述的。向系统注册文件系统类型有两种途径,一是在编译操作系统内核时确定,并在系统初始化时通过函数调用向注册表登记;
另一种是把文件系统当作一个模块,通过kerneld或insmod命令在装入该文件系统模块时向注册表登记它的类型。
文件系统注册表的数据结构
file_systems指向文件系统注册表,每一个文件系统类型在注册表中有一个登记项,记录了该文件系统类型的名name、支持该文件系统的设备requires_dev、读出该文件系统在外存超级块的函数read_super、以及注册表的链表指针next。
函数register_filesystem用于注册一个文件系统类型,函数unregister_filesystem用于从注册表中卸装一个文件系统类型。
file_system_type
name
requires_dev
read_super
next
file_systems
file_system_type
name
requires_dev
read_super
next
file_system_type
name
requires_dev
read_super
next
Linux操作系统不通过设备标识访问某个具体文件系统,而是通过mount命令把它安装到整个文件系统树的某一个目录节点,该文件系统的所有文件和子目录就是该目录的文件和子目录,直到用umount命令显式的撤卸该文件系统。
当Linux自举时,首先装入根文件系统,然后根据/etc/fstab中的登记项使用mount命令自动逐个安装文件系统。此外用户也可以显式地通过mount和umount命令安装和卸装文件系统。
文件系统的注册和注销操作时,将在以vfsmntlist为链表头和vfsmnttail为链表尾的单项链表中增加或删除一个vfsmount节点,具体数据结构如下:
static struct vfsmount vfsmntlist = (static struct vfsmount )NULL;
static struct vfsmount *vfsmnttail = (static struct vfsmount *)NULL; /* 尾*/
static struct vfsmount *mru_vfsmnt = (static struct vfsmount *)NULL; /*当前*/
struct vfsmount {
kdev_t mnt_dev; /* 文件系统所在的主次设备号*/
char* mnt_devname;/*文件系统所在的设备名,*/
char* mnt_dirname;/* 安装目录名*/
unsigned int mnt_flags;/* 设备标志,如ro */
struct semaphore mnt_sem;/* 设备有关的信号量*/
struct super_block* mnt_sb;/* 指向超级块*/
struct file* mnt_quotas[MAXQUOTAS];/*指向配额文件的指针
time_t mnt_iexp[MAXQUOTAS]; /* expiretime fo