linux文件系统简介_Linux文件系统简介

linux文件系统简介

本文旨在对Linux文件系统概念进行非常高级的讨论。 它无意于对诸如EXT4之类的特定文件系统类型如何工作进行低级描述,也无意于成为文件系统命令的教程。

每台通用计算机都需要将各种类型的数据存储在硬盘驱动器(HDD)或类似的产品上,例如USB记忆棒。 有两个原因。 首先,当计算机关闭时,RAM会丢失其内容。 有一些非易失性类型的RAM可以在断电后保持存储在其中的数据(例如USB记忆棒和固态驱动器中使用的闪存RAM),但是闪存RAM比诸如此类的标准易失性RAM贵得多DDR3和其他类似类型。

需要将数据存储在硬盘驱动器上的第二个原因是,即使标准RAM仍然比磁盘空间昂贵。 RAM和磁盘成本都在Swift下降,但是RAM在每字节成本方面仍然领先。 根据16GB RAM与2TB硬盘的成本快速计算每字节成本,结果表明RAM的单位成本是硬盘的71倍。 如今,RAM的典型成本约为每字节0.0000000043743750美元。

为了快速回顾一下当前的RAM成本,在计算的早期,一种类型的内存基于CRT屏幕上的点。 这是非常昂贵的,大约$ 1.00 每位

定义

您可能会听到人们以多种不同且令人困惑的方式谈论文件系统。 这个词本身可以有多种含义,您可能必须从讨论或文档的上下文中辨别出正确的含义。

我将根据观察到的“文件系统”一词在不同情况下的用法来定义各种含义。 请注意,在尝试符合标准“官方”含义时,我的意图是根据其各种用法定义该术语。 这些含义将在本文的以下各节中详细探讨。

  1. 整个Linux目录结构从顶部(/)根目录开始。
  2. 特定类型的数据存储格式,例如EXT3,EXT4,BTRFS,XFS等。 Linux支持几乎100种类型的文件系统,包括一些非常旧的文件系统以及一些最新的文件系统。 这些文件系统类型均使用其自己的元数据结构来定义如何存储和访问数据。
  3. 用特定类型的文件系统格式化的分区或逻辑卷,可以将其安装在Linux文件系统上的指定安装点上。

基本文件系统功能

磁盘存储是必不可少的,它带来了一些有趣且不可避免的细节。 显然,文件系统旨在为数据的非易失性存储提供空间。 这是它的最终功能。 但是,还有许多其他重要功能可以满足该要求。

所有文件系统都需要提供一个命名空间,即命名和组织方法。 这定义了文件的命名方式,特别是文件名的长度以及可用字符总数中可用于文件名的字符子集。 它还定义了磁盘上数据的逻辑结构,例如使用目录来组织文件,而不仅仅是将它们集中在一个巨大的文件集中。

定义名称空间后,必须有元数据结构才能为该名称空间提供逻辑基础。 这包括支持分层目录结构所需的数据结构。 确定使用磁盘上哪些空间块以及哪些磁盘可用的结构; 允许维护文件和目录名称的结构; 有关文件的信息,例如文件的大小和创建,修改或最后访问的时间; 以及磁盘上属于该文件的数据的位置。 其他元数据用于存储有关磁盘细分的高级信息,例如逻辑卷和分区。 此更高级别的元数据及其表示的结构包含描述存储在驱动器或分区上的文件系统的信息,但与文件系统元数据分离并独立。

文件系统还需要一个应用程序编程接口(API),该接口提供对系统函数调用的访问,这些函数可操纵文件系统对象(如文件和目录)。 API提供诸如创建,移动和删除文件之类的任务。 它还提供了确定诸如文件在文件系统上的位置之类的算法。 这样的算法可以考虑诸如速度或最小化磁盘碎片的目标。

现代文件系统还提供了一种安全模型,该模型是用于定义对文件和目录的访问权限的方案。 Linux文件系统安全模型有助于确保用户只能访问自己的文件,而不能访问其他文件或操作系统本身的文件。

最终的构建块是实现所有这些功能所需的软件。 Linux使用由两部分组成的软件实现来同时提高系统效率和程序员效率。


图1:Linux由两部分组成的文件系统软件实现。

这个分为两部分的实现的第一部分是Linux虚拟文件系统。 该虚拟文件系统为内核和开发人员提供了一组访问所有类型文件系统的命令。 虚拟文件系统软件调用与各种类型的文件系统接口所需的特定设备驱动程序。 特定于文件系统的设备驱动程序是实现的第二部分。 设备驱动程序将标准的文件系统命令集解释为特定于分区或逻辑卷上文件系统类型的命令。

目录结构

作为通常处事井井有条的处女座,我喜欢把东西存放在较小的,有组织的组中,而不是放在一个大桶中。 使用目录有助于我在查找文件时能够存储然后找到所需的文件。 目录也被称为文件夹,因为它们可以被视为文件夹,在其中文件夹以某种物理桌面类比的方式保存。

