linux基础学习--linux磁盘与文件管理系统

linux磁盘与文件管理系统

1.认识linux系统

1.1 磁盘组成与分区的复习

首先了解磁盘的物理组成,主要有:

  • 圆形的碟片(主要记录数据的部分)。
  • 机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。
  • 主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。
    数据存储与读取的重点在于碟片,而碟片上的物理组成为:
  • 扇区切最小的物理存储单位,且根据磁盘设计的不同,目前有512B和4KB两种格式。
  • 将扇区组成一个圆,就是柱面。
  • 早期分区主要以柱面作为最小的分区单位,现在的分区通常使用扇形作为最小分区单位(每个扇区都有其号码,就好像座位一样)。
  • 磁盘分区主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT分区表;
  • MBR分区表中,第一个扇区最为重要,里面有:主引导记录,及分区表,其中MBR占有446B,而分区表则占有64B。
  • GPT分区表除了分区数量扩充较多之外,支持的磁盘空间也可以超过2TB。
    基本上所有物理磁盘的文件都被模拟成/dev/sd[a-p]的格式,第一块磁盘名为/dev/sda,分区的文件名以第一块磁盘为例,为/dev/sda[1-28],除物理磁盘下,虚拟机的磁盘通常为/dev/vd[a-p]的格式。如果有使用到软件磁盘阵列的话,还有/dev/md[0-128]的磁盘文件名。使用LVM时,文件名则为/dev/VGANE/LVNAME。我们这里主要学习物理磁盘和虚拟磁盘。
  • /dev/sd[a-p][1-128]:为物理磁盘的文件名。
  • /dev/vd[a-d][1-128]:为虚拟磁盘的文件名。
1.2 文件系统特性

