Linux基础笔记17

2023-11-03

磁盘基础概念知识

  • 计算机主要存储媒介之一
  • 由一个或多个铝制/玻璃的碟片组成,碟片外覆盖具有铁磁性材料
  • 磁盘内部由磁道、柱面、扇区、磁头等关键部位组成
  • Linux 系统中硬件设备文件放在 /dev 下,不同磁盘接口,系统识别的设备名称不一样
  • IDE:/dev/hda
  • SAS\SCSI\SATA:/dev/sda
  • 高效云盘:/dev/vda
  • 磁盘读写数据的单位就是扇区,而非字节,每个扇区绝大多数是 512 字节

image-20220906235124647

机械磁盘的读写机制

  1. 设备驱动程序将读写数据所需要的信息传递给机械磁盘:扇区序列号、扇区数量、读写类型等信息
  2. 通过摆动磁头和转动盘片,将磁头对准需要访问的扇区
  3. 执行数据的读写操作
  4. 执行完毕后就能结束数据传输了:一次请求就完成了

文件系统一脚入门基础

文件系统的必要性

应用程序与底层的解耦,不需要关注实际存放数据的位置和信息,文件系统代替管理,避免了复杂的管理

文件系统下的读取数据流程

  1. 进程进行系统调用(统一的系统调用接口)
  2. 内核中的文件系统通用的处理,并确定操作对象的文件保存在哪个文件系统中
  3. 调用该文件系统独有的处理,并执行和请求与第一步对应的处理
  4. 将读写数据信息,传递给设备驱动程序
  5. 由设备驱动程序进行后续的读写操作(即上述的机械磁盘的读写机制)

其他

  • 操作系统读取磁盘,不会一个个扇区去读取,效率太低,一般都是一次性连续读取多个扇区,被称之为一个 block (块)
  • block (块)的大小常见有1 KB、2KB、4KB,linux 常设置4 KB,即8个扇区

block 与 inode

操作系统对于文件数据的存放分为2部分:基于文件系统

  • 文件内容:存储到 block 中
  • 权限及文件属性:存储在 inode 中

磁盘分区中,有一个超级区块(superblock)

  • 记录整个文件系统的整体信息:inode、block 的总量;使用大小、剩余大小等信息

inode

  • 记录文件的属性、权限,同时记录该文件的内容数据所在的 block 编号

block

  • 存储文件的实际内容,超过默认的 block 大小,就会自动占用多个 block

基于文件系统的数据定位

  • 找到这个文件的 inode 信息,就能找到存放该文件数据的 block 号,就能读取文件内容

格式化

  • 自动会将磁盘分成2个区域
  • inode 和 block 节点大小格式化可以指定
mkfs.xfs -b 4096 -I 256 /dev/sdb

磁盘分区表格式

磁盘有很多很多扇区,早期我们把磁盘中的第一个扇区里面含有重要的信息叫做 MBR(Master Boot Record)格式,后续快速的发展,磁盘容量不断增大,又多了一个新的磁盘分区格式,GPT(GUID partition table)

  • 分区表:就是对磁盘进行分区

MBR(Master Boot Record)

  1. 早期为了兼容 windows 的磁盘,使用的是支持 windows 的 MBR 方式来处理开机管理程序与分区表,相关记录通通放在磁盘中的第一个扇区,大小通常是512字节

    • 主要开机记录区:可以安装开机管理程序的地方,有446字节
    • 分区表:记录整块磁盘分区的状态,有64字节,因为分区表只有64字节的大小,最多有4组记录区,每组记录区记录了该区端的范围(起始柱面号)
    • 结束标志占2个字节:AA 55

    img

  2. MBR 位于整块磁盘的0磁道0柱面1扇区位置

  3. 按照上述大小分布,就意味着只有16*4,4个分区记录,这个4个分区记录被称为主分区(Primary)和扩展分区(Extended)

    • 所谓的分区就是对这64字节进行设置
    • 磁盘默认仅能写入4组分区信息
    • 分区的最小单位一般是柱面
  4. 通过扩展分区我们可以划分不止4个分区

    • 思考初衷:利用额外的扇区来记录更多的分区信息
    • 扩展分区本身不拿来格式化使用,而是使用额外的扇区来记录分区信息
    • 由扩展分区继续切出来的分区,叫做逻辑分区(logical partition)
  5. 总结

    • 主分区与扩展分区最多可以存在4个
    • 扩展分区最多只能一个
    • 逻辑分区是由扩展分区持续切割出来的分区
    • 可以被格式化后拿来使用的只有主分区和逻辑分区,扩展分区无法被格式化使用
    • 由于每组分区表仅有16字节,记录的信息是有限制的,无法分区大于2T以上的磁盘,存放的引导程序大小仅限于446字节

