认识Linux文件系统.docx
《认识Linux文件系统.docx》由会员分享,可在线阅读,更多相关《认识Linux文件系统.docx(22页珍藏版)》请在冰豆网上搜索。
![认识Linux文件系统.docx](https://file1.bdocx.com/fileroot1/2023-7/24/cd831af7-449c-44c0-8166-b762ce6b19f0/cd831af7-449c-44c0-8166-b762ce6b19f01.gif)
认识Linux文件系统
认识Linux文件系统
Linux主流文件格式
文件系统指文件存在的物理空间。
在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。
Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存。
VirtualFileSystem(虚拟文件系统)使得Linux可以支持多个不同的文件系统。
由于系统已将Linux文件系统的所有细节进行了转换,所以Linux核心的其它部分及系统中运行的程序将看到统一的文件系统。
Linux的虚拟文件系统允许用户同时能透明地安装许多不同的文件系统。
虚拟文件系统是为Linux用户提供快速且高效的文件访问服务而设计的。
随着Linux的不断发展,它所支持的文件格式系统也在迅速扩充。
特别是Linux2.4内核正式推出后,出现了大量新的文件系统,其中包括日志文件系统ext3、ReiserFS、XFSJFS和其它文件系统。
Linux系统核心可以支持十多种文件系统类型:
JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
下面介绍Linux下几个最常用的文件系统,其中包括ext、ext2、ext3、JFS、XFS、ReiserFS等。
ext
ext是第一个专门为开发的Linux的文件系统类型,叫做扩展文件系统。
它是1992年4月完成的,对Linux早期的发展产生了重要作用。
但是,由于其在稳定性、速度和兼容性上存在许多缺陷,现在已经很少使用了。
ext2
ext2是为解决ext文件系统的缺陷而设计的可扩展的、高性能的文件系统,它又被称为二级扩展文件系统。
ext2是1993年发布的,设计者是ReyCard。
它是Linux文件系统类型中使用最多的格式,并且在速度和CPU利用率上较为突出,是GNU/Linux系统中标准的文件系统。
它存取文件的性能极好,对于中、小型的文件更显示出优势,这主要得益于其簇快取层的优良设计。
ext2可以支持256字节的长文件名,其单一文件大小和文件系统本身的容量上限与文件系统本身的簇大小有关。
在常见的Intelx86兼容处理器的系统中,簇最大为4KB,单一文件大小上限为2048GB,而文件系统的容量上限为6384GB。
尽管Linux可以支持种类繁多的文件系统,但是2000年以前几乎所有的Linux发行版都使用ext2作为默认的文件系统。
ext2也有一些问题。
由于它的设计者主要考虑的是文件系统性能方面的问题,而在写入文件内容的同时,并没有写入文件的meta-data(和文件有关的信息,例如权限、所有者及创建和访问时间)。
换句话说,Linux先写入文件的内容,然后等到有空的时候才写入文件的meta-data。
如果出现写入文件内容之后,但在写入文件的meta-data之前系统突然断电,就可能造成文件系统就会处于不一致的状态。
在一个有大量文件操作的系统中,出现这种情况会导致很严重的后果。
另外,由于目前Linux的2.4内核所能使用的单一分割区最大只有2048GB,尽管文件系统的容量上限为6384G,但是实际上能使用的文件系统容量最多也只有2048GB。
ext3
在讲解ext3、JFS、XFS、ReiserFS日志格式文件系统之前,先介绍一些日志式文件系统基础。
日志式文件系统起源于Oracle、Sybase等大型数据库。
由于数据库操作往往是由多个相关的、相互依赖的子操作组成,任何一个子操作的失败都意味着整个操作的无效性,对数据库数据的任何修改都要恢复到操作以前的状态。
Linux日志式文件系统就是由此发展而来的。
日志文件系统通过增加一个叫做日志的、新的数据结构来解决这个“fsck”问题。
这个日志是位于磁盘上的结构。
在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要做些什么,所以日志文件具有可伸缩性和健壮性。
在分区中保存日志记录文件好处是:
文件系统写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,则在下次系统启动时就会读日志记录文件的内容,恢复到没有完成的写操作,这个过程一般只需要两三分钟时间。
ext3是由开放资源社区开发的日志文件系统,早期主要开发人员是StephenTweedie。
ext3被设计成是ext2的升级版本,尽可能方便用户从ext2向ext3迁移。
ext3在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性,也就是在保有目前ext2的格式之下再加上日志功能。
和ext2相比,ext3提供了更佳的安全性,这就是数据日志和元数据日志之间的不同。
ext3是一种日志式文件系统,日志式文件系统的优越性在于由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。
因此,每当系统要关机时,必须将其所有的文件系统全部卸下后才能进行关机。
如果在文件系统尚未卸下前就关机(如停电),那么重开机后就会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。
然而,这个过程是相当耗时的,特别是容量大的文件系统不能百分之百保证所有的资料都不会流失,特别在大型的服务器上可能会出现问题。
除了与ext2兼容之外,ext3还通过共享ext2的元数据格式继承了ext2的其它优点。
比如,ext3用户可以使用一个稳固的fsck工具。
由于ext3基于ext2的代码,所以它的磁盘格式和ext2的相同,这意味着一个干净卸装的ext3文件系统可以作为ext2文件系统毫无问题地重新挂装。
如果现在使用的是ext2文件系统,并且对数据安全性要求很高,这里建议考虑升级使用ext3。
ext3最大的缺点是,它没有现代文件系统所具有的、能提高文件数据处理速度和解压的高性能。
此外,使用ext3文件系统要注意硬盘限额问题,在这个问题解决之前,不推荐在重要的企业应用上采用ext3+DiskQuota(磁盘配额)。
JFS
JFS是一种提供日志的字节级文件系统。
该文件系统主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计、开发的。
JFS文件系统是为面向事务的高性能系统而开发的。
在IBM的AIX系统上,JFS已经过较长时间的测试,结果表明它是可靠、快速和容易使用的。
2000年2月,IBM宣布在一个开放资源许可证下移植Linux版本的JFS文件系统。
JFS也是一个有大量用户安装使用的企业级文件系统,具有可伸缩性和健壮性。
与非日志文件系统相比,它的突出优点是快速重启能力,JFS能够在几秒或几分钟内就把文件系统恢复到一致状态。
虽然JFS主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计的,但还可以用于想得到高性能和可靠性的客户机配置,因为在系统崩溃时JFS能提供快速文件系统重启时间,所以它是因特网文件服务器的关键技术。
使用数据库日志处理技术,JFS能在几秒或几分钟之内把文件系统恢复到一致状态。
而在非日志文件系统中,文件恢复可能花费几小时或几天。
JFS的缺点是,使用JFS日志文件系统性能上会有一定损失,系统资源占用的比率也偏高,因为当它保存一个日志时,系统需要写许多数据。
ReiserFS
ReiserFS的第一次公开亮相是在1997年7月23日,HansReiser把他的基于平衡树结构的ReiserFS文件系统在网上公布。
ReiserFS3.6.x(作为Linux2.4一部分的版本)是由HansReiser和他的Namesys开发组共同开发设计的。
SuSELinux也对它的发展起了重大的帮助。
Hans和他的组员们相信最好的文件系统是能够有助于创建独立的共享环境或命名空间的文件系统,应用程序可以在其中更直接、有效和有力地相互作用。
为了实现这一目标,文件系统就应该满足使用者对性能和功能方面的需要。
那样使用者就能够继续直接地使用文件系统,而不必建造运行在文件系统之上(如数据库之类)的特殊目的层。
ReiserFS使用了特殊的、优化的平衡树(每个文件系统一个)来组织所有的文件系统数据,这为其自身提供了非常不错的性能改进,也能够减轻文件系统设计上的人为约束。
另一个使用平衡树的好处就是,ReiserFS能够像其它大多数的下一代文件系统一样,根据需要动态地分配索引节,而不必在文件系统创建时建立固定的索引节。
这有助于文件系统更灵活地适应面临的各种存储需要,同时提供附加的空间有效率。
ReiserFS被看作是一个更加激进和现代的文件系统。
传统的Unix文件系统是按磁盘块来进行空间分配的,对于目录和文件等的查找使用了简单的线性查找。
这些设计在当时是合适的,但随着磁盘容量的增大和应用需求的增加,传统文件系统在存储效率、速度和功能上已显得落后。
在ReiserFS的下一个版本—Reiser4,将提供了对事务的支持。
ReiserFS突出的地方还在于其设计上着眼于实现一些未来的插件程序,这些插件程序可以提供访问控制列表、超级链接,以及一些其它非常不错的功能。
在4的介绍和性能测试。
ReiserFS一个最受批评的缺点是,每升级一个版本都将要将磁盘重新格式化一次,而且它的安全性能和稳定性与ext3相比有一定的差距。
因为ReiserFS文件系统还不能正确处理超长的文件目录,如果创建一个超过768字符的文件目录,并使用ls或其它echo命令,将有可能导致系统挂起。
在网站可以了解关于ReiserFS的更多信息。
XFS
XFS是一种非常优秀的日志文件系统,它是由SGI于20世纪90年代初开发的。
XFS推出后被业界称为先进的、最具可升级性的文件系统技术。
它是一个全64位、快速、稳固的日志文件系统,多年用于SGI的IRIX操作系统。
当SGI决定支持Linux社区时,它将关键的基本架构技术授权于Linux,以开放资源形式发布了他们自己拥有的XFS的源代码,并开始进行移植。
此项工作进展得很快,目前已进入beta版阶段。
作为一个64位文件系统,XFS可以支持超大数量的文件(9000×1GB),可在大型2D和3D数据方面提供显著的性能。
XFS有能力预测其它文件系统薄弱环节,同时提供了在不妨碍性能的情况下增强可靠性和快速的事故恢复。
XFS可为Linux和开放资源社区带来如下新特性:
◆可升级性XFS被设计成可升级,以面对大多数的存储容量和I/O存储需求;可处理大型文件和包含巨大数量文件的大型目录,以满足21世纪快速增长的磁盘需求。
XFS有能力动态地为文件分配索引空间,使系统形成高效支持大数量文件的能力。
在它的支持下,用户可使用的文件远远大于现在最大的文件系统。
◆优秀的I/O性能典型的现代服务器使用大型的条带式磁盘阵列,以提供达数GB/秒的总带宽。
XFS可以很好地满足I/O请求的大小和并发I/O请求的数量。
XFS可作为root文件系统,并被LILO支持,也可以在NFS服务器上使用,并支持软件磁盘阵列(RAID)和逻辑卷管理器(LogicalVolumeManager,LVM)。
SGI最新发布的XFS为1.0.1版,在可以下载它。
由于XFS比较复杂,实施起来有一些难度(包括人员培训等),所以目前XFS主要应用于Linux企业应用的高端。
其它文件系统
上面介绍了六种主要文件系统,下面简单介绍一些其它文件系统。
◆Minix是Linux支持的第一个文件系统,对用户有很多限制,性能低下,有些没有时间标记,文件名最长l4个字符。
Minix文件系统最大缺点是只能使用64MB的硬盘分区,所以目前已经没有人使用它了。
◆Xia是Minix文件系统修正后的版本,在一定程度上解决了文件名和文件系统大小的局限。
但是没有新的特色,目前很少有人使用。
◆ISO9660标准CDROM文件系统,通用的RockRidge增强系统,允许长文件名。
◆NFSSun公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易于从所有这些计算机上存取文件。
◆SysV是SystemV/Coherent在Linux平台上的文件系统。
除了上面这些Linux文件系统外,Linux也可以支持基于Windows和Netware的文件系统,例如UMSDOS、MSDOS、VFAT、HPFS、SMB和NCPFS等。
兼容这些文件系统对Linux用户也是很重要的,毕竟在桌面环境下Windows文件系统还是很流行的,而Netware网络也有许多用户,Linux用户也需要共享这些文件系统的数据。
◆UMSDOSLinux下的扩展MSDOS文件系统驱动,支持长文件名、所有者、允许权限、连接和设备文件。
允许一个普通的MSDOS文件系统用于Linux,而且无须为它建立单独的分区。
◆MSDOS是在DOS、Windows和某些OS/2操作系统上使用的一种文件系统,其名称采用“8+3”的形式,即8个字符的文件名加上3个字符的扩展名。
◆VFAT是Windows9x和WindowsNT/2000下使用的一种DOS文件系统,其在DOS文件系统的基础上增加了对长文件名的支持。
◆HPFT高性能文件系统(HighPerformanceFileSystem,HPFS)是微软的LANManager中的文件系统,同时也是IBM的LANServer和OS/2的文件系统。
HPFT能访问较大的硬盘驱动器,提供了更多的组织特性,并改善了文件系统的安全特性。
◆SMB是一种支持WindowsforWorkgroups、WindowsNT和LanManager的基于SMB协议的网络操作系统。
◆NCPFS是一种NovellNetWare使用的NCP协议的网络操作系统。
◆NTFS是WindowsNT/2000操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。
察看Linux文件类型
不同版本的Linux所支持的文件系统类型和种类都有所不同,如何知道自己使用的Linux发行版的文件系统类型呢?
下面以笔者使用的MandrakeLinux8.2为例,讲解如何操作。
以超级用户权限登陆Linux,进入/Lib/modules/2.4.18-6mdk/kernel/fs目录,执行下面命令:
#ls
注意,不同Linux发行版本的fs目录的位置可能有些不同。
/Lib/modules/2.4.18-6mdk/kernel/fs中会显示当前系统所支持的文件系统种类。
从图1中可以看到,笔者使用的MandrakeLinux8.2支持的文件系统非常多,系统核心支持十多种文件系统类型:
JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
图1MandrakeLinux8.2支持的文件系统类型
文件系统是操作系统用于明确磁盘或分区上文件的方法和数据结构,即在磁盘上组织文件的方法。
文件系统是整个操作系统中重要的组成部分,是操作系统正常运行的基本条件。
了解Linux文件系统对于深入学习、研究Linux是非常重要的。
简介
前面两讲《认识Linux文件系统
(二)》通过讲解文件系统的定义、逻辑组成、树状目录结构、文件五种主要类型,以及主流的Linux文件格式和高级日志文件系统等内容,揭示了Linux高效运行的关键。
然而,要保障Linux文件系统的稳定还需要许多工作,本文主要介绍Linux文件系统的管理和维护。
目录:
Linux系统用户管理
Linux系统用户组管理
文件系统用户信息
三个重要文件
文件系统的维护
Linux系统用户管理
1.添加新用户(user)在Linux命令行下以超级用户身份使用useradd或adduser命令:
#useraddnewuser
设置用户口令:
#passwdnewuser
此时系统会要求输入新的口令,新口令要求输入两次。
出于安全考虑,输入的口令不会在屏幕上显示出来。
2.临时禁止一个用户有时我们需要禁止一个用户账户,而不是删除它,此时可以这样做:
在etc/passwd文件中关于这个用户的passwd域的第一个字符前面加上一个“*”号。
3.删除一个用户在Linux命令行下以超级用户身份使用userfdel命令:
#userdel[-r]username
如果使用-r选项,则表示用户主目录及其内部的文件将全部删除。
Linux系统用户组管理
1.建立组(Group)在Linux命令行下以超级用户身份使用groupadd命令:
#groupadd
2.在组中加入用户要将新用户加入组中,可以用一个编辑器修改/etc/group文件,将用户名加入用户列表中,用逗号分开。
3.删除组在Linux命令行下以超级用户身份使用groupadd命令:
#groupdel
需要说明的是,组中的文件不会自动删除。
文件系统用户信息
Linux文件系统保存着每个用户的信息,这些信息以下面的方式标识。
1.用户名:
用户名是用来标识系统中每个用户的惟一标识符,例如fransk、cjh、qhua和wang。
用户名中可以使用字母、数字、下划线“_”和句点“.”。
通常情况下用户名限制在8个字符。
2.用户ID(UID):
用户ID或UID是系统给每个用户的惟一的数字,系统通常是通过UID而不是用户名来保存用户信息的。
3.组ID(GID):
组ID或GID是用户的缺省组ID。
每个用户通过系统管理员被定义属于一个或多个组,下面将会进一步介绍。
4.口令:
系统还保存了用户加密了的口令,passwd命令可用来设置和改变用户口令。
5.全名:
用户的“真实名字”或“全名”与用户名一起存储,例如用户wang在现实世界中的名字为WangYangXia。
6.个人目录:
个人目录是用户在注册时最初所处的目录,每个用户都有个人目录,通常在目录/home下。
7.用户的注册Shell是在注册时启动的Shell例如/bin/bash和bin/tcsh。
Linux安装后会建立一些特殊用户,最主要的是超级用户,即root用户。
超级用户承担了系统管理的一切任务,可以不受限制的操作。
超级用户的用户(UID)ID和组(GID)ID都是0。
0到499之间的值留给bin、mail这样的系统账号。
普通用户有超级用户创建用户,用户ID(UID)和组ID(GID)从500开始编号。
三个重要文件
1./etc/passwd文件/etc/passwd中包含了有关用户的这些信息,文件中的每一行包含了一个用户的信息,每行的格式如下:
用户名:
加密的口令:
用户ID:
组ID:
用户的全名:
登录目录:
登录shell。
图1是以超级用户root为例的/etc/passwd文件快照。
图1/etc/passwd文件快照
Linux系统把每一个用户看作一个数字,即一个ID号,/etc/passwd文件给出了系统用户ID何用户名之间的关系。
/etc/passwd对于所有用户都是可读的,缺点是容易受到口令攻击。
所以许多Linux发行版本将用户口令存储到另外一个文件/etc/shodow中,该文件只有超级用户可读。
2./etc/shadow为了保证Linux文件系统的安全,系统通常对用户流量进行Shadow(影子加密)处理,把口令保存到只有超级用户才能读取的/etc/shadow文件中,其中包括所有用户和口令的信息。
图2是该文件的快照。
图2/etc/shadow文件
从图2可以看到,每个用户在文件中对应一行,用冒号分成九个域,其中包括以下内容:
(1)用户登录名。
(2)用户加密后的口令。
若为空,表示该用户不需口令即可登录。
(3)口令最近一次被修改的天数。
(4)旧口令在多少天内不能被用户修改。
(5)口令在多少天后必须被修改。
(6)口令过期多少天后用户帐号被禁止。
(7)口令在到期多少天内给用户发出警告。
(8)口令自1970年1月1日被禁止的天数。
(9)保留域。
2./etc/group文件/etc/group文件文件的格式和/etc/passwd文件格式类似,它也是一个纯文本文件,定义了每个组中的用户。
在Linux中,使用组来赋予用户访问文件的不同权限。
组的划分可以采用多种标难,一个用户可同时包含在多个组内/etc/group文件,其中包含了系统中所有用户组的相关信息。
每个用户组对应文件中的一行,并用冒号分成4个域,其中每行的形式如下:
用户组名:
加密后的组口令:
组ID:
组成员列表
图3是用户组sys在etc/group中对应的一行的快照。
其中第二行代表的信息包括系统中有一个称为sys的系统用户组没有设定口令,组ID为3,组中的成员有root、bin、adm三个用户。
图3sys的用户组在/etc/group中的信息
文件系统的维护
无论Linux使用什么文件格式,它的物理基础还是建立在二进制文件上。
对二进制文件的管理就显得非常重要。
如果某些很重要的系统文件或用户的文件丢失了,将可能造成非常大的损失。
可见维护文件系统是一件非常重要的工作,特别是对用户比较多的文件系统来说。
下面就介绍如何检查文件系统、创建文件系统以确保文件系统的正确性。
1.文件系统的完整性Linux系统每次启动时执行的一项重要工作是检查所有要安装的文件系统,以确认它们都能正常工作。
有很多方式可以使文件系统遭到破坏,最常见的是不正常关机和一些硬件错误。
比如,在关闭系统并且挂起CPU之前,没有执行sync将数据写入磁盘,而导致文件系统不完整。
另外,硬件错误也是很致命的,特别是硬盘的物理损伤(通常是工作时的外力冲击),将导致数据丢失。
这时可以使用fask命令程序检查、修复文件系统。
fask的使用权限必须是超级用户。
Linux也提供了针对特定文件系统类型的检查程序,如用于检查ext2类型文件系统的e2fsck。
fsck程序实际上只是为检查各种不同的文件系统提供一个统一的用户界面。
当fsck程序被启动时,它在/bin、/sbin、/etc/fs等目录下搜索针对要检查的文件系统的特定检查程序,然后调用它们进行实际的检查工作。
这个过程对启动fsck程序的用户通常是透明的。
fsck检查所有在柱面组群的数据块映像中被标识为未使用的数据块,即空闲数据块。
检查fsck合计空闲数据块的数目,加上被文件节点使用的数据块的数目,这个结果是否等于文件系统中所有数据块的总和。
如果fsck发现数据块分配映像有错时,它会自动重建。
概要信息中和超级数据块相联系的信息包含在文件系统中所有空闲数据块的数目。
fsck将它检查所得到的空闲数据块数目和上面概要信息中的空闲数据块数目进行比较,如果两者不一