在磁盘分区完毕后,还需要进行格式化,之后操作系统才能使用这个文件系统。
这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需数据,因此就需要将分区进行格式化,已成为操作系统能够利用的文件系统格式。
通常我们称一个可被挂载的数据为一个文件系统而不是一个分区
在操作系统的文件中,除了实际内容外,还有很多属性,如Linux操作系统的文件权限(rwx)与文件属性(拥有者,用户组,时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到数据区块中。此外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量等
每个inode与区块都有编号,至于这三个数据的意义简略说明如下:

  • 超级区块 :记录此文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量,以及文件系统的格式与相关信息等
  • inode :记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码。
  • 数据区块 :实际记录文件的内容,如果文件太大,会占用多个区块。
    每个inode与数据区块都有编号,每个文件都占用一个inode,inode内有文件数据放置的区块号码。因此找到了文件的inode,就找到了文件数据区块的号码,就能读出文件的实际数据。
    这种数据存取方式称为索引式文件系统
    还有其他常用的文件系统,比如U盘使用的FAT格式的文件系统,
    因为这种文件系统中没有inode存在,如果一个文件数据写入的区块太松散,需要读取磁盘好几次才能完整读取这个文件。
    所谓碎片整理,就是因为文件写入的区块太过于离散,文件读取的性能会变的很差,需要通过碎片整理将同一个文件所属的区块都集合到一起,这样数据的读取会比较容易。
1.3 Linux的ext2文件系统(inode)

标准的ext2文件系统就是这种含有inode,数据区块,超级区块等,以inode为基础的Linux文件系统。
文件系统一开始就将inode和数据区块规划好了,除非重新格式化(或利用resize2fs等命令修改其大小),否则inode与数据区块固定后就不再变动了。
当文件系统有数百GB,再将所有inode和数据区块都放在一起就很不易管理了。
因此,ext2文件系统格式化时基本上是区分成多个区块群组(block group),每个区块都有独自的inode,数据区块,超级区块系统。
在ext2文件系统中,最前面有一个启动扇区,这个启动扇区可以安装启动引导程序。
每一个区块群组的六个内容如下:

  • 数据区块(data block)
    数据区块是用来放置文件数据的地方,在ext2文件系统中所支持的区块大小有1K,2K及4K三种。格式化是区块大小就被固定了,且每个区块都有编号。而区块大小也会产生差异:
Block 大小1 KB2 KB4 KB
最大单一文件大小16 GB256 GB2 TB
最大文件系统总容量2 TB8 TB16 TB

ext2文件系统还有一些限制:

  • 原则上,区块的大小和数量在格式化完成后就不能再修改(除非重新格式化)。
  • 每个区块内最多只能放置一个文件的数据。
  • 承上,如果文件大于区块的大小,则一个文件会占用多个区块数量。
  • 承上,如果文件小于区块,则该区块的剩余容量就不能够再被使用了(磁盘空间被浪费了)。
    由于这些限制,当小文件较多时,而区块较大,例如区块为4KB,而小文件仅为50B,那么每个区块都将浪费4046B的空间。
    那么将区块设置为1KB呢?这样但文件会占用很多区块,而每个区块的inode都需要被记录,造成读写性能不佳。
  • inode table(inode表)
    基本上,inode记录文件的属性及文件数据放置区块的编号,至少有下面的:
  • 该文件的读写属性(read,write,excute)。
  • 该文件的拥有者与用户组(owner,group)。
  • 该文件的大小。
  • 该文件建立或状态改变的时间(ctime)。
  • 最近一次的读取时间(atime)。
  • 最近修改的时间(mtime)。
  • 定义文件特性的标识(flag),如SetUID。
  • 该文件真正内容的指向(pointer)。
    inode的数量与大小也是在格式化时就已经固定了,除此之外还有一些特点:
  • 每个inode大小均固定为128B(新的ext4与xfs可设置到256B);
  • 每个文件都仅会占用一个inode而已。
  • 承上,因此文件系统能够建立的文件数量与inode的数量有关。
  • 系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能读取区块的内容。
  • Superblock(超级区块)
    超级区块时记录整个文件系统相关信息的地方,没有超级区块,就没有这个文件系统,它记录的信息有:
    • 数据区块与inode的总量。
    • 未使用与已使用的inode与数据区块数量。
    • 数据区块与inode的大小(block为1,2,4K,inode为128B或256B)。
    • 文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息。
    • 一个有效位数值,若该文件系统已被挂载,则有效位为0,若未被挂载,则有效位为1。
      一个文件系统应该仅有一个超级区块,位于它的第一个区块群组,后续的区块1群组中也可能含有超级区块,不过都是对第一个超级区块的备份。
  • Filesystem Description(文件系统描述说明)
    这个区段可以描述每个区块群组的开始与结束的区块,以及说明每个区块(超级区块,对照表,inode对照表,数据区块)分别介于哪个区块之间。
  • 区块对照表(block bitmap)
    从区块对照表中可以知道那些区块是空的,因此我们的系统就能够快速的找到可使用的空间来处理文件。
    删除文件,对应区块空出来时,对照表中他们的状态就会变成未使用中。
  • inode对照表(inode bitmap)
    与区块对照表功能类似

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

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

相关文章

DIFY教程第五弹:科研论文翻译与SEO翻译应用

科研论文翻译 我可以在工作流案例中结合聊天大模型来实现翻译工具的功能,具体的设计如下 在开始节点中接收一个输入信息 content 然后在 LLM 模型中我们需要配置一个 CHAT 模型,这里选择了 DeepSeek-R1 64K 的聊天模型,注意需要在这里设置下…

【Redis】哨兵机制和集群

🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、哨兵机制 Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工的进行主从切换,同时需要大量的客户端需要被通知切换到…

注意力机制(Attention)

1. 注意力认知和应用 AM: Attention Mechanism,注意力机制。 根据眼球注视的方向,采集显著特征部位数据: 注意力示意图: 注意力机制是一种让模型根据任务需求动态地关注输入数据中重要部分的机制。通过注意力机制&…

解锁 AI 生产力:Google 四大免费工具全面解析20250507

🚀 解锁 AI 生产力:Google 四大免费工具全面解析 在人工智能迅猛发展的今天,Google 推出的多款免费工具正在悄然改变我们的学习、工作和创作方式。本文将深入解析四款代表性产品:NotebookLM、Google AI Studio、Google Colab 和 …

知识图谱:AI大脑中的“超级地图”如何炼成?

人类看到“苹果”一词,会瞬间联想到“iPhone”“乔布斯”“牛顿”,甚至“维生素C”——这种思维跳跃的背后,是大脑将概念连结成网的能力。而AI要模仿这种能力,需要一张动态的“数字地图”来存储和链接知识,这就是​知识…

Win11 24H2首个热补丁下周推送!更新无需重启

快科技5月7 日消息,微软宣布,Windows 11 24H2的首个热补丁更新将于下周通过Patch Tuesday发布,将为管理员带来更高效的安全更新部署方式,同时减少设备停机时间。 为帮助IT管理员顺利过渡到热补丁模式,微软还提供了丰富…

【Python类(Class)完全指南】面向对象编程入门

目录 🌟 前言🧩 技术背景与价值🚧 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 📚 一、技术原理剖析🎨 核心概念图解💡 核心作用讲解 💻 二、实战演示🛠️…

全自动舆情监控系统实现方案

想要通过代码实现全自动的全网舆情监控,还要用代理来辅助。全自动的话,可能是指从数据抓取、处理到分析都不需要人工干预。全网舆情监控意味着要覆盖多个平台,比如新闻网站、社交媒体、论坛等等。代理的使用可能是为了绕过反爬虫机制&#xf…

【Linux 系统调试】Linux 调试工具strip使用方法

‌ 目录 ‌ 一. strip 工具的定义与核心作用‌ ‌1. strip 是什么?‌ 2. strip 工具调试符号的作用‌ 3. strip 工具调试符号的重要性‌ 二. 如何确认文件是否被 strip 处理?‌ 1. 通过 file 命令检查文件状态 2. strip 的典型用法‌ ‌基础命…

多模态大模型轻量化探索-开源SmolVLM模型架构、数据策略及其衍生物PDF解析模型SmolDocling

在《多模态大模型轻量化探索-视觉大模型SAM的视觉编码器》介绍到,缩小视觉编码器的尺寸,能够有效的降低多模态大模型的参数量。再来看一个整体的工作,从视觉侧和语言模型侧综合考量模型参数量的平衡模式,进一步降低参数量&#xf…

代码随想录第36天:动态规划9(序列问题)

一、最长递增子序列&#xff08;Leetcode 300&#xff09; 1.dp数组定义&#xff1a; dp[i] 为以 nums[i] 结尾的最长递增子序列长度。 2.状态转移&#xff1a; dp[i] max(dp[i], dp[j] 1) for all j < i and nums[j] < nums[i] 2.dp数组初始化&#xff1a; 所有 …

【Spring Boot 注解】@SpringBootApplication

文章目录 SpringBootApplication注解一、简介二、使用1.指定要扫描的包 SpringBootApplication注解 一、简介 SpringBootApplication 是 Spring Boot 提供的一个注解&#xff0c;通常用于启动类&#xff08;主类&#xff09;上&#xff0c;它是三个注解的组合&#xff1a; 1.…

openstack虚拟机状态异常处理

1、openstack虚拟机task_state状态异常处理 问题描述&#xff1a; 正常状态&#xff1a; 异常状态&#xff1a; 任务状态应为 无&#xff0c;但该虚拟机为None。无法执行开机、关机等操作。 当前异常状态下通过命令行关闭虚拟机会报错&#xff0c;报错信息如下&#xff1a; […

【数据结构】手撕二叉搜索树

目录 二叉搜索树的概念二叉搜索树的实现节点类构造函数拷贝构造函数赋值运算符重载析构函数插入函数查找函数删除函数中序遍历 二叉搜索树的应用(k和k/v模型 ) 二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树…

蓝桥杯 20. 倍数问题

倍数问题 原题目链接 题目描述 众所周知&#xff0c;小葱同学擅长计算&#xff0c;尤其擅长判断一个数是否是另一个数的倍数。但当面对多个数时&#xff0c;他就比较苦恼了。 现在小葱给了你 n 个数&#xff0c;希望你从中找出三个数&#xff0c;使得这三个数的 和是 K 的倍…

SpirngAI框架 Advisor API详解

SpringAI提供了Advisors API来实现请求和响应的拦截&#xff0c;修改&#xff0c;增强Spring应用程序和AI模型的互动。 可以使用ChatClient API来配置现有的advisor&#xff0c;例如&#xff1a; var chatClient ChatClient.builder(chatModel) .defaultAdvisors( new Message…

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)

