文章目录
文件系统定义
网络答案:Linux文件系统是Linux操作系统中用于组织和管理文件和目录的一种文件系统。它负责在硬盘上存储和检索文件,并为用户提供对文件的访问和管理功能。
个人理解:依然是从硬件说起,先说磁盘本身的物理结构从,磁盘的结构如下图所示,一个磁盘内有多个盘片,每个盘片有两个盘面,盘面上有多个同心圆环被称为磁道,磁道又被均匀划分为一个个扇区,每个扇区可存储512 字节数据(二进制数据)(无论该扇区离圆心远近都是512KB)。面对如此多的数据块,操作系统需要对其进行先描述再组织,这也就有了文件系统的需求,文件系统是操作系统的一部分(如下图二)。
磁盘结构:
文件系统是操作系统的一部分:
文件系统结构
引导块(Boot Block): 是文件系统中的一个特殊块,位于文件系统的起始位置。它包含了引导加载程序(Boot Loader)所需的信息,用于引导操作系统的启动过程。
Block Group :ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
同的结构组成。
超级块(Super Block ):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
文件系统结构就被破坏了
Group Descriptor Table:块组描述符,描述块组属性信息,
Block Bitmap:Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode Bitmap:每个bit表示一个inode是否空闲可用。
inode Table :存放文件属性 如 文件大小,所有者,最近修改时间等。
Data blocks :存放文件内容。
解释说明:
-
Boot Block 为引导块,缺点文件系统的起始位置/
-
整个磁盘被分为了若干个Block group (对应了日常使用电脑时分C\D\E盘的行为), 每个Block group结构相同。在Block group 中负责实际数据存储的是Data Blocks区,Data Block 区中有许多Block存储块(具体有多少看用户分盘情况),一个Block的可存数据大小是4KB。
-
Block Bitmap是一个位图,该位图一个标志位被置为1,则代表对应的一个Block块(4KB)被占用。
inode Bitmap 与 inode Table 关系则有所区别, inode Bitmap 位图标志位记录inode编号是否被占用,inode Table 则记录indoe编号对应的文件信息。
-
超级块(Super Block )记录了整个文件系统的全局信息,而组描述(Group Descriptor Table)符表记录了文件系统中每个块组的详细信息。操作系统在挂载文件系统时首先读取超级块,然后使用超级块中的信息来定位和读取组描述符表,进而获取文件系统的更详细信息和管理文件系统的块组。
文件创建过程
当我们创建一个文件并保存,操作系统在利用其文件系统在内核中先找通过inode Bitmap和Block Bitmap找到未使用的inode Table 和多个Data block来分别储存所创建文件的信息和内容,需要注意的是Data block可能不是连续的,inode Table 中记录的文件信息记录了该文件内容被存储在哪些Data block(不是通过Block Bitmap记录,Block Bitmap只能识别某个Data block是否被使用)。
软硬链接原理
-
如果不清楚软硬连接在补充说明部分有解释。
-
软硬链接的特性/原理是由文件系统的特性/结构决定的。创建软连接在文件系统视角来看,是新创建了一个文件(软连接是一个文件),这个文件的内容是原文件或目录 的路径,故软链接可以跨文件系统(跨磁盘分区,即跨Block group)进行链接。 创建硬链接在文件系统视角来看,是为文件名和inode(inode是inode Table中的)建立新的映射关系,即多个文件名可对应同一个inode。硬链接与目标文件共享相同的inode和数据块,故硬链接只能链接到同一文件系统中的文件,且不能链接到目录。
-
在文件系统中,目录是一种特殊的文件,它包含了其他文件和目录的索引。目录中的每个条目都包含了文件名和对应文件的inode号码。硬链接是通过将一个文件名关联到一个inode号码来创建的。
因为目录文件已经被用于存储其他文件和目录的索引信息,所以将一个硬链接链接到目录会导致混乱和冲突。例如,如果允许将一个硬链接链接到目录,那么可能会出现循环链接的情况,导致文件系统无法正常遍历和访问文件。所以硬链接不能连接到目录。
补充说明
一、为什么一个扇区0.5 KB,而文件系统中一个block块4KB呢
- 0.5KB太小,会增加读取次数,导致效率低下,但一次读取数据单位也不能过大,否则空间浪费较多。
(如果前一个数据存储为占满一个block,下一个数据会在新的block开始存储)。 - 完成硬件和软件解耦,如果磁盘的一个扇区为1kb,block为0.5KB就会发生操作系统和硬件不兼容的问题。
二 、 什么是元数据
元数据是指从信息资源中抽取出来的用于说明其特征、内容的结构化的数据(如题名,版本、出版数据、相关说明,包括检索点等),用于组织、描述、检索、保存、管理信息和知识资源。
三 、 什么是软硬链接
- 作用:
通俗的理解软硬连接就是window系统中文件的快捷方式,要想进一步理解就要看软硬链接原理。
- 创建:
创建软链接(Symbolic Link)
bash
ln -s <目标文件> <链接文件>
软链接是一个特殊的文件(软链接是文件),它包含了指向目标文件的路径信息。软链接可以跨越不同的文件系统,并且可以链接到目录。
创建硬链接(Hard Link):
bash
ln <目标文件> <链接文件>
硬链接是目标文件的另一个入口点,它与目标文件共享相同的inode和数据块。硬链接只能链接到同一文件系统中的文件,且不能链接到目录。
创建链接时,目标文件可以是绝对路径或相对路径。链接文件的名称可以自定义,但是需要确保在所在目录中是唯一的。
使用以上命令创建软链接和硬链接时,如果目标文件或链接文件已经存在,会提示是否覆盖或创建失败。可以通过添加 -f 选项
来强制创建链接并覆盖已存在的文件。
另外,可以使用 ls -l
命令来列出文件和链接文件的详细信息,包括链接类型、目标文件和链接文件的路径等。
四、 Linux 如何查看文件或目录的硬链接数
bash
ls -l | grep '^-' | grep '文件或目录名称' | wc -l
五 、为什么目录默认两个硬链接数?
因为 . / 和 ... / 都是文件,被隐藏起来了。
. 和 ... 分别是对本目录和上级目录的硬链接。(硬连接数的最终判断标准是同一个inode编号建立了多少映射 )
文件默认的硬链接是文件名,数为1
目录默认的硬链接是目录名和./ 数目为2(目录本身和./连个硬链接)如果在已经创建的目录里再创建目录,里层目录里会产生 .../ ,.../是和外层目录建立了链接的,故此时外层目录的硬链接数会+1。