Linux文件系统管理

Linux文件系统管理

磁盘的组成与分区

img

计算机用于存取文件的硬件是磁盘,磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成, 而数据的写入其实是在磁盘盘上面。磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇区的物理量设计有两种大小,分别是 512bytes 与 4Kbytes。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avbBvQnt-1691937209195)(C:\Users\duxianrui\AppData\Roaming\Typora\typora-user-images\image-20230813132907931.png)]

分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。分区主要有两国目的:一个是数据安全性考虑,比如windows重装系统的时候可以先把重要数据移动到其他分区,然后在c盘再重装系统就不会丢失重要数据。另一个原因是系统运行效率考量,分区时候磁盘寻址范围变小了,每次只需要在分区内寻址,增加寻址效率。

文件系统特性

文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、 群组、时间参数等)。文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

  • superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;、
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

Linux 的 EXT2 文件系统(inode)

标准的 Linux 文件系统 Ext2 就是使用这种 inode 为基础的文件系统。

Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。

在这里插入图片描述

block

Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种,因为 block 大小而产生的 Ext2 文件系统限制如下:

在这里插入图片描述

inode

inode 要记录的数据非常多, 但容量只有 128bytes , 而 inode 记录一个 block 号码要花掉 4byte ,假设我一个文件有 400MB 且每个 block 为 4K 时, 那么至少也要十万笔 block 号码的记录,因此inode与block之间的对应关系使用了类似二级页表这样的机制来实现,inode 记录 block 号码的区域定义为 了12 个直接,一个间接, 一个双间接与一个三间接记录区。
在这里插入图片描述

inode 本身 (128 bytes),里面有 12 个直接指向 block 号码的对照,因此如果一个block的容量大小是1k的话,将直接、间接、双间接、三间接加总,得到 12 + 256 + 256 * 256 + 256 * 256 * 256 (K) = 16GB,也就是说能够容纳的最大文件为16GB。

superblock

Superblock 是记录整个 filesystem 相关信息的地方,没有 Superblock ,就没有这个filesystem 了。 他记录的信息主要有:

  • block 与 inode 的总量;
  • 未使用与已使用的 inode / block 数量;
  • block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);
  • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
  • 一个 valid bit 数值,若此文件系统已被挂载,则valid bit为0 ,若未被挂载,则valid bit为1 。

此外每个block group还有一些其他的内容:

  • Filesystem Description (文件系统描述说明)。描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

  • block bitmap (区块对照表)。从 block bitmap 当中可以知道哪些 block 是空的,删除某些文件时,那么那些文件原本占用的 block 号码就得要释放出来

  • dumpe2fs: 查询 Ext 家族 superblock 信息的指令。

    首先使用blkid命令列出所有被初始化的装置
    在这里插入图片描述

选择一个装置查看具体信息
在这里插入图片描述

与目录树的关系

当我们在 Linux 下的文件系统建立一个目录时,文件系统会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。

查看目录下文件所占用的 inode 号码时,可以使用 ls -li 这个选项来处理:

在这里插入图片描述

文件系统的简单操作

磁盘与目录的容量