这里我们来实现这个RPC的client端 为了实现RPC的效果&#xff0c;我们调用的Hello方法&#xff0c;即server端的方法&#xff0c;应该是由代理来调用&#xff0c;让proxy里面封装网络请求&#xff0c;消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…

bpftrace 中使用 bpf_trace_printk

bpf_trace_printk bcc 中可以通过 bpf_trace_printk 来打印输出 , 同时有个非常有用的功能, 同时输出到 /sys/kernel/tracing/trace 文件中 比如bcc代码 // read_trace.c&#xff08;eBPF 内核态代码&#xff09; #include <vmlinux.h> #include <bpf/bpf_helpers.h…

解决 Chrome 与 Chromedriver 版本不一致问题的方法

目录 常见错误处理 处理方案&#xff1a; 1. 自动版本匹配方法 使用 webdriver-manager 库&#xff08;推荐&#xff09; 2. 手动版本管理方法 检查并匹配版本 3. 版本兼容性解决方案 使用兼容性表 4. 自动更新策略 定期检查更新脚本 5. Docker 容器化方案 最佳实践建…

【强化学习】强化学习算法 - 多臂老虎机问题

1、环境/问题介绍 概述&#xff1a;多臂老虎机问题是指&#xff1a;智能体在有限的试验回合 &#x1d447; 内&#xff0c;从 &#x1d43e; 台具有未知奖赏分布的“老虎机”中反复选择一个臂&#xff08;即拉杆&#xff09;&#xff0c;每次拉杆后获得随机奖励&#xff0c;目…