1.文件系统
文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。
Linux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。
索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
硬连接:原文件名和连接文件名都指向相同的物理地址。
目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)
文件在磁盘中只有一个拷贝,节省硬盘空间;
由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。
可以删除原有的文件而保存连接文件,没有防止误删除功能。
2.文件系统层次
由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层。
用户层:最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。VFS层:我们知道Linux分为用户态和内核态,用户态请求硬件资源需要调用System Call通过内核态去实现。用户的这些文件相关操作都有对应的System Call函数接口,接口调用 VFS对应的函数。文件系统层:不同的文件系统实现了VFS的这些函数,通过指针注册到VFS里面。所以,用户的操作通过VFS转到各种文件系统。文件系统把文件读写命令转化为对磁盘LBA的操作,起了一个翻译和磁盘管理的作用。缓存层:文件系统底下有缓存,Page Cache,加速性能。对磁盘LBA的读写数据缓存到这里。块设备层:块设备接口Block Device是用来访问磁盘LBA的层级,读写命令组合之后插入到命令队列,磁盘的驱动从队列读命令执行。Linux设计了电梯算法等对很多LBA的读写进行优化排序,尽量把连续地址放在一起。磁盘驱动层:磁盘的驱动程序把对LBA的读写命令转化为各自的协议,比如变成ATA命令,SCSI命令,或者是自己硬件可以识别的自定义命令,发送给磁盘控制器。Host Based SSD甚至在块设备层和磁盘驱动层实现了FTL,变成对Flash芯片的操作。磁盘物理层:读写物理数据到磁盘介质。
3.Linux所支持的文件系统
Linux所支持的文件系统包括以下多种类型。
adfs:acron磁盘文件系统,是在Risc OS操作系统中使用的标准文件系统。BeFS:BeOS操作系统使用的文件系统。CIFS:通用Internet文件系统(Commnn Intemet File System,简写CIFS),用于访问符合SNIA CIFS标准的服务器。CIFS对SMB协议进行了改进和标准化(SMB协议可用于在Linux和Windows之间共享文件),是一种虚拟文件系统。Ext:Ext文件系统的第一个版本,现在已经很少使用。Ext2:Ext2是专门为Linux 系统设计的,在Red Hat Linux 7. 2版本之前是Linux默认的文件系统类型,具有速度快和CPU占用率低等特点,既可以用于标准的块设备,也可以应用到移动存储介质上。Ext2不包含日志功能。Ext3:Ext3文件系统是Linux中最常用的文件系统,是Red Hat Linux 7.2的新特性,也被称为第三次扩展(Third Extented)的文件系统。现在Ext3已经成为许多Linux系统的默认文件系统类型(包括Fedora和RHEL)。Ext2和Ext3可以方便地互相转换,转换前不需重新格式化文件系统。与Ext2文件系统相比,Ext3包含了日志功能。日志功能维护了最近更改的源数据(源数据是指和文件有关的信息,包括权限、所有者、创建时间和访问时间等)的记录,如果源数据由于非法关机等原因遭到破坏,文件系统将不能正常工作。通过Ext3的日志系统,可以进行适当的恢复。此外,Ext3的日志功能可使硬盘读写头的移动达到最佳化。IS09660:从High Sierra (CD-ROM使用的最初标准)发展而来的文件系统,是CD-ROM的标准文件系统。KAFS:AFS客户端文件系统,用于分布式计算环境,可与Linux、Windows和Macintosh客户端共享文件。Minix:Minix文件系统类型,最初用于UNIX的Minix版本,只支持长度在30个字符以下的文件名。MSDOS:MS-DOS文件系统。DOS、Windows和OS/2使用该文件系统,不支持长文件名,主要用于挂载Microsoft操作系统生成的软盘。VFAT:Microsoft扩展FAT(VFAT)文件系统,支持长文件名,被Windows 9x/2000/XP使用。UMSDOS:扩展的MS-DOS文件系统,不仅支持长文件名,还保持了对UID/GID、POSIX权限和特殊文件(如管道、设备)的兼容。Proc:Proc是一个基于内存的伪文件系统,不占用外存空间,只是以文件的方式为访问Linux内核数据提供接口。由于Proc文件系统是虚拟的,因此无须挂载。用户和应用程序可以通过/proc得到系统的运行信息,并可以改变内核的某些参数。许多应用程序和工具依靠Proc来访问Linux内核信息。Reiser:Reiserfs日志文件系统。Swap:用于交换(Swap)分区。交换分区是系统虚拟内存的一部分,用于在当前内存不足时暂时保存数据。数据被交换到交换分区,当再次需要时调回内存。NFS:网络文件系统(Network File System,简写NFS)类型。HPFS:该文件系统用于只读挂载OS/2 HPFS文件系统。NCPFS:Novell Netware文件系统,可以通过网络挂载。AFFS:Amiga计算机使用的文件系统。UFS:Sun Microsystems操作系统(即Solaris和SunOS)。XFS:一种在高性能环境中很有用的日志文件系统,支持完整的64位寻址。JFS:JFS主要适合于企业系统,是为大文件系统和高性能环境而设计的。Xiafs:与Minux文件系统相比,这种文件系统支持长文件名和更大的i节点。Coherent:System V使用的文件系统类型。SMB:支持SMB协议的网络文件系统,可用于实现Linux与Windows系统的文件共享。
4.xfs的命令行工具
mkfs.xfs: 创建 xfs 文件系统xfs_admin: 调整 xfs 文件系统的各种参数xfs_copy: 拷贝 xfs 文件系统的内容到一个或多个目标系统(并行方式)xfs_db: 调试或检测 xfs 文件系统(查看文件系统碎片等)xfs_check: 检测 xfs 文件系统的完整性xfs_bmap: 查看一个文件的块映射xfs_repair: 尝试修复受损的 xfs 文件系统xfs_fsr: 碎片整理xfs_quota: 管理 xfs 文件系统的磁盘配额xfs_metadump: 将 xfs 文件系统的元数据 (metadata) 拷贝到一个文件中xfs_mdrestore: 从一个文件中将元数据 (metadata) 恢复到 xfs 文件系统xfs_growfs: 调整一个 xfs 文件系统大小(只能扩展)xfs_freeze 暂停(-f)和恢复(-u)xfs 文件系统