Linux文件操作

磁盘

想知道文件,我们需要知道文件的存储地。

也就是磁盘

机械磁盘是计算机中唯一的一个机械设备。也就是外设

磁盘的物理结构

扇区:磁盘存储数据的基本单位,512字节块设备

如何定义一个扇区

先定位磁头,确定磁头要访问哪个柱面。定义一个扇区,CHS地址定位

文件=内容+属性,为非就是占据扇区数量的问题。能定位一个扇区,能定位多个扇区吗?

磁头数:每个盘片一般都头上下两面,分别对应一个磁头,一共两个磁头

磁道数:磁道是从盘片外圈往内圈编号0磁道,1磁道

柱面数:磁道构成柱面,数量上等同于磁道个数

扇区数:每个磁道都被切成多个扇形区域

圆盘数:盘片数量

所谓CHS,就是柱面cylinder,磁头head,扇区sector

磁盘的逻辑结构

磁带上面可以存储数据,磁带顺直就形成了线性结构

磁盘本质是硬质的,但是可以堪称卷在一起的磁带。磁盘的逻辑结构类似于卷

每一个扇区都有一个下标,我们叫做LBA(logical block address)地址,就是线性地址

LBA转成CHS,chs如何转成LBA

OS只需要LBA就行,LBA转成CHS,CHS转成LBA的话,磁盘有这个能力

CHS&&LBA

磁头数"每磁道扇区数"=单个柱面的扇区总数

LBA转CHS

柱面号C=LBA//磁头数每磁道扇区数

磁头号H=(LBA%(磁头数*每磁道扇区数))//每磁道扇区数

扇区号S=(LBA%每磁道扇区数)+1

引入文件系统

引入块的概念

其实硬盘是典型的块设备,操作系统读取硬盘数据的时候,其实不会一个个的读取,效率太低,而是一次读取多个扇区,这多个扇区的集合就是一个块

磁盘的每个分区都是被一个个划分出来的块,一个块的大小是由格式化的时候决定第,最常见的是4Kb,连续八个扇区组成一个块,块是文件存取的最小单位。

磁盘那是一个餐位数组,我们看成一维数组,下标就是LBA,每个元素都是扇区。

每个扇区都有LBA。8个扇区一个块,,每个块的地址都能算出来

直到LBA:块号=LBA/8

知道块号:LBA=块号*8+n

引入分区概念

其实磁盘可以分为多个分区。WIndows来看的话,磁盘会分成C,D,E。这就是分区,实际上就是格式化。

柱面是分区的最小单位。可以利用参考柱面号码的方式进行分区。

inode概念

文件=数据+属性,我们使用ls -l的时候看到除了看到文件名,还能看到文件元数据

inode可以成为索引节点,这是储存文件元信息的区域

ext2文件系统

宏观认识:所有的准备工作都已经做完,我们想要在硬盘上存储文件,必须把硬盘格式化为某种格式的文件系统。,才能存储文件,文件系统的目的就是管理和存储硬盘中的文件。

block group

ext2文件系统会根据分区大小划分为多个block group。而每个block group都有相同的结构组成。

块组内部结构

超级块

存放文件系统本身的结构信息,描述整个分区的文件系统信息,记录的信息主要有,block和inode的总数量。,未使用的block inode的大小。最近一次挂载的时间,最近一次写入数据的时间。最近一次检验磁盘的时间等其他文件系统的相关信息,super block的信息被破坏,可以说整个文件系统结构都被破坏了

GDT 块组描述表。描述块属性信息。整个分区分成多个快组就对应有多少个块组描述符,每个快组描述符存储一个块组的描述信息。如在这个块组中从哪里开始是inode table。从哪里开始是data blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有⼀份拷⻉。

块位图

block bitmap中俱卢哲data block中哪个数据块已经被占用,哪个数据块中没有被占用

3-3-4inode位图(InodeBitmap)

• 每个bit表⽰⼀个inode是否空闲可⽤。

3-3-5i节点表(InodeTable)

• 存放⽂件属性如⽂件⼤⼩,所有者,最近修改时间等

• 当前分组所有Inode属性的集合