两个重要的指令:df, du

  • df:列出文件系统的整体磁盘使用量;
  • du:评估文件系统的磁盘使用量(常用在推估目录所占容量

df

选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示

直接使用df列出所有的filesystem
在这里插入图片描述

Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
1k-blocks:说明底下的数字单位是 1KB!可利用 -h-m 来改变容量;
Used:使用掉的磁盘空间
Available:也就是剩下的磁盘空间大小;
Use%:磁盘的使用率
Mounted on:就是磁盘挂载的目录所在

加上-h以直观的方式查看容量
在这里插入图片描述

如果df后面接的是文件或者目录,也可以自动转换为其所在的分区,并列出分区详细信息

!](https://img-blog.csdnimg.cn/3edf05d6ce554617925b11d152e4f3b4.png)

du

选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

直接使用du命令,会列出当前目录所有文件的大小,单位是kb,加上-a参数就是列举所有文件:
在这里插入图片描述

使用通配符的方式,检查根目录下每个目录所占的容量:
在这里插入图片描述

如果想要检查某个目录下,哪个次目录占用最大的容量,可以用这个方法找出来。

实体链接与符号链接

首先明确两点:

  • 每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
  • 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。

实体链接

因此文件名只与目录有关,但是文件内容则与 inode 有关。所以所谓的实体链接(hard link)也就是在目录下新增一个文件并与一个inode关联,因此一个inode可以对应多个文件名,那么这两个拥有相同inode的文件实际上对应了完全一样的内容。

在这里插入图片描述

使用ln命令可以进行实体链接,上面的例子可以看到,两个文件夹指向了相同的位置。

hard link有两个限制:

  • 不能跨 Filesystem;
  • 不能 link 目录。

符号链接

符号链接Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件名,所以,当来源档被删除之后,symbolic link 的文件就无法使用。
在这里插入图片描述

符号链接实际上就类似于windows里面的创建快捷方式。上面这个快捷方式只有12byte,这12byte实际上就是存的目标位置的路径名。

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

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

相关文章

pc端网页用vue并且实现响应式 vue+bootstrap-vue

1、hbuiler内新建vue项目 在项目文件夹下用npm加载依赖(或者用hbuilder内打开命令) 2、配置路由 src内新建router文件夹,router内新建index.js index.js内配置重定向到首页 main.js内配置路由 import router from /router/index.js new…

J35复杂链表的复制

题目地址:复杂链表的复制_牛客题霸_牛客网 题目回顾: 解题思路: 这里我们采用双指针的方法。 我们在创建节点的时候,可能当前节点创建了,但是当前节点的随机指针指向的节点还没创建,这种情况下&#xff…

JVM 基础

巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化&am…

zookeeper案例

目录 案例一:服务器动态上下线 服务端: (1)先获取zookeeper连接 (2)注册服务器到zookeeper集群: (3)业务逻辑(睡眠): 服务端代码…

RHEL 7配置HAProxy实现Web负载均衡

一、测试环境HAProxy: 主机名:RH7-HAProxy IP地址:192.168.10.20 操作系统:Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装 防火墙与SELinux:关闭 安装的服务:HAProxy-1.5.14 WEB01: 主…

Javascript异步编程的4种方法

你可能知道,Javascript语言的执行环境是"单线程"(single thread)。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一…

msvcp110.dll丢失怎样修复,msvcp110.dll丢失修复方法

msvcp110.dll是Microsoft C库的一部分,它是运行依赖于该库的程序所必需的动态链接库文件。它的作用是提供C运行时库函数的实现,这些函数用于处理程序的内存管理、异常处理、多线程支持等。当系统中缺少或损坏了msvcp110.dll文件时,请及时修复…

Python-OpenCV中的图像处理-图像梯度

Python-OpenCV中的图像处理-图像梯度 图像梯度Sobel 算子和 Scharr 算子Laplacian 算子 图像梯度 图像梯度,图像边界等使用到的函数有: cv2.Sobel(), cv2.Scharr(), cv2.Laplacian() 等原理:梯度简单来说就是求导。Op…

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验。

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,支持网络检索问答、领域知识问答、任务引导问答和闲聊问答,为您提供全方位的对话交互体验。 人机对话系统一直是AI的重要方向&#xf…

Mongodb 常用操作

// 查询 user_id 是否存在 db.getCollection("t_mongo_user").find({"user_id" : { $exists: true }}) // 查询 user_id 10 的记录 db.getCollection("t_mongo_user").find({"user_id" : 10}) // 排序 -1,按照 _id 倒…

python之matplotlib入门初体验:使用Matplotlib进行简单的图形绘制

目录 绘制简单的折线图1.1 修改标签文字和线条粗细1.2 校正图形1.3 使用内置样式1.4 使用scatter()绘制散点图并设置样式1.5 使用scatter()绘制一系列点1.6 python循环自动计算数据1.7 自定义颜色1.8 使用颜色映射1.9 自动保存图表练习题 绘制简单的折线图 绘制一个简单折线图…

每期一个小窍门: 玩转go mod 命令

看完本期小窍门 你将学会 go下载/更新 包的命令如何挎包调用/路径名称约定init()函数的作用和一些细节 本文涉及到的目录结构如下 关于 go.mod go.sum 这个demo依赖 github.com/bytedance/sonic 可以使用下面两个命令来确保依赖正常加载 go get github.com/bytedance/son…

2023年上半年数学建模竞赛题目汇总与难度分析

2023年上半年数学建模竞赛题目汇总与难度分析 ​由于近年来国赛ABC题出题方式漂浮不定,没有太大的定性,目前总体的命题方向为,由之前的单一模型问题变为数据分析评价优化或者预测类题目是B、C题的主要命题方向。为了更好地把握今年命题的主方…

【源码分析】XXL-JOB的执行器的注册流程

目的:分析xxl-job执行器的注册过程 流程: 获取执行器中所有被注解(xxlJjob)修饰的handler执行器注册过程执行器中任务执行过程 版本:xxl-job 2.3.1 建议:下载xxl-job源码,按流程图debug调试,看堆栈信息…

gcc/g++ 编译选项详解

gcc/g 编译选项详解 文章目录 gcc/g 编译选项详解编译步骤gcc 与 g 区别gcc 命令的常用选项编译优化选项-O 优化-O1优化-O2-O0-Os-Ofast-Og-Oz-O 选项控制特定的优化 WarningsReference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 编译步骤 gcc 、…

Shell编程之正则表达式(非常详细)

正则表达式 1.通配符和正则表达式的区别2.基本正则表达式2.1 元字符 &#xff08;字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…

Ansible从入门到精通【六】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 ansible templates 模板&#xff08;templa…

闭环控制方法及其应用:优缺点、场景和未来发展

闭环控制是一种基本的控制方法&#xff0c;它通过对系统输出与期望值之间的误差进行反馈&#xff0c;从而调整系统输入&#xff0c;使系统输出更加接近期望值。闭环控制的主要目标是提高系统的稳定性、精确性和鲁棒性。在实际应用中&#xff0c;闭环控制有多种方法&#xff0c;…

释放AI创作潜能:从大模型训练到高产力应用

文章目录 每日一句正能量前言什么是人工智能生成内容&#xff08;AIGC&#xff09;人工智能生成内容&#xff08;AIGC&#xff09;能做什么为什么要用人工智能生成内容&#xff08;AIGC&#xff09;创作成果用Java实现冒泡排序算法学生信息收集系统学生请假管理系统需求分析教务…

苹果电脑图像元数据编辑器:MetaImage for Mac

MetaImage for Mac是一款功能强大的照片元数据编辑器&#xff0c;它可以帮助用户编辑并管理照片的元数据信息&#xff0c;包括基本信息和扩展信息。用户可以根据需要进行批量处理&#xff0c;方便快捷地管理大量照片。 MetaImage for Mac还提供了多种导入和导出格式&#xff0…