在Linux和许多其他操作系统中,目录可以按树状层次结构进行组织。 Linux目录结构定义明确,并在Linux文件系统层次结构标准 (FHS)中进行了记录。 通过使用顺序更深的目录名称(如/ var / log和/ var / spool / mail)来连接引用目录,可以在访问它们时参考这些目录。 这些称为路径。

下表提供了标准,知名和定义的顶级Linux目录及其用途的非常简短的列表。

目录 描述
/ (root filesystem) 根文件系统是文件系统的顶级目录。 它必须包含在挂载其他文件系统之前引导Linux系统所需的所有文件。 它必须包含启动其余文件系统所需的所有必需的可执行文件和库。 引导系统后,所有其他文件系统都将安装在标准的,定义良好的安装点上,作为根文件系统的子目录。
/bin / bin目录包含用户可执行文件。
/boot 包含启动Linux计算机所需的静态bootloader,内核可执行文件和配置文件。
/dev 该目录包含与系统相连的每个硬件设备的设备文件。 这些不是设备驱动程序,而是代表计算机上每个设备并有助于访问这些设备的文件。
/etc 包含主机的本地系统配置文件。
/home 用户文件的主目录存储。 每个用户在/ home中都有一个子目录。
/lib 包含引导系统所需的共享库文件。
/media 一个安装外部可移动媒体设备(例如可能连接到主机的USB拇指驱动器)的地方。
/mnt 常规文件系统(在不可移动介质中)的临时安装点,可以在管理员修复或处理文件系统时使用。
/opt 诸如供应商提供的应用程序之类的可选文件应位于此处。
/root 这不是根(/)文件系统。 它是根用户的主目录。
/sbin 系统二进制文件。 这些是用于系统管理的可执行文件。
/tmp 临时目录。 由操作系统和许多程序用来存储临时文件。 用户也可以将文件临时存储在此处。 请注意,此处存储的文件可能会随时删除,恕不另行通知。
/usr 这些是可共享的只读文件,包括可执行二进制文件和库,手册文件以及其他类型的文档。
/var 可变数据文件存储在这里。 这可能包括日志文件,MySQL和其他数据库文件,Web服务器数据文件,电子邮件收件箱等内容。
表1:Linux文件系统层次结构的顶层。

表1中显示的目录及其子目录以及具有青色背景的子目录被视为根文件系统的组成部分。 也就是说,它们不能创建为单独的文件系统并在启动时挂载。 这是因为它们(特别是它们的内容)必须在引导时出现,以便系统正确引导。

/ media和/ mnt目录是根文件系统的一部分,但是它们绝不能包含任何数据。 相反,它们只是临时的安装点。

其余目录(表1中没有背景色的目录)在引导过程中不需要存在,但是稍后将在启动过程中安装,以使主机做好执行有用工作的准备。

请确保参考官方Linux文件系统层次结构标准 (FHS)网页,以获取有关这些目录及其许多子目录的详细信息。 维基百科对FHS也有很好的描述。 应尽可能严格地遵守该标准,以确保操作和功能的一致性。 无论主机上使用的文件系统类型如何,此分层目录结构都是相同的。

Linux统一目录结构

在某些非Linux PC操作系统中,如果有多个物理硬盘驱动器或多个分区,则会为每个磁盘或分区分配一个驱动器号。 有必要知道文件或程序位于哪个硬盘驱动器上,例如C:或D:。 然后,以命令D:的形式发出驱动器号,例如,以更改为D:驱动器,然后使用cd命令将其更改为正确的目录以找到所需的文件。 每个硬盘驱动器都有自己单独的完整目录树。

Linux文件系统将所有物理硬盘驱动器和分区统一为一个目录结构。 所有这些都从顶部(/)根目录开始。 所有其他目录及其子目录位于单个Linux根目录下。 这意味着只有一个目录树可在其中搜索文件和程序。

这仅能起作用是因为可以在/(root)文件系统上的单独物理硬盘驱动器,不同分区或逻辑卷上创建/ home,/ tmp,/ var,/ opt或/ usr等文件系统然后作为根文件系统树的一部分挂载在挂载点(目录)上。 甚至USB拇指驱动器或外部USB或ESATA硬盘驱动器之类的可移动驱动器也将安装在根文件系统上,并成为该目录树的组成部分。

从一个Linux发行版升级到另一个发行版,或从一个发行版升级到另一个发行版中,这样做的一个很好的理由很明显。 通常,除了诸如Fedora中的dnf-upgrade之类的任何升级实用程序外,明智的做法是在升级过程中偶尔重新格式化包含操作系统的硬盘驱动器,以可靠地清除随时间推移而积累的所有碎片。 如果/ home是根文件系统的一部分,则它将也重新格式化,然后必须从备份中还原。 通过将/ home作为单独的文件系统,安装程序将其称为单独的文件系统,并且可以跳过其格式。 这也可以应用于存储数据库,电子邮件收件箱,网站以及其他可变用户和系统数据的/ var。