• inode编号以分区为单位,整体划分,不可跨分区

data block

数据区:存放文件内容。也就是一个个的block,根据不同的文件类型有以下情况

对于普通文件,文件数据存储在数据块中

block号按照分区进行,不能跨分区

inode和datablock映射

存储属性:内阁先找到一个空闲的节点。内核把文件记录在此

存储数据:该文件需要存储在三个磁盘块。内核找到了三个空闲块。将内核缓冲区的第一块数据复制到300,下一块复制到500.以此类推。

记录分配情况:文件内容按照顺序存放。内核在Inode的磁盘分布区记录了上述快列表

添加文件名到目录:新的文件名abc。linux如何在当前目录中即在此文件,内核将入口添加到目录文件。文件名和indoe之间的对应关系将文件名和文件内容及其属性连接起来

目录和文件名

访问目录,都是用的文件名,inode呢?

目录也是文件,磁盘没有目录的概念,只有文件属性+文件内容的概念

目录的属性不用多说,内容保存的是文件名和inode的映射关系

访问文件必须打开当前目录,根据文件名,获得对应的inode号。然后进行文件访问。

访问文件必须知道当前工作目录。本质是不许能打开当前工作目录。查看目录文件内容

路径解析

打开当前目录文件,查看当前工作目录文件的内容,当前工作目录不也是文件吗,我们访问当前工作目录也是只知道当前工作目录的文件名。,要访问他,不也得知道当前工作目录的inode吗

所以要打开当前工作目录的上级目录。类似递归。需要把路径中所有的目录全部解析

路径缓存:

linux磁盘中存在目录吗:不,目录的本质也是文件,只保存文件属性+文件内容

访问热河文件都要从目录开始路径解析吗:原则上是,但是很慢,linux会缓存历史路径结构

linux目录的概念是怎么产生的

打开的文件是目录的话,OS自己在内存中进行路径维护

每个文件其实都要有自己的dentry结构,包括普通文件,这种所有被打开的文件就可以在内存中形成树形结构

整个树形节点也会同时隶属于Hash,方便快速查找

更重要的是,这个树形结构整体构成了linux的路径缓存结构,打开访问任何文件,都会在这棵树下根据路径进行查找。找到就返回属性inode和内容。没找到就从磁盘加载路径,添加dentry结构,缓存新路径

挂在分区

inode不能跨分区,linux的分区很多啊?如何看到自己所在分区

分区写入文件系统,无法直接使用,需要和指定目录关联,进行挂载才能用

软硬连接

硬连接中 我们看到,真正找到磁盘上文件的并不是文件名,而是inode其实在linux中可以让多个文件名对应同一个Inode

软连接:硬链接是inode引用另一个文件,软连接而是通过名字进行引用另一个文件。但是。新的文件和被引用的文件inode不认同,常见上可以看成一个快捷方式

软硬连接对比:软连接是独立文件,硬连接是只是文件名和目标文件Inode的映射关系

./...是硬连接 文件备份时硬连接

类快捷方式则是软连接

相关推荐
InfraSense2 小时前
多门店运维闭环全景架构:监控+告警+工单+SLA+复盘,一套最小可用系统怎么串起来
运维·msp
Sirius Wu2 小时前
当前主流 RAG 架构全景及轻量级向量库选型深度分析
运维·人工智能·架构·aigc
晚风予卿云月2 小时前
【Linux】进程控制(二)——进程等待 全方位详解
linux·运维·服务器·进程控制·进程等待
上天_去_做颗惺星 EVE_BLUE2 小时前
【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
linux·运维·服务器·ubuntu·macos·centos
Titan20242 小时前
Linux文件系统
linux·服务器
团象科技2 小时前
出海内容创作链路实地调研 关于GPU服务器视频渲染的落地观察
运维·服务器
c238562 小时前
linux文件权限深入了解(下)
linux·运维·服务器
Zh&&Li2 小时前
保姆级安装AI全自动渗透工具(pentestswarm)
linux·运维·服务器·人工智能
木雷坞2 小时前
Playwright MCP Docker 部署:mcr 镜像、浏览器工具和权限配置
运维·docker·容器·mcp