目录
一、硬盘介绍
文件系统是Linux系统的核心,在Linux系统中,一切皆文件。对于开发者而言,编程过程中通常用到的是文件IO。在open函数打开文件,read函数读取文件的过程底层原理如何?本文件系统系列文章主要尝试针对的是这部分内容进行深入的讲解。
文件最终是存储在磁盘上,文件的存取,最终是读写磁盘。
1、硬盘的物理结构
1.1、硬盘结构
其中:
-
每个盘片有两面,两面都可以存储数据。
-
每个盘面都有一个磁头,用于存取数据。
-
所有磁头都是固定的,一起做物理移动。但是每次只有一个磁头执行存取数据的任务,选择使用哪个磁头是由系统控制的。磁头间的切换非常迅速,而磁头摆动寻道则比较慢。
-
磁头摆动,找到要读取数据所在的磁道;盘片通过转动,将数据“送到”磁头下。
1.2、磁头数、磁道、柱面、扇区
-
磁头数: 每个盘面都有一个磁头,因此磁头数 = 盘面数。
-
磁道: 上以盘片轴心为圆心,不同半径的同心圆称为磁道,磁道不是真正肉眼可看见的一道一道“坑”,而是被磁盘上被磁化的区域,磁道之间有一定的间隙,以免磁道之间磁介质相互影响。
-
扇区: 每个磁道被等分为若干个弧段(扇区),每个扇区可以存放512个字节的数据。扇区是磁盘驱动器向磁盘读写数据的最小单元。
-
柱面: 不同盘片半径相同的磁道组成的一个“柱面”。
2、CHS编号
所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每个柱面、磁头、扇区都有自己的编号。
2.1、磁道编号规则
-
磁头编号: 从上到下,分别为磁头0号,磁头1号......
-
柱面编号: 最外圈的柱面编号为0,往里依次递增1,2,3.....
2.2、扇区编号规则
每个磁道都可以被分为若干个扇区,假设有18个扇区,编号依次为1,... 18。这里的1...18在一个磁道中是唯一的,但不同磁道之间会重复。因此,要确定一个扇区在硬盘(多个盘片)中的具体位置,则需要结合柱面号/磁头号/扇区号来确定——绝对扇区编号,或者是为整个硬盘的所有扇区分配一个唯一的编号——DOS扇区编号(也称为相对扇区编号或逻辑扇区编号)。
-
绝对扇区: 由柱面号/磁头号/扇区号唯一确定。
-
DOS(Disk Operating System)扇区(逻辑扇区): 磁盘操作系统为了管理方便,会将柱面号/磁头号/扇区号确定的扇区编号转换为易于管理和计算的单一数字编号,称为相对扇区编号或逻辑扇区编号。DOS扇区编号是从柱面0/磁头0/扇区1开始的,编号为0,依次递增,即柱面0/磁头0/扇区18的DOS扇区编号为18;柱面0/磁头1/扇区1的DOS扇区编号为19...。每个分区的第一个扇区的逻辑扇区编号为0。
2.3、通过CHS计算硬盘容量
硬盘存储容量=磁头数×柱面数×每个磁道扇区数×每个扇区字节数
3、磁盘存储划分
3.1、第一个扇区存储的数据
硬盘的第一个扇区(逻辑编号为0)可以说是整个硬盘最重要扇区了,它主要存储两大信息:
-
主引导分区(Master Boot Record,MBR): 存放引导加载程序,大小为446字节。
-
分区表(partition table): 记录整块硬盘分区的状态,占64字节,每一个分区信息占16个字节。
3.2、硬盘分区
分区的最小单位为柱面(Cylinder),也就是说,分区其实就是指定从第几个柱面到第几个柱面属于哪个区。
假设硬盘有400个柱面,平均分为4个区(C、D、E、F盘),则第四个分区F的柱面范围是第301号到第400号柱面。
分区表中,记录的就是就是每个分区的起始柱面号和结束柱面号。因为分区表只有64字节,因此最多只能容纳4个分区的记录(硬盘默认),要想分更多的去,则需要通过扩展分区来创建逻辑分区。
4、开机流程
-
加载BIOS: BIOS(Base Input Output System,基本输入输出系统,读做/'baious/)是硬件厂商写入到主板ROM里的一个程序,电脑开机时,会最先执行BIOS。
-
MBR: BIOS在执行的过程中,会根据用户设置(即在BIOS的Boot界面选择的优先启动项,U盘/硬盘/光驱),如果硬盘的优先级最高,则计算机会从硬盘的第一个扇区的MBR 中的读取引导加载程序(Boot Loader)。和BIOS一样,主引导分区MBR是硬件本身会支持的东西。
-
引导加载程序:引导加载程序(Boot Loader)是用于读取操作系统内核文件的一个小软件,不同的操作系统有各自的引导加载程序。每个分区都可以有自己的文件系统,有自己的引导扇区,在启动的过程中,用户可以选择是直接加载引导程序所在分区的操作系统,还是将引导加载功能交给各分区引导扇区中的加载程序。boot loader的功能主要有:
-
提供菜单:让用户选择不同的开机选项,是多重引导的重要功能。
-
载入内核文件:直接指向可开机的程序区段,开始操作系统。
-
转交其他loader: 将引导加载功能转交给其他loader负责。
-
-
操作系统内核文件:最后,引导加载程序加载操作系统的内核文件,启动操作系统!
5、要点
-
每个分区都有自己的引导扇区(boot sector)。
-
实际可开机的操作系统内核文件是存放在各个分区内的,如在C盘安装Windows系统,在D盘安装Linux操作系统。
-
引导加载程序(boot loader)只会认识自己所在分区内的可开机内核文件,以及其他boot loader(相当于一个指针,指向其他loader)。
-
loader可以直接指向或者间接地将管理权交给其他loader。
-
一点经验:如果要安装多系统,最好先安装Windows,后安装Linux。因为Windows会强制覆盖MBS,也就是说,如果你先装Linux再装Windows,MBR中就只有Windows的相关选项(Linux的被覆盖掉了)。而Linux则不会强制覆盖MBR,你可以选择将Linux的引导程序安装在MBR或者其所在分区的引导扇区中;你也可以在Linux的引导程序中设置Windows的开机选项。
6、磁盘存储数据的形式
磁盘以二进制的形式存储数据。我们平时编程过程中读写文件模式可能有文本形式/二进制形式,文件也有文本文件、音频文件、图片文件...等各种不同类型的文件,但这些文件在磁盘上都是以二进制的方式存储。
可以想像一下,二进制中的0,对应磁盘上的一个“凹”点,1对应磁盘上的一个“凸”点。
二、Linux文件系统
计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统的本质:一种方便管理、组织、访问数据的软件。
-
对于管理来说,主要是磁盘空闲空间的管理
-
对于组织来说,主要是通过引入文件(inode)、树形目录(dentry)来组织用户的数据。文件包含用户的数据、树形为用户提供了一个对数据进行分类的功能。
-
对于访问来说,通过目录+文件名的方式进行文件创建、删除、读、写(也就是所谓的增、删、查、改)。
1、根文件系统
根文件系统(rootfs)是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
2、虚拟文件系统
虚拟文件系统VFS软件抽象层为用户屏蔽了底层文件系统的差异,向上层提供了统一地访问接口。
3、真文件系统
真文件系统其实是实际存储设备的文件系统,挂载于EEPROM、 Nor FLASH、 NAND FLASH、 eMMC 等存储器中。
3.1、ext4
EXT4是第四代扩展文件系统(Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,使用64位空间记录块数量和i-节点数量。
3.2、xfs
XFS最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64位的文件系统,后来进行开源并且移植到了Linux操作系统中,目前CentOS 7将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
4、伪文件系统
Linux内核提供了sysfs、procfs、devtmpfs等伪文件系统,伪文件系统存在于内存,不占用硬盘。以文件地形式向用户提供一些系统信息,用户读写这些文件就可以读取、修改系统的一些信息。
4.1、procfs
procfs是 进程文件系统的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。
由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
4.2、devtmpfs
devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev(udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。),缩短 GNU/Linux 的开机时间。
如果将一个设备连接到Linux系统时,通常需要一个设备驱动程序才能正常工作。此时通过设备文件或设备节点与设备驱动程序交互,这些是看起来像普通文件的特殊文件。由于这些设备文件就像普通文件一样,所以可以使用ls、cat等程序与它们交互。这些设备文件一般存放在/dev目录下。
4.3、sysfs
sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。sysfs 文件系统被挂载在 /sys 挂载点上。
Sysfs的目的是更好地管理系统上的设备,相比/dev目录无法做到这一点。Sysfs是一个虚拟文件系统,通常挂载在/sys目录下。它为我们提供了比在/dev目录中能够看到的更详细的信息。目录/sys和/dev在某些方面看起来非常相似,但它们确实有很大的不同。基本上,/dev目录很简单,它允许其他程序访问设备本身,而/sys文件系统用于查看信息和管理设备。
/sys文件系统基本上包含了系统中所有设备的所有信息,比如制造商和型号、设备插入的位置、设备的状态、设备的层次结构等等。在这里看到的文件不是设备节点,因此实际上并不是在/sys目录下与设备交互,而是在管理设备。
三、磁盘分区与挂载
磁盘热扫描:
cd /sys/class/scsi_host
for i in `ls /sys/class/scsi_host`;do echo "- - -" > ${i}/scan;done
[root@localhost scsi_host]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 119G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 67G 0 lvm /home
sdb 8:16 0 20G 0 disk
sr0 11:0 1 9.5G 0 rom /run/media/root/CentOS 7 x86_64
1、磁盘分区方式
MBR
主引导记录,支持四个主分区或三主一扩展多个逻辑,每分区最大2TB,兼容性好。
GPT
是GUID分区表(GUID Partition Table)的缩写; 含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。 自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于18EB的总容量, 几乎没有上限,最大支持到128个分区,分区大小支持到256TB。
表示形式
硬盘:
/dev/hda:hd,表示硬盘的接口为IDE
/dev/sda:sd,表示硬盘的接口为scsi;a是硬盘的编号,如:b、c.....
分区:
/dev/sda1:第一个分区
/dev/sda2:第二个分区
假如使用MBR分区方式: 四个主分区,分别是:sda1,sda2,sda3,sda4;扩展分区:有且只能有一个,并且会占用主分区编号;
逻辑分区:基于扩展分区之上;/dev/sda5
2、分区命令
2.1、fdisk命令
fdisk - Linux分区表操作工具软件
语法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区> 给出分区大小(块数)
选项:
选项 | 作用 |
---|---|
-l | 显示系统中已安装的分区表 |
-s | 显示分区的扇区数 |
-u | 显示分区的单元号 |
-c | 检查分区表是否正确 |
-d | 显示分区表中的错误 |
-n | 显示分区的起始和结束扇区号 |
-v | 显示fdisk的版本信息 |
-m | 显示分区的媒体类型 |
-u | 指定分区的单元号 |
-o | 指定分区的文件系统编号 |
-r | 从新分区表中创建一个新的根分区 |
-L | 创建逻辑分区(可选) |
-p | 显示当前分区表的状态 |
-S | 设置分区的扇区大小(可选) |
-a | 设置分区的主引导记录(MBR)类型(可选) |
案例:
交互式分区
[root@c2407 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x41008f20 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
#解析
a 切换可引导标志
b 编辑 bsd 磁盘标签
c 切换 dos 兼容性标志
d 删除分区
g 创建新的空 GPT 分区表
G 创建 IRIX(SGI)分区表
l 列出已知分区类型
m 打印此菜单
n 添加新分区
o 创建新的空 DOS 分区表
p 打印分区表
q 不保存更改退出
s 创建新的空 Sun 磁盘标签
t 更改分区的系统 ID
u 更改显示/输入单位
v 验证分区表
w 将表写入磁盘并退出
x 额外功能(仅限专家
#分区类型
82 Linux 交换 / So
83 Linux
8e Linux LVM
创建主分区
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@c2407 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part
sr0 11:0 1 1024M 0 rom
创建扩展分区
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):
将使用默认值 41943039
分区 2 已设置为 Extended 类型,大小设为 15 GiB命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 41943039 15727616 5 Extended
创建逻辑分区
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (10489856-41943039,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-41943039,默认为 41943039):+5G
分区 5 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 41943039 15727616 5 Extended
/dev/sdb5 10489856 20975615 5242880 83 Linux
非交互创建分区
[root@c2407 ~]# vim fdisk.txt
n
p
+5G
w##################以上为文件内容######
fdisk /dev/sdb < fdisk.txt
[root@c2407 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
2.2、parted命令
语法:
parted [options] [device [command [options...]...]]
选项:
选项 | 作用 |
---|---|
-l,--list | 列出所有块设备上的分区布局 |
-h,--help | 显示此帮助信息 |
案例:
parted /dev/sdb
#对/dev/sdb进行分区或管理操作
(parted) mklabel gpt
#定义分区表格式
#(常用的有msdos和gpt分区表格式,msdos不支持2TB以上容量的磁盘,所以大于2TB的磁盘选gpt分
区表格式)
(parted) mkpart p1
#创建第一个分区,名称为p1
#(p1只是第一个分区的名称,用别的名称也可以,如part1)
File system type? [ext2]? ext3
#定义分区格式
#(不支持ext4,想分ext4格式的分区,可以通过mkfs.ext4格式化成ext4格式)
Start? 1
#定义分区的起始位置
#(单位支持K,M,G,T)百分比
End? 5T
#定义分区的结束位置
#(单位支持K,M,G,T)百分比
(parted) print
Number Start End Size File system Name 标志
#查看当前分区情况
(parted) rm
#rm删除命令
#(删除之前必须确保分区没有被挂载)
Partition number? 1
#删除第一个分区
Number
3、查看与识别命令
3.1、lsblk命令
lsblk - list block devices
语法:
lsblk [options] [device...]
选项:
选项 | 作用 |
---|---|
案例:
[root@c2407 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
3.2、partprobe命令
partprobe - inform the OS of partition table changes
语法:
partprobe [-d] [-s] [devices...]
选项:
选项 | 作用 |
---|---|
案例:
[root@c2407 ~]# partprobe /dev/sdb
3.3、blkid命令
查看磁盘分区的UUID
[root@c2407 ~]# blkid
/dev/mapper/centos-root: UUID="f2840324-c37b-4223-bd2c-fce06d067b06" TYPE="xfs"
/dev/sda2: UUID="42kMNt-GtE2-gNCd-bfIj-PPry-yTWY-TQ0B7r" TYPE="LVM2_member"
/dev/sda1: UUID="93d6db3e-561a-4e35-8b4d-7e8d3c9d0e91" TYPE="xfs"
/dev/sdb1: UUID="032cdca8-8800-46ef-82f3-cfa352f1ce5c" TYPE="xfs"
/dev/sdb2: UUID="5742659f-2f02-4d97-989a-31eb63c69234" TYPE="ext4"
/dev/sdb3: UUID="a33e9ee4-2d50-4e73-86c6-07f12bac0387" TYPE="swap"
/dev/mapper/centos-swap: UUID="bee55b41-0179-440b-98be-a050e8b4b70c" TYPE="swap"
/dev/mapper/centos-home: UUID="b13ce83a-ea51-4fb3-b6c9-feb1a56a282b" TYPE="xfs"
4、格式化命令
mkfs命令
用于格式化磁盘分区,生成指定的文件系统。格式化后分区中的数据将丢失!!!
语法:
mkfs [ -V ] [ -t 文件系统类型 ] [ fs-选项 ] 文件系统 [ 块 ]
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
选项:
选项 | 作用 |
---|---|
-t | 文件系统类型 |
-v | 产生冗长输出信息。帮助信息 |
案例:
1)普通文件系统格式化
#格式化为xfs文件系统
[root@c2407 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#格式化为ext4文件系统
[root@c2407 ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
(2)swap文件系统格式化
[root@c2407 ~]# mkswap /dev/sdb3
正在设置交换空间版本 1,大小 = 5242876 KiB
无标签,UUID=a33e9ee4-2d50-4e73-86c6-07f12bac0387
5、挂载命令
挂载源: 磁盘分区或者文件系统
挂载点: 文件系统访问的入口,通常是目录。
4.1、mount命令&swapon命令
mount - mount a filesystem,挂载一个文件系统;临时挂载,重启失效!
swapon:挂载swap文件系统
语法:
mount [-lhV]
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o option[,option]...] device|dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
选项:
选项 | 作用 |
---|---|
-t | 指定要挂载的文件系统类型,常见的文件系统类型有ext4、ntfs、vfat等。 |
-o | 指定挂载选项,比如可以指定只读挂载(ro)、允许所有用户挂载(user)、允许执行程序挂载(exec)等。 |
-r | 以只读模式挂载文件系统。 |
-w | 以读写模式挂载文件系统 |
-a | 挂载/etc/fstab文件中定义的所有文件系统。 |
-n | 不重新挂载/etc/fstab文件中定义的文件系统。 |
-o remount | 重新挂载一个已经挂载的文件系统,可以改变挂载选项。 |
-o loop | 挂载一个loop设备上的文件系统。 |
案例:
1)普通文件系统挂载
#临时挂载文件系统
[root@c2407 ~]# mkdir /sdb1 /sdb2
[root@c2407 ~]# mount /dev/sdb1 /sdb1
[root@c2407 ~]# mount /dev/sdb2 /sdb2
[root@c2407 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part /sdb1
├─sdb2 8:18 0 5G 0 part /sdb2
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
##文件系统没有生成或者损坏;文件系统类型不被操作系统识别。
[root@c2407 ~]# mount /dev/sdb3 /sdb3
mount: /dev/sdb3 写保护,将以只读方式挂载
mount: 文件系统类型错误、选项错误、/dev/sdb3 上有坏超级块、
缺少代码页或助手程序,或其他错误有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
#永久挂载文件系统 :写入/etc/fstab
#挂载源 挂载点 文件系统类型 挂载参数 是否备份 是否自检
[root@c2407 ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Mon Jul 29 19:04:52 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=93d6db3e-561a-4e35-8b4d-7e8d3c9d0e91 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /sdb1 xfs defaults 0 0
[root@c2407 ~]# mount -a #测试fstab中文件系统是否进行正藏挂载
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 5.1G 45G 11% /
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
#注意:文件系统找不到,影响系统的启动。导致的故障;无法进入操作系统。
2)swap文件系统挂载
[root@c2407 ~]# swapon /dev/sdb3
[root@c2407 ~]# free -m
total used free shared buff/cache available
Mem: 1819 475 954 10 388 1186
Swap: 7167 0 7167
[root@c2407 ~]# swapon -a #读取fstab文件中的swap文件系统进行挂载
3)挂载本地文件,如:iso镜像文件
[root@c2407 ~]# mount -o loop deepin-desktop-community-20.9-amd64.iso /mnt
mount: /dev/loop0 写保护,将以只读方式挂载
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.7G 42G 18% /
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/loop0 iso9660 3.6G 3.6G 0 100% /mnt
4)挂载模拟的块设备文件
[root@c2407 ~]# dd if=/dev/zero of=./2.txt bs=100M count=1
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,0.325804 秒,322 MB/秒
##格式化
[root@c2407 ~]# mkfs.ext4 2.txt
mke2fs 1.42.9 (28-Dec-2013)
2.txt is not a block special device.
无论如何也要继续? (y,n) y
Discarding device blocks: 完成
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
##挂载
[root@c2407 ~]# mkdir /2.txt
[root@c2407 ~]# mount /root/2.txt /2.txt/
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.7G 42G 18% /
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/loop0 iso9660 3.6G 3.6G 0 100% /mnt
/dev/loop1 ext4 93M 1.6M 85M 2% /2.txt
注意:在Rocky操作系统中,模拟的磁盘文件无法作为swap使用!!
4.2、umount命令&swapoff命令
umount - 卸载文件系统
swapoff-卸载swap文件系统
语法:
umount -a [-nrv] [-t vfstype]
umount 挂资源或者挂载点
选项:
选项 | 作用 |
---|---|
-a | 卸载所有可卸载文件系统 |
案例:
1)卸载普通文件系统
[root@c2407 ~]# umount /dev/sdb1
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.8G 42G 18% /
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
2)swap文件系统卸载
[root@c2407 ~]# swapoff /dev/sdb3
[root@c2407 ~]# free -m
total used free shared buff/cache available
Mem: 1819 472 957 10 388 1190
Swap: 2047 0 2047
#卸载所有swap文件系统
[root@c2407 ~]# swapoff -a
[root@c2407 ~]# free -m
total used free shared buff/cache available
Mem: 1819 471 960 10 387 1191
Swap: 0 0 0
四:实操开始
1、添加磁盘
1、
2、
2、识别磁盘
3、
3、fdisk分区
4、
5、
6、
7、
8、
9、
10、
4、格式化
11、
12、
5、手动挂载
13、
14、
15、
16、
17、
18、
6、自动挂载
19、
20、
注意:前四列不能写错,哪里错了,mount -a 会回复错误点信息。
7、故障模拟
21、这里我将分区多添数多添加了一个2,导致分区异常
22、
8、解决故障
23、
24、
25、
26、
27、
28、
29、
30、
31、
五、总结
学习后需要实操一遍加固自己的印象