当前位置: 首页 > news >正文

Linux文件系统原理

Linux文件系统

冯诺依曼在1945年提出计算机的五大组成部分
运算器:CPU
控制器:CPU
存储器:内存和硬盘
输入设备:鼠标、硬盘
输出设备:显示器

一、硬盘结构

机械硬盘结构

在这里插入图片描述

  1. 扇区:硬盘的最小存储单位,大小为512字节
  2. 磁道:由扇区组成的园
  3. 柱面:多扇片下,所有盘片的同一磁道组成的
固态硬盘结构

固态硬盘的特点

固态硬盘,使用固态电子芯片阵列而制成的硬盘,由控制单元和存储单元组成

特点:读写快、噪音低、防震、轻薄,有写入次数限制,容量较小、价格高

在固态硬盘中,为了便于理解,有逻辑上的磁道、扇区的概念

二、Centos6 下的ext4文件系统

1.磁盘使用流程
对硬盘进行分区
格式化指定文件系统
挂载使用

分区:MBR与GPT

MBR分区方式

  • 主引导记录 是位于磁盘最前边的一段引导代码
  • 主引导程序 占用了446byte
  • 分区表 占用了64byte,16标识一个分区
  • 有效标识符占用了2byte,标记MBR是否有效

GPT分区方式

  • 现存系统最大支持128个主分区
  • 最大支持18EB分区
  • 提供分区表的冗余
  • 实现分区表备份与安全
2.使用虚拟机进行MBR分区

1.关机添加硬盘

2.查看是否添加成功 ls /dev/sda

3.使用fdisk+设备文件名进行分区

#进入分区界面
[root@localhost ~]# fdisk /dev/sda1
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0xd4897b23 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助)

​ fdisk交互页面中可用选项有

m:寻求帮助d:删除分区l:显示分区类型n:新建分区
p:显示分区表信息q:不保存退出t:修改分区id,l可查看w:保存并退出
3.格式化与挂载

在这里插入图片描述

super block:超级块,记录每个分区的block的大小、数量

inode表:用来快速搜索磁盘上的索引节点

data block:数据块,保存真实数据的位置,block的大小和数量在格式化成文件系统已经固定,除非重新格式化,否则不能修改。

单个文件占用小于一个block的大小时,单独占用一个block,剩余空间不会被利用。

inode:i节点,记录inode号、权限、属主属组、时间戳、大小、占了那几个block。

3.1 查看使用的扇区
fdisk -l 设备文件
[root@localhost ~]# fdisk -l磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b1fe4设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1050623      524288   83  Linux
/dev/sda2         1050624    41943039    20446208   8e  Linux LVM
3.2 查看分区情况
fdisk -l 设备文件  查看分区情况[root@localhost ~]# fdisk -l /dev/sdb1磁盘 /dev/sdb1:3221 MB, 3221225472 字节,6291456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
3.3 格式化:
命令格式:mkfs.文件系统类型 磁盘路径[root@localhost ~]# mkfs.xfs /dev/sdb2
3.4 挂载
命令格式:mount -t 文件系统类型 路径 挂载点补充:df -h 查看已挂载的磁盘空间使用情况df -i 查看已挂载的inode号
3.5 永久挂载
blkid 查询UUID
选择需要挂载的分区,复制到/etc/fstab[root@localhost ~]# blkid
/dev/sda1: UUID="c198eb8b-f5d7-4dd1-9083-dc4168a9588d" TYPE="xfs" 
/dev/sda2: UUID="xCaOvp-L9To-Obc9-5BLe-d9ES-vncR-Iz9pqm" TYPE="LVM2_member" 
/dev/sdb1: UUID="371168b5-8eaf-4ddc-b26a-9e283ea06181" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="333657ff-e432-4b66-bca9-9201ce9f726c" 
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=c198eb8b-f5d7-4dd1-9083-dc4168a9588d /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=371168b5-8eaf-4ddc-b26a-9e283ea06181 /root/disk1 xfs defaults  0 0 
3.6 查看UUID
1.dumpe2fs -h 分区设备名2.ls -l /dev/disk/by-uuid/
[root@localhost ~]# ls -l /dev/disk/by-uuid/
总用量 0
lrwxrwxrwx. 1 root root 10 514 04:29 131eb8b0-a1b4-47d0-9d94-c2571c083711 -> ../../dm-13.查看分区文件系统:df -T 

