文件系统和软硬链接

文章目录

  • 文件系统
    • 磁盘
    • 磁盘逻辑抽象
    • inode
  • 软硬链接
    • 软链接
    • 硬链接

文件系统

文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁盘中存放,显而易见,他们也是需要被管理的。而对于这部分文件的核心就是我们需要快速的定位它们在磁盘中的位置。

文件的管理:

  1. 打开文件进行管理
  2. 没有被打开的文件也要在磁盘中进行管理

对于打开文件和没有被打开文件的管理,我们称之为文件系统。

磁盘

磁盘是硬件,物理存储结构。
在这里插入图片描述

在这里插入图片描述

磁盘一片有两面,每一面都有一个磁头,可以左右移动,盘面是可以旋转的,所以这两个一结合,磁头就可以访问磁盘中的任意位置。一个盘面有很多的磁道,每一圈磁道可以有很多的扇形的扇区。而扇区是磁盘的最小存储单元(512字节)。
在这里插入图片描述
如果我们想向一个扇区写入,应该如何寻址?

  1. 选择磁头(head)
  2. 选择该面的那一个磁道(cylinder)
  3. 选择哪一扇区(sector)

这样的寻址方式为CHS定位法
现在可以向一个扇区进行写入,就可以向任意一个/多个扇区进行写入,可以多个扇区进行写入,当然也可以进行随机的读写。

磁盘逻辑抽象

一圈一圈的磁道我们可以想象一下一个圆可以抽象成一个长方形,所以我们的一圈圈磁道就是一个一个的圆形,所以我们可以把一个盘面抽象成一个数组,而数组元素的大小就是扇区,所以我们可以把整个磁盘也就是多个盘面抽象成一个超级大的数组。

在这里插入图片描述
所以我们根据数组的下标,然后根据每个盘面多大,每圈的磁道多大,就可以通过计算,定位到一个扇区的CHS地址。

操作系统可以根据扇区为单位进行存取,也可以基于文件系统以文件块为单位进行存取。Linux中OS一般读取的大小为8个扇区的大小(4KB),所以每次只需要给一个初始地址,然后向后读取8个单位即可,这样的以8个扇区为单位大小的起始地址为LBA地址

最终结论: 对于存储设备的管理就转化为了对数组的增删查改。

假设我们现在有500GB的空间需要我们管理,如果我们把这500GB的空间整体使用,从技术层面来说当然是可以的,但是我们用起来非常的不方便,所以我们会把一个非常大的空间进行分区,然后对分区进行管理,只需要把一个分区管好其他的分区可以复用这个分区的策略来进行管理。

在这里插入图片描述
然后可以让一个分区进行分组,然后只需要把一个组管好,其他组可以复用这个组的方式,所以对500GB的管理就转化为了对一个组的管理。所以磁盘也是设备
在这里插入图片描述
操作系统中管理文件无非即使我自己的文件信息和很多管理我的文件的信息,所以在文件系统开始用之前一定要把管理数据写入到块组中,而我的文件信息无非就是内容+属性,Linux下属性和内容是分开存储的。

格式化就是把磁盘中管理我们自己文件的信息初始化,相当于恢复出厂设置。

inode

Linux下,使用ls 加个-li选项就可以看到我们文件的indode。
在这里插入图片描述图中圈红的就是我们自己文件的inode。一般情况下一个文件一个inode,基本上inode每个文件都要有,inode在整个分区具有唯一性,Linux内核中识别文件和文件名无关,之和inode有关。由于文件我们用户用的是文件名,但是内核用的是inode,所以一定存在文件名和inode的映射关系。

在这里插入图片描述

我们在看这个图,我们会发现每个块组中包含很多的属性,我们看一下每个属性代表什么含义。

  1. 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  2. GDT,Group Descriptor Table:块组描述符,描述块组属性信息。
  3. 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  4. inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  5. inode表:存放文件属性 如 文件大小,所有者,最近修改时间等
  6. 数据区:存放文件内容

inode中除了存放的有文件的属性之外,还有一个block的数组,表示自己的内容放在哪几个块中。一般来说这个数组的大小是15。后两个位置并不值就存放内容,倒数第二个存放二级映射,而倒数第一个存放三级映射。

所以后四个是存放我们自己的文件内容,而前两个是存放管理文件的内容。一般超级块没隔几个块组就会有一个,因为为了防止因为超级块坏的话整个磁盘就会挂掉,所以为了防止这种情况,如果一个坏了,就可以去后面把正确的拷贝回来,可以增强容错率。

对于普通文件来说,创建一个普通文件只需要通过inode位图找到一个没有用过的inode,然后把位图修改成1,通过inode表,索引找到inode,把属性填进去,把内容放进block中,修改blocd的位图,把内容存在的block的下标填入自己的block数组中,就搞定了。
对于目录文件来说,它的创建方式和普通文件完全一样,只不过它的内容是它目录下的文件的文件名和inode的映射关系。而删除一个文件只需要修改一个文件对应的inode位图和block位图即可。

