
文件系统
概述
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;
即:存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;
文件系统:
- 文件系统API;
- 提供用户人性化接口;
- 对象操纵和管理的软件集合:
- 磁盘管理软件,类似于中间件;
- 对象及属性;
- 底层存储硬件,如磁盘或分区;
文件系统类型
- FAT:包括FAT16,FAT32;
- NTFS:NTFS是一个基于安全性的文件系统,是Windows NT所采用的文件系统结构;
- NFS:网络文件系统,用于在UNIX系统间通过网络进行文件共享;
- RAW:磁盘未经处理或未格式化产生的文件系统;
- Ext:GNU/Linux中标准的文件系统,包括Ext2,Ext3,Ext4;
- XFS:高性能的日志文件系统;
openEuler的文件系统
openEuler内核源于Linux;
Linux内核支持多种不同类型的文件系统。
openEuler默认文件系统为ext4;
常用文件系统 | 说明 |
---|---|
Ext | 专门为Linux设计的文件系统,目前最新版本为ext4 |
XFS | 一种高性能的日志文件系统。 |
vfat | vfat是Linux对DOS,Windows下的FAT文件系统的统称 |
NFS | 网络文件系统,用于在UNIX系统间通过网络进行文件共享 |
ISO 9660 | 光盘使用的标准文件系统 |
SWAP交换分区
Linux系统交换空间(swap)就是磁盘上的一块区域;
可以是一个分区,也可以是一个文件;
物理内存和交换空间的和就是系统可提供的虚拟内存的总量;
swap分区作用:
- 增加系统可用内存空间:当物理内存不足,增加swap分区比增加物理内存更经济;
- 提高系统整体性能:将不常用数据移到swap分区后,系统会有更多内存用于缓存,增加系统I/O;
- 有些Linux系统休眠功能依赖于swap功能;系统休眠时,会将内存数据保存到swap分区,下次启动时再加载到内存;
配置
- swap有两种形式:分区和文件;
- 创建swap分区:fdisk创建分区,mksswap创建swap分区,swapon启用swap分区;
- 创建swap文件:创建文件,mkswap格式化文件,swapon启用swap文件。
- 推荐swap大小
RAM大小 推荐交换分区 <=2GB
RAM x 2
2GB - 8GB
= RAM
>8GB
8GB
磁盘
类型
- 磁盘材质:机械硬盘HDD,固态硬盘SSD;
- 接口类型:IDE、SCSI、SATA、SAS、FC;
两大协议指令和硬盘接口
- 两大协议指令:ATA和SCSI;
- ATA
- 并行:IDE
- 最初的硬盘通用标准;
- IDE属于Parallel-ATA,即并行ATA;
- 串行:SATA
- SATA将IDE和ATA区分开来;
- 一般来说,IDE称为并口,SATA称为串口;
- 个人电脑和低端服务器常见硬盘;
- 并行:IDE
- SCSI
- 并行:SCSI
- SCSI(Small Computer System Interface):小型计算机系统专用接口
- 串行:SAS
- SAS(Serial Attached SCSI):就是串口的SCSI接口;
- 一般服务器采用这两种接口,比开始介绍的两种硬盘性能更高,稳定性更强,支持热插拔;
- 但是价格高,容量小,噪音大;
- 并行:SCSI
其他接口
近线SAS:NL-SAS(新产品)
- 介于SATA盘与SAS盘之间
- 有SATA盘的容量和SAS盘的协议组合而成;
FC(FibreChannel)
使用光纤通道直接作为硬盘连接接口,为高吞吐量性能密集型系统设备开辟了一条提高I/O性能水平途经;
目前高端存储产品使用FC接口硬盘;
查看磁盘信息
fdisk -l
查看所有磁盘的信息,包括已挂载和未挂载的磁盘;
1 | [root@localhost ~]# fdisk -l |
df -h
查看系统挂载、磁盘空间大小和利用率;
1 | [root@localhost ~]# df -h |
磁盘分区
简述
- 磁盘分区可以将硬盘驱动器划分为多个逻辑存储单元,这些单元称为分区;
- 通过将磁盘划分为多个分区,系统管理员可以使用不同的分区执行不同的功能;
- 好处:
- 限制应用或用户可用空间;
- 允许同一磁盘进行不同操作系统和多重启动;
- 将操作系统和程序文件与用户文件分隔;
- 创建用于操作系统虚拟内存交换的单独分区;
- 限制磁盘空间使用情况,以提高诊断工具和备份映像的性能;
分区类型
- 通常所说的“磁盘分区”就是指修改磁盘分区表
- 一个硬盘只有一个扩展分区,除去主分区,其他空间都分配给扩展分区。
MBR分区表格式
Master Boot Record
- 扇区大小为512字节,第一个扇区要放两个东西:MBR和分区表
- MBR:可以安装开机启动的程序,大小为446个字节
- 分区表:记录分区信息,大小为64个字节,只能记录4个分区的信息,分别对应:三个主分区和一个扩展分区
- 若分区数量不足,就要在扩展分区上建立逻辑分区;
- 逻辑分区表放在扩展分区上。
分区命名规则
在Linux中,没有盘符的概念,通过设备名来访问设备,设备名存放在/dev目录中;
命名规则如下:
- /dev/XXYN
- XX:代表设备类型,通常是
- hd(IDE磁盘);
- sd(SCSI磁盘);
- fd(软驱);
- vd(virtio磁盘);
- y:代表分区所在的设备,如:
/dev/hda
表示第一个IDE磁盘
;/dev/sdb
表示第二个SCSI磁盘
;- 序号用a,b,c…来标识
- N:代表分区
- 前四个分区(主分区和逻辑分区)用数字1-4;
- 逻辑分区从5开始
- 如:**/dev/hda3**就是第一个IDE磁盘上第三个主分区或扩展分区;
- /dev/sdb6就是第二个SCSI硬盘上的第二个逻辑分区
- 如果创建了一个主分区,然后就创建逻辑分区,逻辑分区照样从5开始,而不是2;
- XX:代表设备类型,通常是
注意:Linux中,SSD、SAS、SATA类型硬盘,都使用sd来标识,IDE硬盘属于IDE接口类型硬盘,用hd来标识。
磁盘分区方案MBR
MBR分区方案
主启动记录(Master Boot Record)分区方案指定了在运行BIOS固件的系统上应如何对磁盘进行分区,它是存在于驱动器开始部分的一个特殊启动扇区。
在MBR中,
- SCSI接口硬盘最多只能有15个分区(扩展分区不计入其中,逻辑分区计入)
- 其中主分区最多4个,逻辑分区最多12个;
- IDE接口硬盘最多只能有63个分区,其中主分区最多4个,逻辑分区最多60个;
- SCSI接口硬盘最多只能有15个分区(扩展分区不计入其中,逻辑分区计入)
由于分区大小数据以32位值存储,使用MBR方案分区时,最大磁盘和分区大小限制为2TB。
磁盘分区方案GPT
随着硬盘驱动器容量不断增长,老旧的MBR分区方案的2TB磁盘和分区大小限制已不再是理论上的限制,在生产环境中已成为经常遇到的实际问题
GPT正在取代传统的MBR方案进行磁盘分区;
- GPT意为GUID分区表,驱动器上的每个分区都有一个全局唯一的标识符(globally unique identifier,GUID),对于运行统一可扩展固件接口(UEFI)固件的系统,GPT是在物理硬盘上布置分区表的标准
- 没有主分区和逻辑分区的区别;
- 每个硬盘最多可以有128个分区,GPT为逻辑块地址分配64位,因此最大支持18EB的分区大小。
LBA
LBA:Logical Block Address
GPT上所有的磁盘所有区域都是以LBA来规划的。
在GPT上,
- LBA分区有前面34个,LBA0-LBA33,用于存储GPT分区表信息;
- 后面有33个,LBA^-1^-LBA^-33^;用于备份分区表信息。
LBA0是GPT分区上第一个LBA块,LBA0又称为Prorective MBR,MBR相容区块,用来兼容MBR分区;
LBA1叫做GPT表头记录,记录分区表本身的位置和大小,同时记录备份用的GPT分位置;
LBA2-LBA33:记录实际的分区信息;
- 每个LBA划分为4块,即每个LBA可以记录4个分区表;
- 所以,一个GPT可以建立128个分区表(
32x4=128
);
fdisk使用
fdisk是Linux硬盘分区工具,也是Linux系统常用的一种硬盘分区工具之一,但不支持大于2TB的分区;
- 语法:fdisk [OPTION] 参数
- 选项:
- -b <分区大小>:指定每个分区的大小;
- -l:列出指定外围设备的分区表状况;
- -u:搭配-l参数列表,会用分区数目取代柱面数目,来标识每个分区的起始地址;
- -s <分区编号>:打印指定的分区大小,单位为区块;
- -v:显示版本信息。
fdisk交互模式
帮助
a 设置可引导标记
b 编辑bsd磁盘标签
c 设置DOS操作系统兼容标记
d 删除一个分区
l 显示已知文件系统类型,
- 82为swap分区,83为linux分区;
m 显示帮助菜单
n 新建分区
o 建立空白DOS分区表
p 显示分区列表
s 新建空白SUN磁盘标签;
t 改变一个分区的系统ID
u 改变显示记录的单位
v 验证分区表
q 不保存退出
w 保存退出
建立主分区
- n 新建一个分区
- p 选择主分区
- 主分区号(1-4)
- 回车,默认起始柱面1
- 定义分区大小 /直接+size
- w 保存退出
- p 打印分区信息
parted分区工具
parted也是Linux下常用的分区软件,支持创建2T以上的磁盘分区,相对于fdisk,parted更方便;
提供动态调整分区大小的功能;
- 语法:parted [options] [device [command [options …]…]]
- 选项:
- -i:交互模式
- -s:脚本模式;
- device:磁盘设备名称,如/dev/sda;
- command:parted命令,如果没有这个,parted会进入交互模式;
- -v:显示parted版本信息;
- -h:显示帮助信息;
交互模式
选择具体硬盘后,进入交互模式进行分区操作,如:parted /dev/sdb
说明
- align-check:检查分区N的类型(min|opt)是否对齐;
- mklabel:创建新的磁盘标签(分区表);
- name:给指定分区命名;
- print:打印分区表;
- rescue:修复丢失的法内情;
- resizepart:调整分区大小
- rm:删除分区
- select:选择要编辑的设备;
- disk_set:更改选定设备上的标志;
- disk_toggle:切换选定设备上的标志状态;
- quit:退出;
- set:更改分区的标记
- toggle:设置或去标分区的标记;
- unit:设置默认单位;
- version:显示版本信息。
分区流程
mktable gpt
:创建GPT分区表;mkpart
,新建分区;- q,保存并退出。
非交互模式
- 硬盘格式改为GPT格式:parted /dev/sdb mklabel gpt
- 分区:parted /dev/sdb mkpart primary 0 1000;
- 格式化:mkfs -t ext4 /dev/sdb1
格式化
格式化是对硬盘或磁盘分区进行初始化的一种操作,将分区格式化成不同文件系统;
- 先mkfs 然后tab,查看支持的文件系统类型;
- mkfs.ext4 /dev/sdb2 格式化sdb2分区为ext4类型;
- ll /dev/sdb2:查看磁盘信息;
格式化mkfs
mkfs,make filesystem;
用来在特定分区上建立Linux文件系统;
语法:mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
选项:
- device,预备检查的磁盘分区;
- -V:打印详细信息;
- -t:给定文件系统的格式
- -c:在格式化前,检查partition中是否存在坏道;
- -l 将坏道的block的信息输出到bad_blocks_file文件里;
- block,给定block的大小;
磁盘挂载
挂载点目录:根目录下media和mnt两个目录被叫做挂载点目录;
临时挂载:使用mount /dev/sda5 /test
表示将/dev/sda5
挂载到test目录中,重启后失效;
永久挂载:即开机自动挂载,编辑/etc/fstab
文件进行操作;
fstab文件
/etc/fstab
用来存放文件系统的静态信息的文件;
系统启动时,会自动从这个文件读取信息,并自动酱紫文件中指定文件系统挂载到指定的目录,这样只需要将磁盘的挂载信息写入这个文件中就不需要每次开机启动之后手动挂载了;
文件格式
1 | <file system> <dir> <type> <options> <dump> <pass> |
一些参数
- options
- auto:启动后使用mount -a时自动挂载;
- ro:只读方式挂载文件系统;
- rw:读写模式挂载文件系统;
- user:允许任意用户挂载文件系统;
- nouser:只能被root挂载;
- dev/nodev: 解析/不解析文件系统上的块特殊设备;
- noatime/nodiratime:不更新文件系统上/目录上inode访问记录,可以提升性能;
- defaults:使用文件系统的默认挂载参数
- sync/async: I/O同步/异步进行;
- suid/nosuid: 允许/允许suid 操作和设定sgid位,参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限;
- dump
- 0表示忽略,1表示进行备份,大部分用户没有安装dump,对于他们而言dump应为0;
- pass
- 0,1,2。
- 1,检查最高优先权,一般用在根目录;
- 2,其他所有需要被检查的设备,优先级低于1;
- 0,不会进行fsck检查;
逻辑卷管理
概念
LVM-逻辑卷管理是Linux对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上,文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性;
- 物理单元PE:
Physical Extents
,具有唯一编号的PE是能被LVM寻址的最小单元;- PE的大小可以指定,默认为4MB;
- PE大小一旦确定不能改变;
- 同一卷组的所有物理卷的PE大小是一致的;
- 逻辑单元LE:
Logical Extents
,逻辑卷中可用于分配的最小存储单元,逻辑区域大小取决于逻辑卷所在卷组中物理区域的大小;在同一个卷组中,LE大小与PE相同,且一一对应; - 物理卷PV,
Physical Volume
,底层真正提供容量,存放数据的设备,可以是整个硬盘,硬盘上的分区等; - 卷组VG:
Volume Group
,建立在物理卷之上,由一个或多个物理卷组成,即把物理卷整合起来提供容量分配;- 一个LVM系统可以有一个或多个卷组;
- 逻辑卷LV:
Logical Volume
,逻辑卷建立在卷组之上,是从卷组中“切出”的一块空间,是最终用户使用的逻辑设备,逻辑卷创建之后,其大小可以伸缩。
逻辑卷优点
- 灵活的容量
- 可伸缩的存储池;
- 在线的数据再分配
- 方便设备命名;
- 磁盘条带化
- 卷镜像和卷快照
逻辑卷创建流程
- 物理磁盘层:fdisk格式化;
- 物理分区层:使用pvcreate转换为物理卷;
- 物理卷层PV:使用vgcreate创建卷组;
- 卷组层VG:使用lvcreate创建逻辑卷;
- 逻辑卷层LV,格式化。
PV
pvcreate创建物理卷,可以使用物理磁盘或磁盘分区创建;
语法:pvcreate [OPTION] 设备文件名
- -f,强制创建物理卷,无需用户确认;
- -u,指定设备的UUID;
- -y,所有问题回答yes;
需要将分区改为LVM分区才能创建物理卷;
- 使用分区创建时,磁盘分区后id为83,需要将id改为8e,才能创建物理卷,用fdisk修改id;
使用
将磁盘hda的6-9分区创建为pv;
1
pvcreate /dev/hda{6,7,8,9}
查看物理卷信息
1
2
3[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 openeuler lvm2 a-- <15.00g 0
VG
vgcreate创建LVM卷组;卷组将多个物理卷组织成一个整体,屏蔽了底层物理卷细节;
语法:vgcreate [OPTION] 卷组名 物理卷列表
选项:
- -l:卷组上允许创建的最大逻辑卷数;
- -p:卷组上允许添加的最大物理卷数;
- -s:卷组上的物理卷的PE的大小;
参数:
- 卷组名,创建卷组的名称;
- 物理卷列表,要加入到的卷组中的物理卷列表;
使用
使用vgcreate命令创建卷组“VG1000”,并将物理卷
/dev/sdb1
和/dev/sdb2
添加到卷组中;1
[root@localhost ~]# vgcreate vg1000 /dev/sdb1 /dev/sdb2
查看卷组信息,使用
vgdisplay、vgscan
;1
2
3[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
openeuler 1 2 0 wz--n- <15.00g 0
lv
lv用于创建LVM逻辑卷,逻辑卷创建在卷组之上;
语法:lvcreate [OPTION] 逻辑卷名称
选项:
- -L:指定逻辑卷的大小,单位“kKmMgGtT”字节;
- -l:指定逻辑卷的大小(LE数);
参数:
- 逻辑卷:指定要创建的逻辑卷名称;
注意:逻辑卷创建完成后,需要格式化,挂载后才能使用。
使用
创建逻辑卷
1 | [root@localhost ~]# vgcreate -L 200M vg1000 |
使用lvdisplay、lvscan查看卷组信息
1 | [root@localhost ~]# lvs |
逻辑卷调整基本步骤
扩容
扩容前先确认是否有足够的vg空间:
vgs
使用命令扩容:
lvextend -L +SIZE lv_device
1
2
3
4
5
6
7
8[root@localhost ~]# lvextend -L +2G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root openeuler -wi-ao---- 13.20g
swap openeuler -wi-ao---- 1.79g
lv1 vg1 -wi-ao---- 4.00g调整文件系统的大小:
resize2fs LV_DEVICE
1
2
3
4
5
6[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.46.4 (18-Aug-2021)
/dev/vg1/lv1 上的文件系统已被挂载于 /mnt/lv1;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/vg1/lv1 上的文件系统现在为 1048576 个块(每块 4k)。
注意:不需要卸载,在线扩容。
缩容
先确定缩减后目标大小,并确保目标逻辑卷大小有足够的的空间容纳原有数据;
卸载文件系统:
umount
,并执行强制检测:e2fsck -f
;1
2
3
4
5
6
7
8[root@localhost ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.46.4 (18-Aug-2021)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/vg1/lv1:11/262144 文件(0.0% 为非连续的), 34894/1048576 块缩减文件系统:
resize2fs DEVICE
;1
2
3
4[root@localhost ~]# resize2fs /dev/vg1/lv1 1G
resize2fs 1.46.4 (18-Aug-2021)
将 /dev/vg1/lv1 上的文件系统调整为 262144 个块(每块 4k)。
/dev/vg1/lv1 上的文件系统现在为 262144 个块(每块 4k)。缩减逻辑卷:
lvreduce
;1
2
3
4
5[root@localhost ~]# lvchange -a n /dev/vg1/lv1 # 先将逻辑改为不活跃
[root@localhost ~]# lvreduce -L 1G /dev/vg1/lv1 # 然后缩减lv
Size of logical volume vg1/lv1 changed from 4.00 GiB (1024 extents) to 1.00 GiB (256 extents).
Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvchange -a y /dev/vg1/lv1 # 再将lv改为活跃重新挂载使用。
逻辑卷容量变更lvresize
lvresize指令用于调整逻辑卷空间大小,可以增大空间和缩小空间,实际包含了lvextend和lvreduce的功能;
- 语法:lvresize [OPTION] 逻辑卷名称;
- 选项:
- -L:指定逻辑卷的大小,单位”kKmMgGtT“;
- -l:指定逻辑卷大小(LE数);
- 参数
- 逻辑卷:指定要创建的逻辑卷名称;
使用
将逻辑卷空间增加200M
1 | [root@localhost ~]# lvresize -L +200M /dev/vg1000/lvol0 |