补充命令:

partprode:将磁盘分区变化信息通知内核,请求操作系统重新加载分区表-s:显示磁盘分区汇总信息-h:显示帮助信息fack:文件系统修复
格式:fack -y 分区名

三、Centos 7下的XFS文件系统

XFS每个单个文件系统量最大支持8eb,单个文件可以支持16tb。

XFS是一个适合高容量磁盘与 巨型文件的文件系统

1.XFS组成部分

XFS文件系统在数据的分布上主要分为三部分:

数据区(data section)

文件系统活动登录区(log section)

实时运行区(realtime section)

2.XFS文件系统相关查询命令
df -t #查看已经挂载分区的文件系统类型xfs_info 挂载点/设备文件名 #查看已挂载XFS文件系统元数据信息命令blkid #列出设备的UUID等参数lsblk #查看设备详细信息
[root@localhost ~]# lsblk /dev/sdb2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb2   8:18   0   2G  0 part [SWAP]
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 19.5G  0 part ├─centos-root 253:0    0 18.5G  0 lvm  /└─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part [SWAP]
└─sdb2            8:18   0    2G  0 part [SWAP]
sr0              11:0    1 1024M  0 rom  
[root@localhost ~]# 
3.磁盘分区
GPT分区表
命令格式:gdisk 设备文件完整路径 #分区完成后,可以通过查看/proc/partitions来确定分区是否修改成功partprode -s #更新Linux内核的分区表信息
4.磁盘格式化
mkfs.xfs 创建xfs文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1
5.文件系统挂载

挂载:mount

选项-a:根据/etc/fstab文件,将所有磁盘进行挂载-t:指定文件系统类型来进行挂载-o:挂载特殊选项
6.开机自动挂载

开机自动挂载需要写入配置文件/etc/fstab

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=866208a7-b3a2-4998-b20a-4c8dc6ecd0dc /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

第一列:磁盘设备文件名或UUID

第二列:挂载点

第三列:磁盘分区的文件系统

第四列:文件系统参数

async/sync(异步、同步)设置磁盘是否以异步方式运行,默认异步(性能较佳)
auto/noauto自动、手动,默认文件系统自动挂载
rw/ro读写、只读,设置磁盘以读写或者只读运行
exec/noexec执行、不执行。限制文件系统可执行操作
suid/nosuid该文件系统是否允许SUID权限存在
defaults同时拥有rw、suid、dev、exec、suto、async等功能

第五列:能否被dump备份(0:不备份,1:每天备份,5不定期备份)

第六列:是否以fsck检验扇区

补充命令
stat:文件名、文件大小、占用block数量、单个block大小、所在设备编号、inode号、硬链接数、权限、属主属组、访问时间、数据修改时间、状态修改时间[root@localhost ~]# stat .cshrc 文件:".cshrc"大小:100       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:33942934    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2013-12-29 10:26:31.000000000 +0800
最近更改:2013-12-29 10:26:31.000000000 +0800
最近改动:2024-04-22 22:46:36.028008307 +0800
创建时间:-
cat:改变访问时间
vim:改变数据修改时间
chmod、chown:权限的变动改变状态修改时间
[root@localhost ~]# 
命令格式:du 目录或分区挂载点
命令选项:
-a:列出目录下所有子文件和子目录占用空间大小(默认列出子目录)。
-h:以常见单位显示目录大小。
-s:递归式显示目录下所有子文件子目录占用总空间。

挂载的三种方式

临时挂载:mount
永久挂载:vim  /etc/fstab
mount -a:重新挂载/etc/fstab
扩展swap分区

swap指的是交换分区(swap space),它是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是两者的组合。

	1.修改分区ID