将Linux目录树的某些部分维护为单独的文件系统还有其他原因。 例如,很久以前,当我还没有意识到将所有必需的Linux目录作为/(根)文件系统的一部分可能带来的问题时,我设法用大量大文件。 由于/ home目录和/ tmp目录都不是单独的文件系统,而仅仅是根文件系统的子目录,因此整个根文件系统都被填满了。 操作系统没有空间来创建临时文件或扩展现有数据文件。 最初,应用程序开始抱怨没有空间来保存文件,然后操作系统本身开始表现得很奇怪。 引导到单用户模式并清除主目录中有问题的文件后,我可以重新开始。 然后,我使用相当标准的多文件系统设置重新安装了Linux,并能够防止再次发生完整的系统崩溃。

我曾经遇到过Linux主机继续运行的情况,但是阻止用户使用GUI桌面登录。 我可以使用其中一个虚拟控制台在本地使用命令行界面(CLI)登录,而可以使用SSH远程登录。 问题是/ tmp文件系统已满,并且在登录时无法创建GUI桌面所需的一些临时文件。 由于CLI登录不需要在/ tmp中创建文件,因此那里的空间不足并不能阻止我使用CLI登录。 在这种情况下,/ tmp目录是一个单独的文件系统,并且/ tmp逻辑卷所属的卷组中有足够的空间。 我只是简单地将/ tmp逻辑卷扩展到了适合我对该主机上所需的临时文件空间量的新了解的大小,问题得以解决。 请注意,此解决方案不需要重新启动,并且/ tmp文件系统一旦扩大,用户便能够登录到桌面。

当我在一家大型技术公司担任实验室管理员时发生了另一种情况。 我们的一位开发人员在错误的位置(/ var)安装了应用程序。 应用程序崩溃是因为/ var文件系统已满,并且存储在该文件系统上/ var / log中的日志文件由于空间不足而无法附加新消息。 但是,由于关键的/(根)和/ tmp文件系统未填满,因此系统仍然可以正常运行。 删除有问题的应用程序并将其重新安装在/ opt文件系统中,可以解决该问题。

文件系统类型

Linux支持读取大约100种分区类型。 它只能创建和写入其中的一些。 但是有可能并且非常普遍地将不同类型的文件系统挂载到同一根文件系统上。 在这种情况下,我们在存储和管理硬盘驱动器或逻辑卷的分区上的用户数据所需的结构和元数据方面讨论文件系统。 此处提供了Linux fdisk命令可识别的文件系统分区类型的完整列表,以便您可以感觉到Linux与许多类型的系统的高度兼容性。


 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden or  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep
1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT

支持读取这么多分区类型的能力的主要目的是允许与其他计算机系统的文件系统兼容并且至少具有某些互操作性。 以下列表显示了使用Fedora创建新文件系统时可用的选择。

  • btrfs
  • ram
  • ext2
  • ext3
  • ext4
  • 脂肪
  • gfs2
  • hfsplus
  • 极小值
  • msdos
  • ntfs
  • Reiserfs
  • 胖子
  • xfs

其他发行版支持创建不同的文件系统类型。 例如,CentOS 6仅支持创建上述列表中以粗体突出显示的那些文件系统。

安装

Linux中的“挂载”文件系统一词指的是计算的早期,当时需要将磁带或可移动磁盘包物理地挂载在适当的驱动器设备上。 在物理上放置在驱动器上之后,磁盘包上的文件系统将由操作系统逻辑挂载,以使内容可供操作系统,应用程序和用户访问。

挂载点只是一个目录,与其他任何目录一样,它是作为根文件系统的一部分创建的。 因此,例如,home文件系统安装在目录/ home上。 可以将文件系统挂载在其他非根文件系统的挂载点上,但这并不常见。

Linux根文件系统在启动顺序的早期就安装在根目录(/)上。 其他文件系统稍后通过Linux启动程序(在SystemV下使用rc或在较新的Linux发行中通过systemd)安装 。 在启动过程中,文件系统的挂载由/ etc / fstab配置文件管理。 一种简单的记住方式是fstab代表“文件系统表”,它是要挂载的文件系统,其指定的挂载点以及特定文件系统可能需要的任何选项的列表。

使用mount命令将文件系统安装在现有目录/安装点上。 通常,用作安装点的任何目录都应该为空,并且其中不包含任何其他文件。 Linux不会阻止用户将一个文件系统挂载在已经存在的文件系统上或包含文件的目录上。 如果在现有目录或文件系统上挂载文件系统,则原始内容将被隐藏,只有新挂载的文件系统的内容可见。

结论

我希望本文消除了围绕术语“文件系统”的一些可能的混淆。 对我来说,花了很长时间并且是一个非常有帮助的导师,才能真正理解并欣赏Linux文件系统的所有含义,复杂性,优雅性和功能性。

如果您有任何疑问,请将其添加到下面的评论中,我将尽力回答。

下个月

另一个重要的概念是,对于Linux,一切都是文件。 对于用户和系统管理员来说,此概念具有一些有趣且重要的实际应用程序。 我之所以这样说,是因为您可能想在/ dev目录下我计划下个月的文章之前阅读我的“ 一切都是文件 ”文章。

翻译自: https://opensource.com/life/16/10/introduction-linux-filesystems

linux文件系统简介

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值