GPT(GUID partition table)

  1. GPT 将磁盘所有区块以 LBA(逻辑区块位址)来规划,默认是 512 字节,并使用了34个 LBA 区块来记录分区信息,整个磁盘的最后33个LBA也拿来作为另一个备份使用

    image-20220907145218883

  2. LBA0:相容于 MBR 模式,前446字节存储开机管理程序,原本记录的分区表位置,放置了一个标记磁盘为 GPT 格式的记录,不懂 GTP 分区表的磁盘管理程序就不会认识这个磁盘了

  3. LBA1(GPT表头记录):记录了分区表本身的位置和大小,同时记录了备份用的 GTP 分区位置,还放置了分区表的检验机制码(CRC32),操作系统可以根据这个检验码判断 GTP 是否正确,有错误的话,可以通过这个记录来取得备份的 GPT,来进行一个恢复

  4. LBA2-33(实际记录分区信息处):一个 LBA 可以记录4个分区信息,所以默认情况下,磁盘可以有4*32=128个分区信息,支持最大的容量限制也是很大很大的,至少得200多个T了吧

  5. GPT 分区没有所谓的主分区、扩展分区、逻辑分区的说法,每一个分区都可以独立存在,每一个都是主分区,每一个分区都可以拿来格式化后使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux基础笔记17 的相关文章

  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • XAMPP Windows 上的 Php Cron 作业

    嗯 我是这个词的新手CRON 据我所知 这是一个Unix安排特定操作在定义的时间间隔后执行的概念 我需要运行一个php文件 每小时更新一次数据库 但我的困惑在于安排执行 我在用XAMPP用于 Windows 7 上的本地开发测试 我发现了什
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar

随机推荐

  • CoordinatorLayout 的滑动监听--自定义

    public abstract static class AppBarStateChangeListener implements AppBarLayout OnOffsetChangedListener public enum State
  • Nginx实战练习

    1 Nginx安装 以centos7为例 详解博文 Nginx安装搭建之源码方式 Centos7 centos7源码安装nginx IT之一小佬的博客 CSDN博客 2 简单搭建站点 2 1 单个站点搭建 正常开放情况下 开发代码防止网站的
  • require() of ES modules is not supported.

    问题 如图所示 看了一些答案是版本问题 解决办法其其实提示已经有了 use import 找到提示的文件 require改为import 问题即可解决
  • 前端如何接接口

    前端一般静态页面写完后 就要从后端获取数据了 就要进行接接口 接接口其实说白了就是发送网络请求 从后端获取数据 然后再将数据渲染到页面上 今天就以一个简单的uniapp项目为例 介绍一下接口怎么写 首先 是封装一个request js文件
  • rockchip rk3368(px5)车载开发之路6,系统开机bootanimation播放视频需求

    本系列记载作者来到一个新的车载后装市场小公司 负责从新开始维护一套代码的心路过程 系统使用瑞芯微的rk3368芯片 版本是PX5 Android 8 0 release 20180726 从无到有的每个patch修改以及思考 其中着重点是驱
  • PyTorch知识点总结100问

    PyTorch知识点总结 什么是PyTorch 它有什么特点和优势 PyTorch中的张量 Tensor 是什么 它与NumPy中的数组有何区别 请介绍一下PyTorch的执行流程 PyTorch中的autograd是什么 它有什么作用 请
  • Salesforce中国区解散,谁是替代的最佳选择?

    摘要 全球第一大CRM厂商退出 对中国市场有何影响 8月3日 Salesforce中国区解散的消息 在IT业界引发热议 虽然是全球第一大CRM厂商 但Salesforce在中国区业务不多 整个团队只有60 70人规模 主要业务是全球500强
  • 分布式系统消息通信技术:MOM与RPC

    一 中间件 什么是中间件 中间件 Middleware 是处于操作系统和应用程序之间的软件 也有人认为它应该属于操作系统中的一部分 人们在使用中间件时 往往是一组中间件集成在一起 构成一个平台 包括开发平台和运行平台 但在这组中间件中必须要
  • ifconfig命令无法识别,提示“Command 'ifconfig' is available in '/sbin/ifconfig'”

    有台虚拟机 用的时候发现ifconfig命令不好用了 提示如下 Command ifconfig is available in sbin ifconfig The command could not be located because
  • 需求:vue用流程图展示数据

    问题描述 如标题所示 粗略的写了一版 没有细化 UI 红框的地方本来想用canvas自己写 但是找资料的时候发现了一个插件LeaderLine 非常符合要求 然后发现了一篇文章vue横向树级组件 流程图 组件递归 套用了一下 然后按照自己的
  • 将json-bigint处理为数值分区数组的字段全部自动转为字符串

    json bigint虽然能帮我们处理好id 但 他的模式 显然不是直接可以用的 我们如果要到业务逻辑单独处理 那就太麻烦了 对系统也非常不友好 我们可以在vue项目中 src目录下创建一个utils 下面创建一个conversionLon
  • 线程共享&&独有

    线程共享 进程代码段 进程的公有数据 利用这些共享数据 线程很容易的实现相互之间的通讯 进程打开的文件描述符 信号的处理器 进程的当前目录和进程用户ID与进程组ID 线程独有 线程ID 桟 错误返回码 error 线程优先级
  • IDEA配置仓库提交简易说明

    1 码云注册并创建仓库 2 IDEA顶部菜单VCS 如果没有 删除代码文件夹里面的 git文件 3 Create git 4 选择需要提交的代码文件夹 5 IDEA顶部菜单Git 6 Commit 提交暂存 选择需要提交的代码文件 选择Co
  • SQLi LABS Less-18

    第十八关请求方式为 GET请求 注入点为 User Agent 注入方式为 错误注入 第一步 判断注入方式 先看源码 后台代码对 特殊字符进行了过滤 常规的注入方式行不通 只有通过代码审计来判断注入方式 登录成功后 有一个保存用户主机信息的
  • 文本三剑客之sed

    sed简介 sed 是Linux中提供的一个外部命令 他是一个行 流 编辑器 非交互式的对文件内容进项增删改查操作 那它和文本编辑器有什么区别呢 区别是 文本编辑器 编辑对象是文件 行编辑器 编辑对象是文件中的行 也就是前者一次处理一个文本
  • Anaconda使用conda连接网络时,出现网络错误CondaHTTPError(包括Anaconda安装与入门)

    今天准备安一个Anaconda来管理我的Python环境 在官网下载支持Python3 7的版本 直接安装即可 使用Anaconda Navigator可以方便地创建环境和管理各种外部包 conda version 查看版本 是否安装成功
  • element-ui 中标签el-select选中无反应问题

    el select标签 如果外部还嵌套循环 点击选中标签无反应 删除也不好使 原因由于层次太多 导致render函数没有自动更新 在el select标签内加入 change forceUpdate 强制刷新视图即可
  • 怎样删除Github中的项目

    我们在GitHub上创建项目的时候 如果想要删除当前项目 怎样进行操作呢 下面就简单介绍一下怎样去删除GitHub中的项目 1 选择要删除的项目 2 进入项目中的setting 设置 中 3 一直下拉 看到有红色字体出现 进入Danger
  • 都2022年了,出去面试连分布式锁的源码你都不会画?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 写在前面 二 Redisson实现Redis分布式锁的底层原理 1 加锁机制 2 锁互斥机制 3 watch dog自动延期机制 4 可重入加锁机制 5 锁
  • Linux基础笔记17

    磁盘基础概念知识 计算机主要存储媒介之一 由一个或多个铝制 玻璃的碟片组成 碟片外覆盖具有铁磁性材料 磁盘内部由磁道 柱面 扇区 磁头等关键部位组成 Linux 系统中硬件设备文件放在 dev 下 不同磁盘接口 系统识别的设备名称不一样 I