[root@localhost ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10Partition table scan:MBR: protectiveBSD: not presentAPM: not presentGPT: presentFound valid GPT with protective MBR; using GPT.Command (? for help): n
Partition number (3-128, default 3): 
First sector (34-41943006, default = 8390656) or {+-}size{KMGTP}: 
Last sector (8390656-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 68E53DD4-EB72-44D6-A891-EC8367BDD529
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 29360061 sectors (14.0 GiB)Number  Start (sector)    End (sector)  Size       Code  Name1            2048         4196351   2.0 GiB     8200  Linux swap2         4196352         8390655   2.0 GiB     8200  Linux swap3         8390656        12584959   2.0 GiB     8200  Linux swap
#8200是Centos7中的swap的默认systemID 
Command (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.2.mkswap /dev/sdb3  #swap格式化3.swapon  /dev/sdb3  #开启设备swapoff /dev/sdb3  #关闭设备4.free -k -m -g -h   #查看swap情况
[root@localhost ~]# free -k  #以kb显示swap大小total        used        free      shared  buff/cache   available
Mem:         995892      664036       68396       26972      263460      101380
Swap:       5242868       21768     5221100
[root@localhost ~]# free -g  #以gb显示swap大小total        used        free      shared  buff/cache   available
Mem:              0           0           0           0           0           0
Swap:             4           0           4
[root@localhost ~]# free -m  #以mb显示swap大小total        used        free      shared  buff/cache   available
Mem:            972         648          66          26         257          99
Swap:          5119          21        5098
[root@localhost ~]# free -h    #以常见单位显示swap大小total        used        free      shared  buff/cache   available
Mem:           972M        648M         66M         26M        257M         99M
Swap:          5.0G         21M        5.0G
[root@localhost ~]# 

ble
Mem: 972 648 66 26 257 99
Swap: 5119 21 5098
[root@localhost ~]# free -h #以常见单位显示swap大小
total used free shared buff/cache available
Mem: 972M 648M 66M 26M 257M 99M
Swap: 5.0G 21M 5.0G
[root@localhost ~]#


注:fdsik命令可以在centos6、7版本使用,gdisk在centos7可以使用,如果需要在centos6使用yum安装即可

相关文章:

Linux文件系统原理

Linux文件系统 冯诺依曼在1945年提出计算机的五大组成部分 运算器:CPU 控制器:CPU 存储器:内存和硬盘 输入设备:鼠标、硬盘 输出设备:显示器一、硬盘结构 机械硬盘结构 扇区:硬盘的最小存储单位&#xff…...

初识Spring Cache:如何简化你的缓存处理?

文章目录 1、Spring Cache介绍2、 常用注解3、 使用案例 1、Spring Cache介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的…...

攻防世界[GoodRe]

攻防世界[GoodRe] 学到知识: 逆向的精髓:三分懂,七分蒙。TEA 算法快速识别(蒙): 数据处理的形式:进入加密时的数据和加密结束后的数据,处理时数据的分组等等,都能用来…...

IntelliJ IDEA实用插件:轻松生成时序图和类图

IntelliJ IDEA生成时序图、类图 一、SequenceDiagram1.1 插件安装1.2 插件设置1.3 生成时序图 二、PlantUML Integration2.1 插件安装2.2 插件设置2.3 生成类图 在软件建模课程的学习中,大家学习过多种图形表示方法,这些图形主要用于软件产品设计。在传统…...

SpringBoot + Mybatis-Plus中乐观锁实现

悲观锁 悲观锁是一种悲观思想,它认为数据很可能会被别人所修改 所以总会对数据进行上锁,读操作和写操作都会上锁,性能较低,使用较少! 乐观锁 乐观锁是一种乐观思想,它认为数据并不一定会被别人所修改 所以…...

设计模式深度解析:分布式与中心化,IT界两大巨头“华山论剑”

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨IT界的两大巨头交锋✨ 👋 在IT界的广阔天地中,有两座…...

转行一年了

关注、星标公众号,直达精彩内容 ID:技术让梦想更伟大 整理:李肖遥 来公司一年了。 说是转行其实还是在半导体行业,熟悉我的朋友知道 ,我在18年开始进入半导体行业,那个时候想着行业很重要,站对了…...

【LeetCode 151】反转字符串中的单词

1. 题目 2. 分析 这题要是用Python写,就非常简单了。 3. 代码 class Solution:def reverseWords(self, s: str) -> str:s " ".join(reversed(s.strip().split()))return s...

Behind the Code:Polkadot 如何重塑 Web3 未来

2024 年 5 月 17 日 Polkadot 生态 Behind the Code 第二季第一集 《创造 Web3 的未来》正式上线。第一集深入探讨了 Polkadot 和 Web3 技术在解决数字身份、数据所有权和去中心化治理方面的巨大潜力。 🔍 查看完整视频: https://youtu.be/_gP-M5nUidc?…...

for循环里如果std::pair的类型写不对,可能会造成性能损失

第一版 std::map<int, int> t;t.emplace(1, 1);for (const std::pair<int,int>& data : t){int i 0;std::ignore i;}中间留一些空格&#xff0c;是因为ms在调试的时候&#xff0c;尤其是模板比较多的时候&#xff0c;经常断点的行号有问题。比如第5行的断点&…...

【Linux】Linux的基本指令_2

文章目录 二、基本指令8. man9. nano 和 cat10. cp11. mv12. echo 和 > 和 >> 和 <13. more 和 less14. head 和 tail 和 | 未完待续 二、基本指令 8. man Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问…...

Effective C++(3)

3.资源管理 条款13&#xff1a;以对象管理资源 以对象管理资源对于传统的堆资源管理&#xff0c;我们需要使用成对的new和delete&#xff0c;这样若忘记delete就会造成内存泄露。因此&#xff0c;我们应尽可能以对象管理资源&#xff0c;并采用RAII&#xff08;Resource Acqu…...

自定义RedisTemplate序列化器

大纲 RedisSerializerFastJsonRedisSerializer自定义二进制序列化器总结代码 在《RedisTemplate保存二进制数据的方法》一文中&#xff0c;我们将Java对象通过《使用java.io库序列化Java对象》中介绍的方法转换为二进制数组&#xff0c;然后保存到Redis中。实际可以通过定制Red…...

Flutter 中的 CupertinoContextMenuAction 小部件:全面指南

Flutter 中的 CupertinoContextMenuAction 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CupertinoContextMenuAction 是一个专门用于构建 iOS 风格的上下文菜单选项的组件。它为用户提供了一种便捷的方式来执行与特定项目相关的操作&#xff0c;例如在列表项上长按可…...

Element-Ul快速入门

引言 Element UI是一个vue.js的桌面UI库。它提供了一套丰富、灵活和实用的UI组件&#xff0c;使开发者能以最少的时间和代码量完成复杂的界面设计。本文将会介明如何快速上手Element UI。 安装和基本使用 首先&#xff0c;你需要在你的项目中安装Element UI。如果你已经安装…...

Django的模型层——2模型实例

1. 类的属性 objects&#xff1a;是Manager类型的对象&#xff0c;用于与数据库进行交互 当定义模型类时没有指定管理器&#xff0c;则Django会为模型类提供一个名为objects的管理器 支持明确指定模型类的管理器 class BookInfo(models.Model):...books models.Manager()当为…...

Python筑基之旅-MySQL数据库(四)

目录 一、数据表操作 1、新增记录 1-1、用mysql-connector-python库 1-2、用PyMySQL库 1-3、用PeeWee库 1-4、用SQLAlchemy库 2、删除记录 2-1、用mysql-connector-python库 2-2、用PyMySQL库 2-3、用PeeWee库 2-4、用SQLAlchemy库 3、修改记录 3-1、用mysql-conn…...

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统&#xff0c;在用户系统需要访问数据时&#xff0c;有着至关重要的作用。在这些交互中&#xff0c;SQL 语言是应用与数据库系统之间“沟通”的桥梁&#xff0c;它负责将应用的指令传达给数据库。因此&#xff0c;SQL 的性能好坏直…...

C++之std::is_trivially_copyable(平凡可复制类型检测)

目录 1.C基础回顾 1.1.平凡类型 1.2.平凡可复制类型 1.3.标准布局类型 2.std::is_trivially_copyable 2.1.定义 2.2.使用 2.3.总结 1.C基础回顾 在C11中&#xff0c;平凡类型&#xff08;Trivial Type&#xff09;、平凡可复制类型&#xff08;TrivialCopyable&#x…...

宝石收集,tarjan

0宝石收集 - 蓝桥云课 (lanqiao.cn) nint(input()) s0input() mint(input()) mp[[] for i in range(n1)] for i in range(m):a,bmap(int,input().split())a1b1mp[a].append(b)import sys sys.setrecursionlimit(100000000) dfn[0 for i in range(n1)] low[0 for i in range(n1…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...