Linux 文件系统

文章目录

文件系统定义

网络答案: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 :存放文件内容。

解释说明

  1. Boot Block 为引导块,缺点文件系统的起始位置/

  2. 整个磁盘被分为了若干个Block group (对应了日常使用电脑时分C\D\E盘的行为), 每个Block group结构相同。在Block group 中负责实际数据存储的是Data Blocks区,Data Block 区中有许多Block存储块(具体有多少看用户分盘情况),一个Block的可存数据大小是4KB。

  3. Block Bitmap是一个位图,该位图一个标志位被置为1,则代表对应的一个Block块(4KB)被占用。

    inode Bitmap 与 inode Table 关系则有所区别, inode Bitmap 位图标志位记录inode编号是否被占用,inode Table 则记录indoe编号对应的文件信息。

  4. 超级块(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是否被使用)

软硬链接原理

  1. 如果不清楚软硬连接在补充说明部分有解释。

  2. 软硬链接的特性/原理是由文件系统的特性/结构决定的。创建软连接在文件系统视角来看,是新创建了一个文件(软连接是一个文件),这个文件的内容是原文件或目录 的路径,故软链接可以跨文件系统(跨磁盘分区,即跨Block group)进行链接。 创建硬链接在文件系统视角来看,是为文件名和inode(inode是inode Table中的)建立新的映射关系,即多个文件名可对应同一个inode。硬链接与目标文件共享相同的inode和数据块,故硬链接只能链接到同一文件系统中的文件,且不能链接到目录

  3. 在文件系统中,目录是一种特殊的文件,它包含了其他文件和目录的索引。目录中的每个条目都包含了文件名和对应文件的inode号码。硬链接是通过将一个文件名关联到一个inode号码来创建的。

    因为目录文件已经被用于存储其他文件和目录的索引信息,所以将一个硬链接链接到目录会导致混乱和冲突。例如,如果允许将一个硬链接链接到目录,那么可能会出现循环链接的情况,导致文件系统无法正常遍历和访问文件。所以硬链接不能连接到目录。

补充说明

一、为什么一个扇区0.5 KB,而文件系统中一个block块4KB呢

  1. 0.5KB太小,会增加读取次数,导致效率低下,但一次读取数据单位也不能过大,否则空间浪费较多。
    (如果前一个数据存储为占满一个block,下一个数据会在新的block开始存储)。
  2. 完成硬件和软件解耦,如果磁盘的一个扇区为1kb,block为0.5KB就会发生操作系统和硬件不兼容的问题。

二 、 什么是元数据

元数据是指从信息资源中抽取出来的用于说明其特征、内容的结构化的数据(如题名,版本、出版数据、相关说明,包括检索点等),用于组织、描述、检索、保存、管理信息和知识资源。

三 、 什么是软硬链接

  1. 作用:

通俗的理解软硬连接就是window系统中文件的快捷方式,要想进一步理解就要看软硬链接原理。

  1. 创建:

创建软链接(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。

相关推荐
云飞云共享云桌面24 分钟前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮2 小时前
Linux 使用中的问题
linux·运维
dsywws3 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零4 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程5 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬6 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
sun0077006 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器
wowocpp6 小时前
ubuntu 22.04 server 安装 anaconda3
linux·运维·ubuntu
乡村农夫6 小时前
cuda 环境搭建
linux