文章目录
前言
Linux作为一款广泛应用的操作系统,其文件系统在整个系统架构中占据着极为重要的地位。
Linux文件系统有着独特的设计理念与强大的功能特性。它旨在高效地管理计算机中的各类文件资源,无论是文本文件、程序文件还是多媒体文件等,都能被妥善组织与处理。
从历史发展来看,Linux文件系统历经了不断的演进与完善。早期的设计就注重了开放性与灵活性,这使得它能够适应多种不同的应用场景与硬件环境。
与其他常见操作系统的文件系统相比,Linux文件系统往往具备更高的可定制性。用户可以根据自身的具体需求,对文件系统的布局、权限设置、存储分配等诸多方面进行细致的调整。
而且,Linux文件系统在安全性方面也表现出色。通过精细的权限管理机制,能够精准地控制不同用户、用户组对文件的访问权限,有力地保障了文件数据的安全与完整性。
在接下来深入了解Linux文件系统的具体内容时,我们将逐步揭开它在目录结构、文件操作、存储管理等各个关键环节的神秘面纱,感受其独特魅力与强大效能
一、文件系统是什么?
文件操作系统是一种管理计算机系统中文件资源的软件系统。
主要功能:
• 文件存储管理:负责将文件合理地存储在磁盘等存储设备上,比如确定文件存放的位置、分配存储空间等。像Windows系统会根据一定规则把不同类型文件存放在不同文件夹及磁盘分区。
• 文件目录管理:建立和维护文件目录结构,方便用户快速查找文件。例如常见的树形目录结构,用户能通过层层展开文件夹找到所需文件。
• 文件读写操作:提供对文件进行读(查看文件内容)、写(添加、修改内容)等操作的功能接口。用户在文本编辑器里打开文件进行编辑就是通过操作系统提供的写操作接口实现的。
• 文件访问控制:设定不同用户或用户组对文件的访问权限,比如有的文件只允许特定用户读取,其他用户则无法访问。
常见的文件操作系统有Windows、macOS、Linux等,它们在文件管理的具体方式和细节上存在一些差异,但基本功能大致相同,都是为了让用户能高效、安全地使用计算机中的文件资源。
二、文件系统
文件=文件内容+属性->磁盘上存储文件=存储文件的属性
文件的内容--- 数据块存储
文件属性--- inode
linux下文件的存储时文件内容和属性是分开存储的
1、认识硬件---磁盘
1、磁盘物理构成
背景:磁盘and固态硬盘(ssd)
固态硬盘存储的效率高,使用寿命短
磁盘存储容量大,使用寿命长,价格低。
磁盘在10年前的电脑是唯一的一个机械设备,磁盘在冯诺依曼体系中是一个外设,为了提高效率需要用算法提高效率。
光盘:只有一面是光的,读取数据是通过光学的反射原理来读取数据的,通过反射光的颜色不同来区分不同的数据。(了解)
磁盘一张盘片两面是光的,和光盘不同。
磁头 磁臂 磁头停靠点 磁头一面一个
磁头和片面不接触,空气动力学,当磁片旋转是带动空气使磁头悬浮在磁片表面。
磁盘拆开磁盘就报废了,因为磁盘是无尘环境工作的。
磁头充放电在磁盘上写二进制序列,所以数据在磁盘上存储是二进制序列。计算机存储都是用二进制进行交互的,因为计算机是通过电信号来交互的,电信号只有通路和短路。
个人理解:向磁盘写入数据时,磁盘上有无数个小磁铁,当磁头放电时有高低电频,当高点频时,就会给磁头给磁铁赋N、S极。
2、对磁盘理解的建模
1、磁盘的存储构成
数据存储在磁道上,磁道被切成无数个扇区,磁盘被访问的最基本单元就是扇区,在读取磁盘时,将一个扇区拿到内存,一个扇区的大小是512个字节。
要把数据存到磁盘,就有解决定位扇区问题。那么就是定位磁头。然后定位磁道。
所以定位磁道先对磁头进行编号进行找磁盘,磁道的定位通过半径确定,磁头的左右摆动确定磁道。
2、逻辑扇区转化为物理扇区
一个磁道上有很多的扇区,我们将磁道延展开就会发现一个磁道就是一个扇区数组。每个扇区都有自己的下标。
列如:
当每个盘面2w个扇区
每个盘面50个磁道
每个磁道400个扇区,
当扇区下标为28888时
我们28888/20000=1;也就是一号磁面,
28888%20000=8888;就是第一个盘面8888号扇区
8888/400=22号磁道;
8888%400=88号扇区。
这个过程就是扇区的定位。
逻辑扇区地址:LBA地址
物理地址:CHS地址
C磁道
H磁头
S扇区
总结:磁盘就是线性结构。
不仅仅cpu有寄存器,其他设备(外设也有),磁盘也有。
3、文件系统
我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据
[root@localhost linux]# ls -l
总用量 12
-rwxr-xr-x. 1 root root 7438 "9月 13 14:56" a.out
-rw-r--r--. 1 root root 654 "9月 13 14:56" test.c
每行包含7列:
模式
硬链接数
文件所有者
组
大小
最后修改时间
文件名
ls -l读取存储在磁盘上的文件信息,然后显示出来
当我们有非常大的数据需要存储时,我们可以数据拆分开存储,这个过程叫做分区。
分好的区就是扇区
一个一个的小扇区有没被好分为了一个一个Boot Block。现在管理这800GB就转化为一个一个的Boot Block进行管理。
Data Blocks存储的是文件内容区域,以块的形式呈现。常见的是4kb大小---文件系统快的大小。任何一个文件只有最后一个块的空间会有浪费。
inode Table:存储单个文件的所有属性,128字节。一般而言,一个文件一个inode Table。inode有唯一的编号。
综上两点:linux存储数据时,文件内容和属性都是分开存储的。
注意:在linux中inode当中时不包含文件的名称的。
当我们想要找一个文件时,我们只需要找到inode编号,然后通过inode标号找到文件数据块,然后就可找到文件内容
我们找文件数据时,我们通过inode编号找到inode,然后通过inode类中的于数据内容管理数组blocks数组找到文件数据块,就可以将文件的属性和内容全部读取出来。
当块很多时,我们怎么知道哪些块被访问过还是没有被访问过呢?
我们在学习哈希时,我们学习了位图。而在文件当中时,有Bolck Bitmap这个就是一个位图,这位图的bite位就于inode的编号映射起来,bite位的内容记录了inode是否有效,这样我们就可以记录哪些块被写入过。
当删除内容时,我们先拿到inode的编号,然后到inode Bitmap中看inode编号是否有效的,有效就到inode Table当中读取block数组读取数据和数据块映射的关系,读取到的块号通过Block Bitmap映射将对应部分的编号全部清零,这就把数据删掉了,然后再通过inode Bitmap找到inode对应的inode Table,再把inode的table置零。
所以删除文件时,只需要修改Block Bitmap和inode Bitmap。和文件属性和内容无关。
总结
文件系统是用于管理计算机存储设备上的文件资源,包括文件的存储、组织、检索、访问控制等方面,确保用户能高效且安全地使用文件。