目录
一、硬盘介绍
1、磁盘的物理结构
1.1、硬盘结构
1.2、磁头数、磁道、柱面、扇区
2、CHS编号
2.1、磁道编号规则
2.2、扇区编号规则
2.3、通过CHS计算硬盘容量
3.、磁盘存储划分
3.1、第一个扇区存储的数据
3.2、硬盘分区
4、开机流程
5、要点
6、磁盘存储数据的形式
二、Linux文件系统
1、根文件系统
2、虚拟文件系统
3、真文件系统
4、伪文件系统
三、磁盘分区与挂载
1、磁盘分区方式
2、分区命令
3、格式化命令
4、挂载命令
四、LVM逻辑卷
1、概述
2、管理命令
3、配置案例
五、磁盘配额
1、概述
2、配置命令
3、xfs配额
4、ext4配额(了解)
六、磁盘检测与修复
1、fsck命令(基于ext4)
2、xfs_repair命令
七、文件系统备份与恢复
1、xfsdump命令
2、xfsrestore命令
一、硬盘介绍
文件系统是Linux系统的核心,在Linux系统中,一切皆文件。文件最终是存储在磁盘上,文件的存取,最终是读写磁盘。
1、磁盘的物理结构
1.1、硬盘结构
-
每个盘片有两面,两面都可以存储数据。
-
每个盘面都有一个磁头,用于存取数据。
-
所有磁头都是固定的,一起做物理移动。但是每次只有一个磁头执行存取数据的任务,选择使用哪个磁头是由系统控制的。磁头间的切换非常迅速,而磁头摆动寻道则比较慢。
-
磁头摆动,找到要读取数据所在的磁道;盘片通过转动,将数据“送到”磁头下。
1.2、磁头数、磁道、柱面、扇区
-
磁头数: 每个盘面都有一个磁头,因此磁头数 = 盘面数。
-
磁道: 上以盘片轴心为圆心,不同半径的同心圆称为磁道,磁道不是真正肉眼可看见的一道一道“坑”,而是被磁盘上被磁化的区域,磁道之间有一定的间隙,以免磁道之间磁介质相互影响。
-
扇区: 每个磁道被等分为若干个弧段(扇区),每个扇区可以存放512个字节的数据。扇区是磁盘驱动器向磁盘读写数据的最小单元。
-
柱面: 不同盘片半径相同的磁道组成的一个“柱面”。
2、CHS编号
硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每个柱面、磁头、扇区都有自己的编号。
2.1、磁道编号规则
-
磁头编号: 从上到下,分别为磁头0号,磁头1号……
-
柱面编号: 最外圈的柱面编号为0,往里依次递增1,2,3…..
2.2、扇区编号规则
-
绝对扇区: 由柱面号/磁头号/扇区号唯一确定。
-
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、开机流程
1、加载BIOS:BIOS是硬件厂商写入到主板ROM里的一个程序,电脑开机时,会最先执行BIOS。
2、MBR: BIOS在执行的过程中,会根据用户设置(即在BIOS的Boot界面选择的优先启动项,U盘/硬盘/光驱),如果硬盘的优先级最高,则计算机会从硬盘的第一个扇区的MBR中的读取引导加载程序(Boot Loader)。和BIOS一样,主引导分区MBR是硬件本身会支持的东西。
3、引导加载程序:引导加载程序(Boot Loader)是用于读取操作系统内核文件的一个小软件,不同的操作系统有各自的引导加载程序。每个分区都可以有自己的文件系统,有自己的引导扇区,在启动的过程中,用户可以选择是直接加载引导程序所在分区的操作系统,还是将引导加载功能交给各分区引导扇区中的加载程序。boot loader的功能主要有:
-
提供菜单:让用户选择不同的开机选项,是多重引导的重要功能。
-
载入内核文件:直接指向可开机的程序区段,开始操作系统。
-
转交其他loader: 将引导加载功能转交给其他loader负责。
4、操作系统内核文件:最后,引导加载程序加载操作系统的内核文件,启动操作系统!
5、要点
1、每个分区都有自己的引导扇区(boot sector)。
2、实际可开机的操作系统内核文件是存放在各个分区内的,如在C盘安装Windows系统,在D盘安装Linux操作系统。
3、引导加载程序(boot loader)只会认识自己所在分区内的可开机内核文件,以及其他boot loader(相当于一个指针,指向其他loader)。
4、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目录下与设备交互,而是在管理设备。
三、磁盘分区与挂载
1、磁盘分区方式
MBR
主引导记录,支持四个主分区或三主一扩展多个逻辑,每分区最大2TB,兼容性好。
GPT
是GUID分区表(GUID Partition Table)的缩写; 含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。 自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于18EB的总容量, 几乎没有上限,最大支持到128个分区,分区大小支持到256TB。
2、分区命令
#磁盘热扫描:(磁盘类型为SCSI)
cd /sys/class/scsi_host for i in `ls /sys/class/scsi_host`;do echo "- – -" > ${i}/scan;done
2.1、fdisk命令
fdisk -l 显示系统中已安装的分区表
操作案例:
创建主分区
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rl-home 253:2 0 125.1G 0 lvm /home
nvme0n2 259:3 0 6G 0 disk
[root@localhost ~]# fdisk /dev/nvme0n2
欢迎使用 fdisk (util-linux 2.37.4)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x4d252648 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):m
帮助:
DOS (MBR)
a 开关 可启动 标志
b 编辑嵌套的 BSD 磁盘标签
c 开关 dos 兼容性标志
常规
d 删除分区
F 列出未分区的空闲区
l 列出已知分区类型
n 添加新分区
p 打印分区表
t 更改分区类型
v 检查分区表
i 打印某个分区的相关信息
杂项
m 打印此菜单
u 更改 显示/记录 单位
x 更多功能(仅限专业人员)
脚本
I 从 sfdisk 脚本文件加载磁盘布局
O 将磁盘布局转储为 sfdisk 脚本文件
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
新建空磁盘标签
g 新建一份 GPT 分区表
G 新建一份空 GPT (IRIX) 分区表
o 新建一份的空 DOS 分区表
s 新建一份空 Sun 分区表
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0 primary, 0 extended, 4 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1):
第一个扇区 (2048-12582911, 默认 2048):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-12582911, 默认 12582911): +1G
创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4d252648
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n2p1 2048 2099199 2097152 1G 83 Linux
创建扩展分区
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1 primary, 0 extended, 3 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):e
分区号 (2-4, 默认 2):
第一个扇区 (2099200-12582911, 默认 2099200):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2099200-12582911, 默认 12582911): +1G
创建了一个新分区 2,类型为“Extended”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7aba06fd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n2p1 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n2p2 2099200 4196351 2097152 1G 5 扩展
创建逻辑分区
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1 primary, 1 extended, 2 free)
l 逻辑分区 (从 5 开始编号)
选择 (默认 p):l
添加逻辑分区 5
第一个扇区 (2101248-4196351, 默认 2101248):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2101248-4196351, 默认 4196351): +500M
创建了一个新分区 5,类型为“Linux”,大小为 500 MiB。
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7aba06fd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n2p1 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n2p2 2099200 4196351 2097152 1G 5 扩展
/dev/nvme0n2p5 2101248 3125247 1024000 500M 83 Linux
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1 primary, 1 extended, 2 free)
l 逻辑分区 (从 5 开始编号)
选择 (默认 p):l
添加逻辑分区 6
第一个扇区 (3127296-4196351, 默认 3127296):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (3127296-4196351, 默认 4196351):
创建了一个新分区 6,类型为“Linux”,大小为 522 MiB。
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7aba06fd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n2p1 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n2p2 2099200 4196351 2097152 1G 5 扩展
/dev/nvme0n2p5 2101248 3125247 1024000 500M 83 Linux
/dev/nvme0n2p6 3127296 4196351 1069056 522M 83 Linux
2.2、parted命令
操作案例:
(parted) mklabel gpt
#定义分区表格式(仅创建第一个分区时需要设置,其他的不需要)
(parted) mkpart p1
#创建第一个分区,名称为p1
[root@localhost ~]# parted /dev/nvme0n2
GNU Parted 3.5
使用 /dev/nvme0n2
欢迎使用 GNU Parted!输入 'help' 来查看命令列表。
(parted) mklabel
新的磁盘卷标类型? gpt
警告: 现有 /dev/nvme0n2 上的磁盘卷标将被销毁,而所有在这个磁盘上的数据将会丢失。您要继续吗?
是/Yes/否/No? yes
(parted) mkpart p1
文件系统类型? [ext2]? xfs
起始点? 1
结束点? 2G
(parted) p
型号:VMware Virtual NVMe Disk (nvme)
磁盘 /dev/nvme0n2:6442MB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:
编号 起始点 结束点 大小 文件系统 名称 标志
1 1049kB 2000MB 1999MB xfs p1
(parted) mklabel gpt
警告: 现有 /dev/nvme0n2 上的磁盘卷标将被销毁,而所有在这个磁盘上的数据将会丢失。您要继续吗?
是/Yes/否/No? no
(parted) mkpart p2
文件系统类型? [ext2]? ext4
起始点? 2001M
结束点? 6G
(parted) p
型号:VMware Virtual NVMe Disk (nvme)
磁盘 /dev/nvme0n2:6442MB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:
编号 起始点 结束点 大小 文件系统 名称 标志
1 1049kB 2000MB 1999MB xfs p1
2 2001MB 6441MB 4441MB ext4 p2
(parted) quit
信息: 你可能需要 /etc/fstab。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rl-home 253:2 0 125.1G 0 lvm /home
nvme0n2 259:3 0 6G 0 disk
├─nvme0n2p1 259:6 0 1.9G 0 part
└─nvme0n2p2 259:7 0 4.1G 0 part
3、格式化命令
mkfs命令 用于格式化磁盘分区,生成指定的文件系统。格式化后分区中的数据将丢失!
-t 文件系统类型
操作案例:
普通文件系统格式化
#格式化为xfs文件系统
[root@localhost ~]# mkfs -t xfs /dev/nvme0n2p1
meta-data=/dev/nvme0n2p1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#格式化为ext4文件系统
[root@localhost ~]# mkfs -t ext4 /dev/nvme0n2p5
创建含有 512000 个块(每块 1k)和 128016 个inode的文件系统
文件系统UUID:af72a9ce-f13d-4df5-98c3-79350601b6f8
超级块的备份存储于下列块:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
正在分配组表: 完成
正在写入inode表: 完成
创建日志(8192 个块)完成
写入超级块和文件系统账户统计信息: 已完成
swap文件系统格式化
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3627 974 2352 15 540 2652
Swap: 4011 0 4011
[root@localhost ~]# fdisk /dev/nvme0n2
欢迎使用 fdisk (util-linux 2.37.4)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
This disk is currently in use – repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7aba06fd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n2p1 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n2p2 2099200 4196351 2097152 1G 83 Linux
命令(输入 m 获取帮助):w
分区表已调整。
正在同步磁盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rl-home 253:2 0 125.1G 0 lvm /home
nvme0n2 259:3 0 6G 0 disk
├─nvme0n2p1 259:4 0 1G 0 part /nvme0n2p1
└─nvme0n2p2 259:5 0 1G 0 part
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.6M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 52K 363M 1% /run/user/42
tmpfs tmpfs 363M 36K 363M 1% /run/user/0
/dev/nvme0n2p1 xfs 960M 39M 922M 5% /nvme0n2p1
[root@localhost ~]# mkswap /dev/nvme0n2p2
mkswap: /dev/nvme0n2p2:警告,将擦除旧的 swap 签名。
正在设置交换空间版本 1,大小 = 1024 MiB (1073737728 个字节)
无标签,UUID=58ff215b-19eb-48e5-9f4c-b2e099075f43
[root@localhost ~]# swapon /dev/nvme0n2p2
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3627 978 2350 15 540 2649
Swap: 5035 0 5035
4、挂载命令
挂载源: 磁盘分区或者文件系统
挂载点: 文件系统访问的入口,通常是目录。
4.1、mount命令&swapon命令
mount – mount a filesystem,挂载一个文件系统;临时挂载,重启失效!
swapon:挂载swap文件系统
选项 | 作用 |
-t | 指定要挂载的文件系统类型 |
-o | 指定挂载选项,比如可以指定只读挂载(ro)、允许所有用户挂载(user)、允许执行程序挂载(exec)等。 |
-o remount | 重新挂载一个已经挂载的文件系统,可以改变挂载选项 |
-a |
挂载/etc/fstab文件中定义的所有文件系统。 测试fstab中文件系统是否进行正常挂载 |
操作案例:
普通文件挂载
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.6M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 52K 363M 1% /run/user/42
tmpfs tmpfs 363M 36K 363M 1% /run/user/0
/dev/nvme0n2p1 xfs 960M 39M 922M 5% /nvme0n2p1
/dev/nvme0n2p5 ext4 459M 14K 430M 1% /nvme0n2p5
永久挂载文件系统:写入/etc/fstab
[root@localhost ~]# vim /etc/fstab
/dev/mapper/rl-root / xfs defaults 0 0
UUID=64ebe7f9-ce12-4724-95e1-d813de58f77f /boot xfs defaults 0 0
/dev/mapper/rl-home /home xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
/dev/nvme0n2p5 /mnt xfs defaults 0 0
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.6M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 52K 363M 1% /run/user/42
tmpfs tmpfs 363M 36K 363M 1% /run/user/0
/dev/nvme0n2p1 xfs 960M 39M 922M 5% /nvme0n2p1
/dev/nvme0n2p5 xfs 435M 29M 407M 7% /mnt
swap文件系统挂载
[root@localhost ~]# mkswap /dev/nvme0n2p2
mkswap: /dev/nvme0n2p2:警告,将擦除旧的 swap 签名。
正在设置交换空间版本 1,大小 = 1024 MiB (1073737728 个字节)
无标签,UUID=58ff215b-19eb-48e5-9f4c-b2e099075f43
[root@localhost ~]# swapon /dev/nvme0n2p2
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3627 978 2350 15 540 2649
Swap: 5035 0 5035
4.2、umount命令&swapoff命令
umount – 卸载文件系统
swapoff-卸载swap文件系统
操作案例:
卸载普通文件系统
[root@localhost ~]# umount /dev/nvme0n2p5
[root@localhost ~]# umount /nvme0n2p6
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.6M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 52K 363M 1% /run/user/42
tmpfs tmpfs 363M 36K 363M 1% /run/user/0
/dev/nvme0n2p1 xfs 960M 39M 922M 5% /nvme0n2p1
swap文件系统卸载
[root@localhost ~]# swapoff /dev/nvme0n2p2
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3627 980 2342 15 546 2647
Swap: 4011 0 4011
四、LVM逻辑卷
1、概述
LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进行管理的⼀种机制; 安装 Linux 操作系统时遇到的⼀个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空 间; 普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。
1.1、LVM概念
-
PV(Physical Volume):物理卷
处于 LVM 最底层,可以是物理硬盘或者分区,整个硬盘,或使用fdisk 等⼯具建⽴的普通分区,包许多默认 4MB 大小的 PE(Physical Extent,基本单元)。
-
PE(Physical Extend):物理区域
PV 中可以用于分配的最小存储单元,可以在创建 PV 的时候制定(默认为 4MB),如 1M, 2M, 4M, 8M, 32M, 64M… 组成同⼀VG 中所有 PV 的 PE大小应该相同。
-
VG(Volume Group):卷组
建立在 PV 之上,可以含有一个到多个 PV,一个或多个物理卷组合而成的整体。
-
LV(Logical Volume):逻辑卷
建立在 VG 之上,相当于原来分区的概念,不过大小可以动态改变。从卷组中分割出的一块空间,用于建立文件 系统。
1.3、挂载流程
2、管理命令
扫描 | pvscan | vgscan | lvscan |
创建 | pvcreate | vgcreate | lvcreate(-n) |
查询 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩容 | – | vgextend | lvextend |
3、配置案例
3.1、构建LVM逻辑卷
#创建分区
[root@localhost ~]# fdisk /dev/nvme0n2
欢迎使用 fdisk (util-linux 2.37.4)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
分区号 (1-128, 默认 1):
第一个扇区 (34-12582878, 默认 2048):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-12582878, 默认 12582878):
创建了一个新分区 1,类型为“Linux filesystem”,大小为 6 GiB。
分区 #1 包含一个 xfs 签名。
您想移除该签名吗?是[Y]/否[N]:yes
写入命令将移除该签名。
命令(输入 m 获取帮助):p
Disk /dev/nvme0n2:6 GiB,6442450944 字节,12582912 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:83F2D9B5-0243-4729-BADA-B809C02F7EDB
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n2p1 2048 12582878 12580831 6G Linux 文件系统
1 分区上的文件系统/RAID 签名将被擦除。
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
#创建物理卷
[root@localhost ~]# pvcreate /dev/nvme0n2p1
Physical volume "/dev/nvme0n2p1" successfully created.
[root@localhost ~]# pvdisplay
— Physical volume —
PV Name /dev/nvme0n1p2
VG Name rl
PV Size <199.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 50943
Free PE 0
Allocated PE 50943
PV UUID 5EzN2H-pnMG-lEEA-cT0T-KkoY-02vB-zLFnhS
"/dev/nvme0n2p1" is a new physical volume of "<6.00 GiB"
— NEW Physical volume —
PV Name /dev/nvme0n2p1
VG Name
PV Size <6.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID xlxkBY-P5Au-EqBE-IKF8-6vD7-Nd2u-NCkFrn
[root@localhost ~]# pvscan
PV /dev/nvme0n1p2 VG rl lvm2 [<199.00 GiB / 0 free]
PV /dev/nvme0n2p1 lvm2 [<6.00 GiB]
Total: 2 [<205.00 GiB] / in use: 1 [<199.00 GiB] / in no VG: 1 [<6.00 GiB]
#创建卷组
[root@localhost ~]# vgcreate c2508 /dev/nvme0n2p1
Volume group "c2508" successfully created
[root@localhost ~]# vgscan
Found volume group "c2508" using metadata type lvm2
Found volume group "rl" using metadata type lvm2
#创建逻辑卷
[root@localhost ~]# lvcreate -n c2508_lv1 c2508 -L +1G
Logical volume "c2508_lv1" created.
[root@localhost ~]# lvscan
ACTIVE '/dev/c2508/c2508_lv1' [1.00 GiB] inherit
ACTIVE '/dev/rl/swap' [<3.92 GiB] inherit
ACTIVE '/dev/rl/home' [<125.08 GiB] inherit
ACTIVE '/dev/rl/root' [70.00 GiB] inherit
#格式化并挂载
[root@localhost ~]# mkfs.xfs /dev/c2508/c2508_lv1
meta-data=/dev/c2508/c2508_lv1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkdir /c2508_lv1
[root@localhost ~]# mount /dev/c2508/c2508_lv1 /c2508_lv1/
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.7M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 96K 363M 1% /run/user/0
/dev/mapper/c2508-c2508_lv1 xfs 960M 39M 922M 5% /c2508_lv1
3.2、扩容LVM逻辑卷
#基于xfs文件系统的lv扩容(xfs_growfs :进行容量识别)
[root@localhost ~]# lvextend /dev/c2508/c2508_lv1 -L +1G
Size of logical volume c2508/c2508_lv1 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume c2508/c2508_lv1 successfully resized.
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.7M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 96K 363M 1% /run/user/0
/dev/mapper/c2508-c2508_lv1 xfs 960M 39M 922M 5% /c2508_lv1
[root@localhost ~]# xfs_growfs /dev/c
c2508/ char/ core cpu_dma_latency
cdrom console cpu/
[root@localhost ~]# xfs_growfs /dev/c2508/c2508_lv1
meta-data=/dev/mapper/c2508-c2508_lv1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 262144 to 524288
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.7M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 96K 363M 1% /run/user/0
/dev/mapper/c2508-c2508_lv1 xfs 2.0G 47M 1.9G 3% /c2508_lv1
#基于ext文件系统的lv扩容(resize2fs :进行容量识别)(Linux7需要卸载文件系统,Linux9不需要)
[root@localhost ~]# lvcreate -n c2508_lv2 c2508 -L +1G
WARNING: xfs signature detected on /dev/c2508/c2508_lv2 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/c2508/c2508_lv2.
Logical volume "c2508_lv2" created.
[root@localhost ~]# mkfs.ext4 /dev/c2508/c2508_lv2
mke2fs 1.46.5 (30-Dec-2021)
创建含有 262144 个块(每块 4k)和 65536 个inode的文件系统
文件系统UUID:9e3513b7-c586-4185-8ea0-ac6e52e0f403
超级块的备份存储于下列块:
32768, 98304, 163840, 229376
正在分配组表: 完成
正在写入inode表: 完成
创建日志(8192 个块)完成
写入超级块和文件系统账户统计信息: 已完成
[root@localhost ~]# mkdir /c2508_lv2
[root@localhost ~]# mount /dev/c2508/c2508_lv2 /c2508_lv2/
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.7M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 96K 363M 1% /run/user/0
/dev/mapper/c2508-c2508_lv1 xfs 2.0G 47M 1.9G 3% /c2508_lv1
/dev/mapper/c2508-c2508_lv2 ext4 974M 24K 907M 1% /c2508_lv2
[root@localhost ~]# lvextend /dev/c2508/c2508_lv2 -L +1G
Size of logical volume c2508/c2508_lv2 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume c2508/c2508_lv2 successfully resized.
[root@localhost ~]# resize2fs /dev/c2508/c2508_lv2
resize2fs 1.46.5 (30-Dec-2021)
/dev/c2508/c2508_lv2 上的文件系统已被挂载于 /c2508_lv2;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/c2508/c2508_lv2 上的文件系统现在为 524288 个块(每块 4k)。
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.7M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 96K 363M 1% /run/user/0
/dev/mapper/c2508-c2508_lv1 xfs 2.0G 47M 1.9G 3% /c2508_lv1
/dev/mapper/c2508-c2508_lv2 ext4 2.0G 24K 1.9G 1% /c2508_lv2
五、磁盘配额
1、概述
针对用户和组,用于配置用户和组在该磁盘的使用容量限制。
配额类型
-
usrquota:支持对用户的磁盘配额
-
grpquota:支持对组的磁盘配额
限制类型
2、配置命令
-
软限制:指定一个软性的配额数据值,用户超过这个数据时,系统给出警告信息,可以打破数据值。容量大小;inode节点(文件数量)
-
硬限制:指定一个硬性的配额值,禁止用户超过这个限制。
xfs_quota命令
案例:
#实现支持磁盘配额的挂载: mount -o usrquota,grpquota /dev/test_vg/test_lv /testlvm
[root@localhost ~]# mount -o usrquota,grpquota /dev/c2508/c2508_lv3 /mnt
[root@localhost ~]# mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=456389,mode=755,inode64)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,size=742944k,nr_inodes=819200,mode=755,inode64)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate,memory_recursiveprot)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
/dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,nosuid,noexec,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14876)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel,pagesize=2M)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime,seclabel)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
none on /run/credentials/systemd-sysctl.service type ramfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=700)
none on /run/credentials/systemd-tmpfiles-setup-dev.service type ramfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=700)
vmware-vmblock on /run/vmblock-fuse type fuse.vmware-vmblock (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/rl-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
none on /run/credentials/systemd-tmpfiles-setup.service type ramfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=700)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=371468k,nr_inodes=92867,mode=700,inode64)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/mapper/c2508-c2508_lv2 on /c2508_lv2 type ext4 (rw,relatime,seclabel,mb_optimize_scan=0)
/dev/mapper/c2508-c2508_lv1 on /c2508_lv1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/c2508-c2508_lv3 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,grpquota)
#查看是否支持磁盘配额:
mount
#XFS文件系统的磁盘配额命令: xfs_quota -x -c 'limit -u bsoft=10M bhard=50M isoft=10 ihard=20 username' /testlvm/ #-u:用户配额 #-g:组配额 #(b/i)soft:容量/文件数软限制,用于监视 #(b/i)hard:容量/文件数硬限制,不能超出设置的值
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=10M bhard=50M isoft=10 ihard=20 user1' /mnt/
#查看磁盘配额
xfs_quota -x -c 'report -bi' /testlvm/
[root@localhost ~]# xfs_quota -x -c 'report -bi' /mnt/
User quota on /mnt (/dev/mapper/c2508-c2508_lv3)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
———- ————————————————– ————————————————–
root 0 0 0 00 [——–] 3 0 0 00 [——–]
user1 0 10240 51200 00 [——–] 0 10 20 00 [——–]
Group quota on /mnt (/dev/mapper/c2508-c2508_lv3)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
———- ————————————————– ————————————————–
root 0 0 0 00 [——–] 3 0 0 00 [——–]
#查看容量配额: xfs_quota -x -c 'report -b -u ' /testlvm/ #查看文件数量配额: xfs_quota -x -c 'report -i -u ' /testlvm/
#验证:
#dd if=/dev/zero of=./test.txt bs=10M count=60
[root@localhost ~]# su – user1
[user1@localhost ~]$ cd /mnt
[user1@localhost mnt]$ touch {1..10}.txt
[user1@localhost mnt]$ touch {11..22}.txt
touch: 无法创建 '21.txt': 超出磁盘限额
touch: 无法创建 '22.txt': 超出磁盘限额
[user1@localhost mnt]$ dd if=/dev/zero of=./test.txt bs=1M count=51
dd: 打开'./test.txt' 失败: 超出磁盘限额
3、xfs配额
(1)、挂载并启用配额
mount -o usrquota,grpquota /dev/test_vg/test_lv(挂载磁盘)/testlvm(挂载点)
永久挂载
/dev/sdb1 /mail xfs defaults,usrquota,grpquota 0 0
(2)、编辑用户配额
xfs_quota -x -c 'limit -u bsoft:30M bhard:50M isoft:3 ihard:5 用户名' /挂载目录
(3)、编辑组配额
xfs_quota -x -c 'limit -g bsoft:30M bhard:50M isoft:3 ihard:5 组名' /挂载目录
4、ext4配额(了解)
(1)、挂载
mount -o defaults,usrquota,grpquota /挂载磁盘 /挂载点
(2)、生成配额文件
quotacheck /挂载点
(3)、启用配额(关闭配额命令用quotaoff)
quotaon -ugv /挂载点
(4)、用户和组配额
edquota -u 用户名
edquota -g 组名
六、磁盘检测与修复
1、fsck命令(基于ext4)
2、xfs_repair命令
案例:
#模拟故障;
[root@localhost ~]# umount /nvme0n3p1
[root@localhost ~]# dd if=/dev/zero of=/dev/nvme0n3p1 bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节已复制,0.000789825 s,648 kB/s
[root@localhost ~]# mount /dev/nvme0n3p1 /nvme0n3p1
mount: /nvme0n3p1: 文件系统类型错误、选项错误、/dev/nvme0n3p1 上有坏超级块、缺少代码页或帮助程序或其他错误.
#使用xfs_repair命令修复
[root@localhost ~]# xfs_repair /dev/nvme0n3p1
Phase 1 – find and verify superblock…
bad primary superblock – bad magic number !!!
attempting to find secondary superblock…
.found candidate secondary superblock…
verified secondary superblock…
writing modified primary superblock
sb realtime bitmap inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 129
resetting superblock realtime bitmap inode pointer to 129
sb realtime summary inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 130
resetting superblock realtime summary inode pointer to 130
Phase 2 – using internal log
– zero log…
– scan filesystem freespace and inode maps…
sb_icount 0, counted 64
sb_ifree 0, counted 61
sb_fdblocks 1556200, counted 1556192
– found root inode chunk
Phase 3 – for each AG…
– scan and clear agi unlinked lists…
– process known inodes and perform inode discovery…
– agno = 0
– agno = 1
– agno = 2
– agno = 3
– process newly discovered inodes…
Phase 4 – check for duplicate blocks…
– setting up duplicate extent list…
– check for inodes claiming duplicate blocks…
– agno = 0
– agno = 1
– agno = 2
– agno = 3
Phase 5 – rebuild AG headers and trees…
– reset superblock…
Phase 6 – check inode connectivity…
– resetting contents of realtime bitmap and summary inodes
– traversing filesystem …
– traversal finished …
– moving disconnected inodes to lost+found …
Phase 7 – verify and correct link counts…
Note – stripe unit (0) and width (0) were copied from a backup superblock.
Please reset with mount -o sunit=<value>,swidth=<value> if necessary
done
[root@localhost ~]# mount /dev/nvme0n3p1 /nvme0n3p1
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 726M 9.6M 716M 2% /run
/dev/mapper/rl-root xfs 70G 6.9G 64G 10% /
/dev/nvme0n1p1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 126G 926M 125G 1% /home
tmpfs tmpfs 363M 52K 363M 1% /run/user/42
tmpfs tmpfs 363M 36K 363M 1% /run/user/0
/dev/nvme0n3p1 xfs 6.0G 75M 5.9G 2% /nvme0n3p1
七、文件系统备份与恢复
1、xfsdump命令
备份等级:
0 –完全备份(文件系统默认备份等级)
1—9 –增量备份
选项 | 作用 |
-f | 指定备份到哪个目录 |
-L | 指定会话标签 |
-M | 指定设备标签 |
-s | 指定分区中文件或目录的相对路径 |
操作案例:
- 备份整个分区:
#交互式:xfsdump -f [备份存放路径] [要备份的的设备或挂载点]
#交互式:xfsdump -f [备份存放路径] [要备份的的设备或挂载点]
root@localhost nvme0n3p1]# xfsdump -f /opt/nvme0n3p1.bak /dev/nvme0n3p1 -L nvme0n3p1.bak -M nvme0n3p1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.12 (dump format 3.0) – type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/nvme0n3p1
xfsdump: dump date: Wed Aug 13 20:08:16 2025
xfsdump: session id: d5dda365-4eeb-4a23-8b02-3622699f5924
xfsdump: session label: "nvme0n3p1.bak"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 26176 bytes
xfsdump: WARNING: encountered corrupt or foreign data: assuming corrupted media
xfsdump: WARNING: encountered corrupt or foreign data: repositioning to overwrite
xfsdump: content.c:5943:Media_mfile_begin: 假设 ‘dcaps & DRIVE_CAP_BSF’ 失败。
已放弃 (核心已转储)
[root@localhost nvme0n3p1]# xfsdump -f /opt/dump_nvme0n3p1 /dev/nvme0n3p1 -L dump_nvme0n3p1 -M nvme0n3p1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.12 (dump format 3.0) – type ^C for status and control
xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 0 dump of localhost.localdomain:/nvme0n3p1
xfsdump: dump date: Wed Aug 13 20:10:35 2025
xfsdump: session id: 16336a34-c28b-4df4-a362-9242ce85cdb2
xfsdump: session label: "dump_nvme0n3p1"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 26176 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 24128 bytes
xfsdump: dump size (non-dir files) : 544 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /opt/dump_nvme0n3p1 OK (success)
xfsdump: Dump Status: SUCCESS
[root@localhost nvme0n3p1]# cd /opt
[root@localhost opt]# ls -lh
总用量 36K
-rw-rwxr–+ 1 root root 6 8月 8 19:53 1.txt
drwxrwsrwx. 3 root root 18 8月 8 18:30 dir1
drwxrwxrwx. 3 root root 20 8月 8 20:45 dir3
-rw-r–r–. 1 root root 24K 8月 13 20:10 dump_nvme0n3p1
-rw-r–r–. 1 root root 512 8月 13 19:40 nvme0n3p1.bak
-rw-r–r–. 1 root root 2.1K 8月 5 15:07 passwd
drwxrwxrwx. 5 zzh zzh 126 8月 8 16:28 zzh
- 备份分区中某个目录或文件
#xfsdump -f [备份存放路径] -s [要备份的目录或文件的相对路径] -L [会话标签名] -M [设 备标签名]
- 查看已备份的文件系统
#每次备份成功后,都会在/var/lib/xfsdump/inventory 目录下生成档案信息,详细记录备份的信 息,如挂载点、挂载设备、会话标签、设备标签、备份目录等相关信息。 cd /var/lib/xfsdump/inventory xfsdump -I
*注意:
-
xfsdump不支持没有挂载的文件系统备份,所以只能备份已挂载的文件系统;
-
xfsdump必须使用root的权限才能操作;
-
xfsdump只能备份xfs文件系统;
-
xfsdump备份下来的数据只能让xfsrestore来解析;
-
xfsdump是通过文件系统的UUID来分辨备份档案的,因此不能备份两个具有相同UUID的文件系统
2、xfsrestore命令
-f 指定需要恢复的备份文件
操作案例:
#先删除挂载点下的内容
[root@localhost nvme0n3p1]# rm -rf *
[root@localhost nvme0n3p1]# ls
[root@localhost nvme0n3p1]# cd
[root@localhost ~]# xfsrestore -f /opt/dump_nvme0n3p1 /nvme0n3p1/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.12 (dump format 3.0) – type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /nvme0n3p1
xfsrestore: volume: /dev/nvme0n3p1
xfsrestore: session time: Wed Aug 13 20:10:35 2025
xfsrestore: level: 0
xfsrestore: session label: "dump_nvme0n3p1"
xfsrestore: media label: "nvme0n3p1"
xfsrestore: file system id: 382d8f66-9adc-4554-ba46-50e22284f46e
xfsrestore: session id: 16336a34-c28b-4df4-a362-9242ce85cdb2
xfsrestore: media id: 76374fd7-cfbc-49e6-bf0c-9903cb6acd38
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 4 directories and 4 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /opt/dump_nvme0n3p1 OK (success)
xfsrestore: Restore Status: SUCCESS
评论前必须登录!
注册