,但是你有没有思考过:为什么块设备挂载之后才能访问文件?...2. vfs 几个重要对象 在这里我们不介绍整个IO栈,只说明和文件系统相关的vfs和具体文件系统层。...文件系统分为以下几种: 1)磁盘文件系统 文件在非易失性存储介质上(如硬盘,flash),掉电文件不丢失。 如ext2,ext4,xfs 2)内存文件系统 文件在内存上,掉电丢失。...) //创建mount实例 关联挂载点和超级块 添加到命名空间的挂载树中 下面主要看下vfs_get_tree和do_new_mount_fc: 4.具体文件系统挂载方法 1)vfs_get_tree...: 1.读取磁盘上的超级块; 2.填充并关联vfs超级块; 3.读取块组描述符; 4.读取磁盘根inode并建立vfs 根inode; 5.创建根dentry关联到根inode。
提供的便利及特征 保护: 分层来保护数据安全 可靠性,持久性: 保持文件的持久即使发生崩溃,媒体错误,攻击等 文件和块: 文件属性: 名称,类型,位置,大小,保护,创建者,创建时间,最久修改时间…...用户视图: 持久的数据结构 3_2. 系统访问接口 字节的集合(UNIX) 系统不会关心你想存储在磁盘上的任何的数据结构 3_3....操作系统内部视角: 块的集合(块是逻辑转换单元,而扇区是物理转换单元) 块大小 扇区大小: 在UNIX中, 块的大小是 4KB 当用户说: 给我2-12字节空间时会发生什么?...允许用户指定相对路径来代替绝对路径 一个文件系统需要先挂载才能被访问 一个未挂载的文件系统被挂载在挂载点上 文件别名 两个或多个文件名关联同一个文件: 硬链接: 多个文件项指向一个文件 软链接: 以快捷方式指向其他文件...”0”之前需要扫描 磁盘上数据块总数 (n)/ 空闲块的数目(r) 这个管理空闲空间的数据块空间 是需要保护: 指向空闲列表的指针 位图: 必须保存在磁盘上; 在内存和磁盘拷贝可能有所不同; 不允许
由于有很多不同的实现,应用程序需要一种方法来处理不同的操作。因此,有一种东西叫做虚拟文件系统抽象层。它是应用程序和不同文件系统类型之间的一层,因此无论拥有什么文件系统,你的应用程序都能够使用它。...你的磁盘上可以有许多文件系统,这取决于它们是如何分区的。 Linux系统中日志记录 在大多数文件系统类型上,日志记录是默认的,但是为了以防万一,你应该知道它是做什么的。...常见桌面文件系统类型 ext4:这是本地Linux文件系统的最新版本。它与旧的ext2和ext3版本兼容。它支持高达10亿字节的磁盘卷和高达16TB甚至更多的文件大小。...你可以在一个磁盘上有多个分区,它们不能相互重叠。如果有未分配给分区的空间,则称为空闲空间。分区的类型取决于你的分区表。...如果你有多个分区,它们将有引导块,但其中许多是未使用的。 超级块:这是在引导块之后的单个块,它包含关于文件系统的信息,例如inode表的大小、逻辑块的大小和文件系统的大小。
不论是普通文件,目录,块/字符设备,网络设备套接字等等,对于 $Linux$ 来说都是文件,虽然它们的类型不同,但是 $Linux$ 系统为它们提供了一套统一的接口来统一对待统一操作。...本文不聊那么多种文件,只来说说存储在磁盘上的文件,文件要存储在磁盘上的关键问题是记录各个文件分别用到哪些磁盘块,一般有着以下一些方法。...EXT2 来看一个具体的文件系统 EXT2,捋一捋上面所讲的知识点,看看 EXT2 这种文件系统在磁盘上是怎么布局的。...目录就是一张表,里面存放的是目录项,主要有 3 个属性:文件名、 inode 编号,文件类型。inode 包含了一个文件的绝大部分信息,但是并没有包含文件名,这属性是在目录项这儿指出的。...记住 CPU 是不能和磁盘直接交换数据的,直接与 CPU 打交道的是内存,所以要对磁盘上的文件做什么操作都是要先读取到内存,在内存中操作完之后同步到磁盘。
下面我将简要解释它们的含义和作用: 磁道:硬盘的盘片表面被划分成多个同心圆环,每个环称为一个磁道,每一个都有自己的编号。磁道是硬盘上的存储单位之一,数据在磁道上被存储和组织。...当数据被写入硬盘时,它会被分割成适当大小的扇区,并存储在硬盘的不同扇区中。 柱面:硬盘上的每个盘片都有多个磁道,而所有盘片上相同位置的磁道组成一个柱面。...记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息...更新inode位图和块位图:将文件的inode和数据块对应的位图中的相应位标记为未使用状态,以释放这些资源。 这里我们看到不对数据块里的内容进行清理,只是标志为未使用(这样效率更快)。...是一系列的 Linux 文件系统,最常见的是 Ext2、Ext3 和 Ext4 每一个分区有自己的文件系统。
Linux上的文件系统一般来说就是EXT2或EXT3,但这篇文章并不准备一上来就直接讲它们,而希望结合Linux操作系统并从文件系统建立的基础——硬盘开始,一步步认识Linux的文件系统。...(现在的SSD和闪存从概念和逻辑上都部分继承自机械硬盘,所以使用机械硬盘来进行理解也是没有问题的)机械硬盘能实现信息存储的功能基于:磁性存储介质能够被磁化,且磁化后会长久保留被磁化的状态,这种被磁化状态能够被读取出来...普通文件(-) 从Linux的角度来说,类似mp4、pdf、html这样应用层面上的文件类型都属于普通文件Linux用户可以根据访问权限对普通文件进行查看、更改和删除目录文件(d,directory file...有什么机制善后吗?)每个块组实际还会分为分为6个部分,除了inode table 和 data block外还有4个附属模块,起到优化和完善系统性能的作用所以整个分区大概会这样划分:?...号码, 至于inode bitmap 则是记录使用与未使用的inode 号码5.挂载在一个区被格式化为一个文件系统之后,它就可以被Linux操作系统使用了,只是这个时候Linux操作系统还找不到它,所以我们还需要把这个文件系统
,默认ext2 # 询问分区位置的起始点,指的是从第几MB开始,输入0 (4K对其) # 询问分区位置的结束点,指的是到第几MB结束,比如想给它2G,即给2048 # 可能会出现一个"未对齐"的错误提示...resize2fs 命令 描述:该命令用来增大或者收缩未加载的ext2/ext3/ext4文件系统的大小,常常用在LVM逻辑卷划分; 注意事项: 如果文件系统是处于mount状态下,那么它只能做到扩容前提条件是内核支持在线...,用于打印“ext2/ext3”设备文件系统中的超级块和块组的信息。...检测之前可以先使用dmesg命令查看有没有硬件I/O故障的日志,如果有先用fsck看看是不是文件系统有问题,如果不是则可以使用下面介绍硬盘检测和优化方法来修复它。...#当类型为"p"时可不指定主设备号和次设备号,否则它们是必须指定的。
这些文件在硬盘看来,就是一堆二进制数据而已 ? 你准备把这些文件存储在硬盘上,并在需要的时候读取出来。 要设计怎样的软件,才能更方便地在硬盘中读写这些文件呢?...不行,得有一个地方记录,现在可使用的块有哪些,像这样。 块 0:未使用 块 1:未使用 块 2:未使用 块 3:已使用 块 4:未使用 ......既然在 inode 中记录了文件所在的块号,为什么不扩展一下,多记录几块呢? ? 原来在 inode 中只记录了一个块号,现在扩展一下,记录 8 个块号!而且这些块不需要连续。 ?...你是不是觉得这没啥了不起的。 但这个破玩意,它就叫文件系统 后记 这个文件系统,和 linux 上的经典文件系统 ext2 基本相同。...5. ext2 文件系统的超级块、块描述符、inode 表中记录的信息更多,但核心的和我们的文件系统一样,而且这些字段在后续的 ext3 和 ext4 中不断增加,保持向前兼容。
首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机械手臂上有多个磁头可以进行读取的动作。...而当磁头固定不动,硬盘转一圈所画出来的圆就是所谓的磁道(Track)。而一个硬盘中可能具有多个硬盘盘,所有硬盘盘上面相同半径的那一个磁道就组成了所谓的磁柱(Cylinder)。 ?...3、inode 当我们要将一个partition格式化(format)为ext2时,就必须要指定inode与Block的大小才行。...inode除了记录档案属性以外,同时还具有指向功能,指向档案内容防止的区域,好让操作系统可以正确的取得档案的内容。 ? ...4、Linux 档案系统的运作: 整个ext2/ext3的数据存取是透过journal与metadata还有数据存放区在记录的。
分区是整个磁盘的子分区。 在Linux上,它们以整个块设备后面的数字表示,因此具有设备名称,如/dev/sda1和/dev/sdb3。 内核将每个分区呈现为块设备,就像它对待整个磁盘一样。...硬盘也不例外;即使你可以将硬盘视为具有对任何块的随机访问的块设备,但如果你在硬盘上的数据布局上不小心,会导致严重的性能后果。 考虑图4-3所示的简单单盘硬盘的物理特性。...就像 SCSI 子系统标准化不同设备类型和内核控制命令之间的通信一样,VFS 确保所有文件系统实现都支持标准接口,以便用户空间应用程序以相同的方式访问文件和目录。...扩展文件系统系列具有一定的向后兼容性。 例如,您可以将ext2和ext3文件系统挂载为彼此,也可以将ext2和ext3文件系统挂载为ext4,但不能将ext4挂载为ext2或ext3。...不过,您可能希望在 ext2 模式下挂载已损坏的 ext3 或 ext4 文件系统,因为内核不会挂载日志不为空的 ext3 或 ext4 文件系统。
EXT2或EXT3,但这篇文章并不准备一上来就直接讲它们,而希望结合Linux操作系统并从文件系统建立的基础——硬盘开始,一步步认识Linux的文件系统。...(现在的SSD和闪存从概念和逻辑上都部分继承自机械硬盘,所以使用机械硬盘来进行理解也是没有问题的) 机械硬盘能实现信息存储的功能基于:磁性存储介质能够被磁化,且磁化后会长久保留被磁化的状态,这种被磁化状态能够被读取出来...普通文件(-) 从Linux的角度来说,类似mp4、pdf、html这样应用层面上的文件类型都属于普通文件 Linux用户可以根据访问权限对普通文件进行查看、更改和删除 1.2....有什么机制善后吗?) 每个块组实际还会分为分为6个部分,除了inode table 和 data block外还有4个附属模块,起到优化和完善系统性能的作用 所以整个分区大概会这样划分: ?...4K 的block 大小 3. superblock 记录整个文件系统相关信息的地方,一般大小为1024bytes,记录的信息主要有: block 与inode 的总量 未使用与已使用的inode /
文件系统:主要类型有,"ext(2,3,4)", "xfs", "ffs", "ufs", "reiserfs", "jfs", "vfat(fat32)", "ntfs" 计算机的文件系统是一种存储和组织计算机数据的方法...在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系 统自动完成,用户只需要记住数据被写入到了哪个文件中。...包括block和inode的总量、数量、大小(block为1,2,4K,inode为128 Bytes);mount、fsck的时间;文件系统状态;块组信息;日志信息;别名信息。...5、块位图(Block Bitmap):记录block的状态,0为空闲可用,1为非空闲不可用。...6、Inode位图(Inode Bitmap):与块位图一样,记录Inode的状态,0为空闲,1为非空闲。
首先,Linux将所有的硬件设备都当做文件来处理,因此当使用光驱等硬件设备时,必须将其挂载到系统中,只有这样Linux才能对磁盘上面的文件进行操作。...细讲磁盘分区: MBR模式分区规则 1.一块磁盘上主分区和扩展分区的个数总和不能超过4个 2.一块磁盘上最多只能有1个扩展分区 3.扩展分区中可以创建逻辑分区,个数限制视磁盘类型而定 操作: lsblk...细讲格式化: 格式化,又称逻辑格式化,它是根据用户选定的文件系统(如EXT2,EXT3,EXT4,NTFS,FAT32)在磁盘的特定区域写入特定数据,在分区中划分出一块存放文件分配表,目录表等用于文件管理的磁盘空间...-p: 自动修复错误 -r: 交互式修复错误 FS_TYPE一定要与分区上已经文件类型相同 • e2fsck:ext系列文件专用的检测修复工具 -y:自动回答为yes -f:强制修 fsck...-r: readonly,只读挂载; -w: read and write, 读写挂载; -n: 不更新/etc/mtab; -a:自动挂载所有支持自动挂载的设备;(定义在了/
/cxuan/xxx Linux 文件系统不区分磁盘的,这是什么意思呢?...Linux 虚拟文件系统 为了能够使应用程序能够在不同类型的本地或者远程设备上的文件系统进行交互,因为在 Linux 当中文件系统千奇百种,比较常见的有 EXT3、EXT4,还有基于内存的 ramfs、...i-node 索引节点,包含了每一个文件的描述符。 ❝在 Linux 中,目录和设备也表示为文件,因为它们具有对应的 i-node ❞ 超级块和索引块所在的文件系统都在磁盘上有对应的结构。...Ext4 文件系统被设计用来高度匹配 ext2 和 ext3 文件系统的,尽管 ext4 文件系统在内核数据结构和磁盘布局上都做了变更。...尽管如此,一个文件系统能够从 ext2 文件系统上卸载后成功的挂载到 ext4 文件系统上,并提供合适的日志记录。 日志是作为循环缓冲区管理的文件。日志可以存储在与主文件系统相同或者不同的设备上。
,需要把这些接口抽象一下,形成一个统一的对外接口,这样,不管你是什么硬盘,什么驱动,对外而言,它们所提供的IO接口没什么区别,都一视同仁的被看作块设备来处理。...支持最大 16TB 的分区和最大 2TB 的文件 Ext4 是 Ext3 文件系统的升级版。Ext4 在性能、伸缩性和可靠性方面进行了大量改进。...Ext4 的变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限数量子目录、Extents 连续数据块 概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验...硬连接和源文件具有相同的 inode 。 数据块(Block) :实际记录文件的内容,若文件太大时,会占用多个 block。...它们各自的特点是: 硬连接:原文件名和连接文件名都指向相同的物理地址。
因此,在具有 1KB 块的磁盘上,将为 50 KB 文件分配 50 个连续块。 ? 上面展示了 40 个连续的内存块。从最左侧的 0 块开始。初始状态下,还没有装载文件,因此磁盘是空的。...到目前为止,我们已经假设文件具有较短的、固定长度的名字。在 MS-DOS 中,具有 1 - 8 个字符的基本名称和 1 - 3 个字符的可拓展名称。...在这种设计中,inode 甚至具有与 UNIX 中相同的结构,但是现在它们分散在整个日志中,而不是位于磁盘上的固定位置。所以,inode 很定位。...当已达到硬限制时,再往文件中添加内容将引发错误。同样,对文件数目也存在类似的检查。 什么是硬限制和软限制?硬限制是软限制的上限。软限制是为会话或进程实际执行的限制。...Linux 文件系统(特别是 ext2 和 ext3)由于其选择磁盘块的方式,在磁盘碎片整理上一般不会像 Windows 一样困难,因此很少需要手动的磁盘碎片整理。
当我们执行挂载(mount)系统调用时,系统会找到一个空闲的挂载结构(mount structure),并且从磁盘上读取超级块,把它作为挂载结构的一部分。...它包含一个 short 类型的字段,用于存储一个索引节点数组(inode array)在磁盘上的位置。...; (4字节)size,文件的长度,以字节为单位(定义为 off_t,长整型); (40字节)addr 数组,包含了文件的数据块在磁盘上的地址; (3x 4字节)三个时间,atime(访问时间),mtime...Atomic writes 文件的写入是在加锁的状态下进行的,因此它们始终具有原子性。即使是跨越多个数据块的写入操作,也是如此。这一点在 But Is It Atomic? 中有详细讨论。...在稍后的一篇文章中,我们将会了解到关于BSD快速文件系统,如何更好地布局磁盘上的数据,如何实现更长的文件名、更多的inode,以及如何通过考虑磁盘的物理特性来加快速度。
我们可以从两个角度来看待文件系统: 文件系统的数据结构是怎么组织的,文件数据和元数据在磁盘上是怎么存放的? 访问文件系统的方法,当我们打开、读取或写入一个文件时,需要读写哪些数据结构?...我们有时候会遇到文件系统报磁盘满了的错误,而通过df命令却看到磁盘空间还很空闲的情况,这是因为i节点用完了。像是ReiserFS之类的文件系统是动态分配i节点的,它们不会出现这种情况。...大体来说,fsck会尝试扫描以下内容: 超级块:如果超级块损坏,会尝试使用副本 空闲数据块是否与i节点的block指针一致 i节点的状态和链接数 是否有不同的i节点指向同一个数据块 i节点的block是否指向不合法的磁盘地址...目录项检查:比如是否都包含了.和.....writeback,类似metada journaling,但是它不保证步骤1和2的顺序,因此数据块中可能是老的未初始化的数据(即数据一致性中的场景2),不建议使用。
随着时间的推移,由于碎片(单个文件存储在多个位置,物理上其分散在旋转的磁盘上),它们也遭受了严重的性能损失。...即使严格来说,写不是事务性的,但如果文件关闭后发生崩溃,则丢失数据的风险很小。 如果写入不成功(由于程序上的错误、磁盘上的错误、断电等),文件的原始版本和较新版本都可能丢失数据或损坏。...对日志进行校验和允许文件系统崩溃后第一次挂载时意识到其某些条目是无效或无序的。因此,这避免了回滚部分条目或无序日志条目的错误,并进一步损坏的文件系统 —— 即使部分存储设备假做或不遵守写入障碍。...快速文件系统检查 在 ext3 下,在 fsck 被调用时会检查整个文件系统 —— 包括已删除或空文件。相比之下,ext4 标记了 inode 表未分配的块和扇区,从而允许 fsck 完全跳过它们。...ext2 有一个包含的实用程序 e2defrag,它的名字暗示 —— 它需要在文件系统未挂载时脱机运行。(显然,这对于根文件系统来说非常有问题。)
领取专属 10元无门槛券
手把手带您无忧上云