上面说的所有都是在一个分区中,那么我们如何区分在哪一个分区呢?
每一个文件都有路径,可以通过判断路径的前缀来判断文件在哪一个分区下。

如何查找一个文件?
一般查找一个文件是,不是是打开还是怎样,文件的路径都是我们用户提供,所以每个进程都会有一个CWD,所以OS只需要通过用户给的路径确定在哪一个分区,然后依次根据文件名和inode的映射关系就可以找到我们需要的文件。

软硬链接

软链接

Linux中可以通过ln -s 的方式来建立软链接。
在这里插入图片描述
可以发现软链接是一个独立的文件,有独立的inode,文件的内容就是指向文件的路径。类似于Windows中的快捷方式。软链接就是普通文件。

硬链接

Linux中可以通过ln 的方式来建立软链接。
在这里插入图片描述
圈红的为硬链接数。

可以发现硬链接的inode和指向的文件是相同的,所以硬链接不是一个独立的文件,他是一个目录内部文件名和inode的映射关系,所以一个文字只有在硬链接数为0时,才会被真正的删除。
一般目录文件不能被建立硬链接,因为我们在查找的时候,如果目录被创建了硬链接,在实现某种查找算法是无法区分硬链接指向的目录和真正的目录、,很可能会出现死循环。所以一般是不允许创建目录的硬链接。
在这里插入图片描述

但是Linux中存在目录的硬链接,这个被OS的特殊处理,我们用户是不允许创建硬链接的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636982.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode算法训练日记 | day33

专题九 贪心算法 一、跳跃游戏 1.题目 Leetcode:第 55 题 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 …

成为程序员后我明白了什么?分享11条经验助你成功

文章目录 前言自我分析做什么挑战路线图总结 前言 入行15载,从一线大头兵,到负责技术的架构师,再到技术和管理一把抓的团队负责人,我从中总结了软件工程师成功入门的11个步骤,分享给想入行,或刚入行的同学们…

TCP/IP协议—MQTT

TCP/IP协议—MQTT MQTT协议MQTT协议特点MQTT通信流程MQTT协议概念 MQTT报文固定报头可变报头有效载荷 MQTT协议 消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一个基于客户端-服务器的消息发布/订阅传输协议。它的设计思想…

2.Vue简介

Vue简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,V…

5.SpringBoot 配置文件

文章目录 1.配置文件作用2.配置文件格式2.1项目中同时存在两种配置文件2.2application.properties2.2.1 application.properties语法格式2.2.2获取自定义配置项 2.3 application.yml2.3.1 application.yml语法格式2.3.1.1单双引号区别2.3.1.2和application.properties格式对比&…

在Postgres中,如何有效地管理大型数据库的大小和增长

文章目录 一、定期清理和维护1. VACUUM和ANALYZE2. 删除旧数据和归档 二、分区表三、压缩数据四、配置优化1. 调整维护工作负载2. 监控和日志 五、使用外部存储和扩展1. 外部表和FDW2. 扩展和插件 六、定期备份和恢复测试结论 管理大型数据库的大小和增长是数据库管理员&#x…

NIMAX下载安装使用,pyvisa基本使用

NIMAX部分: 1、先在NI官网下载系统配置和NI-VISA: 系统配置: https://www.ni.com/zh-cn/support/downloads/drivers/download.system-configuration.html#532687https://www.ni.com/zh-cn/support/downloads/drivers/download.system-conf…

基于springboot+vue+Mysql的社区维修平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

C++中的继承与多态

一、继承: 1.什么是继承? 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象…

记录:阿里云服务器网站搭建(2)

Docker安装Mysql mysql版本 查看开发环境中mysql版本 :select version();安装时版本尽量保证一致,最低要求大版本要一致 docker 拉取mysql镜像 docker pull mysql:8.0.36 docker启动mysql容器 docker run -d \ # 创建并运行一个容器&…

【Godot4.2】太极八卦图绘制

概述 作为中国传统文化符号之一,太极八卦图,无论是哲学还是玄学,都不可能避开。 之前在ShapePoints函数库实现了太极的点求取函数。当时采用的时圆弧拼接的方式,但是存在某些尺寸下多边形无法三角化的问题。 于是就有了今天的内…

Windows使用freeSSHd搭建sftp服务器

一、安装 1、运行freeSSHd.exe(最好以管理员方式运行) 2、选择安装位置 3、选择全部安装 4、是否创建开始启动栏快捷入口 5、是否创建桌面快捷方式 6、安装 7、安装完成,点击close 8、安装私钥 9、是否要安装为服务 10、全部安装完成 二、配…