linux操作系统磁盘管理小白细讲

一、硬盘介绍1、硬盘的物理结构1.1、硬盘结构1.2、磁头数、磁道、柱面、扇区2、CHS编号2.1、磁道编号规则2.2、扇区编号规则2.3、通过CHS计算硬盘容量3、磁盘存储划分3.1、第一个扇区存储的数据3.2、硬盘分区4、开机流程5、要

目录

一、硬盘介绍

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、真文件系统

3.1、ext4

3.2、xfs

4、伪文件系统

4.1、procfs

4.2、devtmpfs

4.3、sysfs

三、磁盘分区与挂载

1、磁盘分区方式

MBR

GPT

表示形式

2、分区命令

2.1、fdisk命令

2.2、parted命令

3、查看与识别命令

3.1、lsblk命令

3.2、partprobe命令

3.3、blkid命令

4、格式化命令

mkfs命令

5、挂载命令

4.1、mount命令&swapon命令

案例:

4.2、umount命令&swapoff命令

磁盘分区与挂载整体案例

1、开机状态下创建新硬盘

2、 确认新硬盘是否被系统识别

3、 查看当前磁盘情况

4、对新磁盘进行分区

5、格式化分区

6、创建挂载点目录

7、 挂载分区

8、 验证挂载结果

9、 设置开机自动挂载

10、测试自动挂载配置

11、报错实验

其他实用操作

挂载 NTFS 分区

挂载 ISO 文件

卸载分区

注意事项

四、LVM逻辑卷

1、概述

1.1、运行原理

1.2、LVM 相关概念:

1.3、挂载流程

2、管理命令

3、配置案例

3.1构建LVM逻辑卷完整案例总步骤:

3.2、构建LVM逻辑卷具体示例

3.3、扩容LVM逻辑卷

3.3.1区别:

3.4、缩容LVM逻辑卷(不建议)

五、磁盘配额

1、概述

2、配置命令

2.1、quota命令

2.2、xfs_quota命令

3、配置案例

3.1、xfs配额

3.1.1步骤总结:

3.1.2疑问:

3.1.3具体操作:

3.2、ext4配额(了解)

3.2.1总体步骤

3.2.2具体案例

3.2.3ext4和xfs配额区别

六、磁盘检测与修复

1、fsck命令

2、xfs_repair命令

3、badblocks命令

七、文件系统备份与恢复

1、xfsdump命令

2、xfsrestore命令

附录:xfs常用命令

八、RAID类型介绍与应用场景

1. RAID 0(条带化)

2. RAID 1(镜像)

3. RAID 5(分布式奇偶校验)

4. RAID 6(双分布式奇偶校验)

5. RAID 10(镜像+条带化)

其他 RAID 类型

对比总结

选择建议

注意事项

一、硬盘介绍

文件系统是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、开机流程

  1. 加载BIOS: BIOS(Base Input Output System,基本输入输出系统,读做/'baious/)是硬件厂商写入到主板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。

  5. 一点经验:如果要安装多系统,最好先安装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 <分区> 给出分区大小(块数)

常用命令选项

下面列举一些常用的 fdisk 命令选项:

  • fdisk -l:查看系统中所有磁盘的分区信息。

  • fdisk /dev/sdX:对指定磁盘(如 /dev/sda)进行分区操作,其中 X 代表磁盘标识符。

交互模式命令

当进入 fdisk 交互模式后,可使用以下命令:

  • m:显示帮助菜单,列出所有可用命令。

  • p:打印当前磁盘的分区表信息。

  • n:创建新的分区。

  • d:删除指定的分区。

  • t:更改分区的类型。

  • a:设置分区的启动标志。

  • w:将所作的更改写入磁盘并退出。

  • q:不保存更改,直接退出。

使用示例

查看分区信息

若要查看系统中所有磁盘的分区信息,可执行以下命令:

sudo fdisk -l

执行该命令后,会显示类似如下的输出:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3E5B6F8A-4E4A-4A4A-9B9B-9C9C9C9C9C9C
​
Device         Start       End   Sectors   Size Type
/dev/sda1       2048    534527    532480   260M EFI System
/dev/sda2     534528  39116799  38582272  18.4G Linux filesystem
/dev/sda3   39116800 500117503 460999704 220.8G Linux filesystem

对新磁盘进行分区

若要对新磁盘 /dev/sdb 进行分区,可按以下步骤操作:

  1. 进入交互模式:

sudo fdisk /dev/sdb
  1. 输入 n 创建新分区,按提示设置分区大小等参数。

  2. 输入 w 保存更改并退出。

注意事项

  • 数据安全:在使用 fdisk 操作磁盘时要格外谨慎,因为误操作可能会导致数据丢失。

  • GPT 与 MBR:对于大于 2TB 的磁盘,建议使用 GPT 分区表,可通过 gdiskparted 命令来创建。

  • 刷新分区表:对磁盘进行分区操作后,可能需要重启系统或者使用 partprobe 命令来使内核识别新的分区。

如果你需要对特定磁盘进行操作,请先备份重要数据,避免因操作不当造成数据损失

选项:

选项作用
-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 是一个功能强大的命令行磁盘分区工具,适用于创建、删除、调整大小和检查磁盘分区。它支持 GPT 和 MBR 分区表,能处理大于 2TB 的磁盘,且无需重启系统即可生效。以下是其核心功能和用法:

基本用法

parted [选项] [设备] [命令 [参数]]

选项:

选项作用
-l,--list列出所有块设备上的分区布局
-h,--help显示此帮助信息

常用命令

  1. 启动交互式模式

    parted /dev/sda

    进入交互界面后,可用printmkpart等命令操作。

  2. 显示磁盘信息

    parted /dev/sda print
    • print:显示分区表和分区信息。运行这条命令后,系统会显示出 /dev/sda 磁盘当前的分区布局,包括分区的编号、类型、起始位置、结束位置、大小等详细信息,以便用户了解磁盘的分区情况。

    • print all:显示所有磁盘的信息。

  3. 创建分区

    (parted环境下) mkpart primary ext4 1GB 10GB
    • primary:主分区类型。

    • ext4:文件系统类型。

    • 1GB-10GB:分区大小范围。

  4. 调整分区大小

    (parted) resizepart 2

    调整第二个分区的大小(需指定新的结束位置)。

  5. 删除分区

    (parted) rm 2

    删除第二个分区。

  6. 切换分区表类型

    (parted) mklabel gpt  # 或 msdos (MBR)

非交互式命令示例

  • 创建 GPT 分区表并划分 3 个分区:

    parted /dev/sdb -- mklabel gpt \
      mkpart primary ext4 1MB 512MB \
      mkpart primary ext4 512MB 10GB \
      mkpart primary ext4 10GB 100%

重要选项

  • -s/--script:非交互式模式,用于脚本自动化。

  • -a optimal:按最佳对齐方式创建分区。

注意事项

  1. 数据安全:操作前务必备份数据,错误操作可能导致数据丢失。

  2. 权限要求:需使用sudo或 root 权限执行。

  3. 挂载状态:修改分区前需确保目标分区未被挂载。

  4. 文件系统:创建分区后,需用mkfs命令格式化(如mkfs.ext4 /dev/sda1)。

案例:

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命令

sblk 是 Linux 系统中一个用于列出块设备信息的命令。块设备是指那些以块为单位进行数据传输的设备,像硬盘、U 盘以及光驱都属于此类。

命令用途

lsblk 主要用于查看系统中块设备的层级结构、挂载点、大小、文件系统等信息,它会以树形结构将这些信息清晰地展示出来。

常用参数

  • -a:该参数的作用是显示所有设备,包括那些未挂载的设备。

  • -l:使用此参数会以列表形式输出信息,而非默认的树形结构。

  • -f:通过这个参数可以查看文件系统和 UUID 信息。

  • -h:当你需要查看帮助信息时,使用该参数即可。

  • -m:此参数用于显示设备的权限和所有者信息。

  • -p:它会显示设备的完整路径。

  • -t:使用该参数能查看设备的拓扑结构信息。

使用示例

下面列举几个常见的使用场景:

1、显示所有块设备:

lsblk

2、显示所有设备,包含未挂载的:

lsblk -a

3、以列表形式显示设备信息:

lsblk -l

4、显示设备的文件系统信息:

lsblk -f

5、显示设备的详细信息,如权限、所有者等:

lsblk -m

输出字段说明

lsblk 的输出结果中,通常会包含以下字段:

  • NAME:设备名称。

  • MAJ:MIN:主设备号和次设备号。

  • RM:设备是否可移动,1 表示可移动,0 表示不可移动。

  • SIZE:设备的大小。

  • RO:设备是否为只读,1 表示只读,0 表示可读写。

  • TYPE:设备类型,常见的有 disk(磁盘)、part(分区)、rom(只读存储器)等。

  • MOUNTPOINT:设备的挂载点,如果显示为空,则表示该设备未挂载。

示例输出

下面是一个 lsblk 命令的示例输出:

案例:

[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

artprobe 是一个 Linux 系统管理命令,属于 parted 软件包,其主要功能是通知 Linux 内核硬盘分区表的变化,而无需重新启动系统。以下是关于该命令的详细说明:

基本用途

当你对硬盘分区表进行修改(例如创建、删除或调整分区)后,内核不会立即感知到这些变化。此时使用 partprobe 可以:

  • 重新读取分区表并更新内核的分区信息。

  • 使新的分区配置立即生效,无需重启系统。

常见用法

  1. 更新所有磁盘的分区表

    sudo partprobe
  2. 仅更新指定磁盘的分区表(例如 /dev/sda):

    sudo partprobe /dev/sda
  3. 更新特定分区(较少使用,通常直接更新整个磁盘):

    sudo partprobe /dev/sda1

注意事项

  • 权限要求:必须使用 sudo 执行此命令。

  • 适用场景:仅适用于分区表结构的变更,若要使文件系统生效,仍需挂载新分区(例如通过 mount 命令)。

  • 局限性:对于某些复杂的分区变更(如 LVM、RAID),可能需要额外操作或重启系统。

  • 替代方案:若 partprobe 无效,可尝试使用 udevadm triggerkpartx 命令。

示例流程

假设你使用 fdisk 修改了 /dev/sda 的分区表:

  1. 使用 fdisk /dev/sda 创建新分区。

  2. 保存并退出 fdisk

  3. 执行:

    sudo partprobe /dev/sda
  4. 使用 lsblkfdisk -l 验证分区是否已更新。

相关命令

  • fdisk:分区表编辑器。

  • lsblk:列出块设备(包括分区)。

  • mount:挂载文件系统。

案例:

[root@c2407 ~]# partprobe /dev/sdb

3.3、blkid命令

blkid 是 Linux 系统中用于查看块设备(如硬盘、U 盘、分区等)属性的命令,主要用于识别块设备上的文件系统类型、UUID(通用唯一标识符)和其他标签信息。这些信息对于系统配置(如 /etc/fstab 文件)和脚本编写非常有用。(即:查看磁盘分区的UUID)

常用场景

  1. 查看设备 UUID:在 /etc/fstab 中推荐使用 UUID 挂载分区,避免设备名称变化导致的挂载失败。

  2. 识别文件系统类型:快速确认分区使用的是 ext4、XFS 还是其他文件系统。

  3. 查找特定设备:通过标签或 UUID 筛选设备。

基本用法

# 查看指定设备的属性(例如 /dev/sda1)
blkid /dev/sda1

# 仅显示 UUID
blkid -s UUID -o value /dev/sda1

# 仅显示 TYPE(文件系统类型)
blkid -s TYPE -o value /dev/sda1
# 查看所有块设备的属性
[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" 

主要选项

  • -s <tag>:仅显示指定的标签(如 UUIDTYPELABEL)。

  • -o <format>:输出格式,支持 full(默认)、briefdevicevalue

  • -c <file>:指定缓存文件(默认使用 /etc/blkid.tab)。

  • -p:强制探测设备,忽略缓存。

注意事项

  • 需要 root 权限才能查看所有设备的完整信息。

  • 输出中的 UUID 是文件系统的唯一标识符,与分区的 PARTUUID 不同(后者是分区表中的标识符)。

如果需要在脚本中自动挂载设备或处理特定文件系统,blkid 是获取设备信息的重要工具。

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 

例如,要在 “/dev/sda1” 分区上创建 ext4 文件系统,可以使用 “mkfs -t ext4 /dev/sda1” 。

选项:

选项作用
-t文件系统类型
-v产生冗长输出信息。即展开详细信息
-f强制格式化(不询问确认)
  • 示例:将 /dev/sdb1 格式化为 ext4 文件系统:

    mkfs -t ext4 /dev/sdb1

    为方便使用,mkfs 对常见文件系统提供了简写形式:

    文件系统等效命令
    ext4mkfs.ext4
    xfsmkfs.xfs
    btrfsmkfs.btrfs
    vfatmkfs.vfatmkdosfs

    示例

    mkfs.ext4 /dev/sdb1  # 等同于 mkfs -t ext4 /dev/sdb1
    mkfs.xfs /dev/sdc1   # 格式化为 XFS 文件系统

    重要注意事项

    1. 数据安全:格式化会永久删除分区中的所有数据,请务必提前备份!

    2. 权限要求:需要 root 权限(使用 sudo)。

    3. 确认分区:操作前务必通过 lsblkfdisk -l 确认目标分区,避免误操作!

案例:

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, 884736

Allocating 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命令在 Linux 系统里的主要功能是把文件系统挂载到指定的挂载点上,这样文件系统才能被用户访问。

基本格式

mount [-t 文件系统类型] [-o 选项] 设备名 挂载点

mount - mount a filesystem,挂载一个文件系统;临时挂载,重启失效!

swapon:挂载swap文件系统

语法:

例1、mount [-lhV]
1、“-l” 通常用于列出已挂载的文件系统,并且会显示文件系统的标签(如果有)。例如执行 “mount -l”,系统会展示当前所有已挂载的文件系统及其详细信息。
2、“-h” 一般用于显示帮助信息,当用户对该命令的使用方法不熟悉时,执行 “mount -h”,系统会给出关于 “mount” 命令的用法、选项等说明内容。
3、“-V” 通常用于显示 “mount” 命令的版本信息,执行 “mount -V”,会展示当前系统中 “mount” 命令程序的版本号。

例2、mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
1、“mount -a”:“mount” 是挂载文件系统的基础命令,“-a” 选项表示会根据配置文件(通常是 /etc/fstab)中定义的内容,尝试挂载所有文件系统。
2、“[-fFnrsvw]”:这是一系列可选参数,每个参数都有特定功能。例如,“-f” 通常用于模拟挂载操作,但并不真正执行挂载,常用于测试;“-n” 可使挂载操作不更新 /etc/mtab 文件。
3、“[-t vfstype]”:“-t” 选项用于指定要挂载的文件系统类型,“vfstype” 处需替换为实际的文件系统类型,如 “ext4”“ntfs”“iso9660” 等。例如 “-t ext4” 表示要挂载 ext4 类型的文件系统。
4、“[-O optlist]”:“-O” 选项用于指定挂载时的额外选项,“optlist” 是一个或多个选项组成的列表,不同文件系统支持的选项不同。例如,对于 ext4 文件系统,可能会有 “rw”(读写权限)、“ro”(只读权限)等选项。

例3、mount [-fnrsvw] [-o option[,option]...]  device|dir
1、“[-fnrsvw]” 中的这些中括号内的字母代表可选参数:
“-f” 通常用于模拟挂载操作,并不实际执行挂载,主要用于测试。
“-n” 表示执行挂载操作时不将挂载信息写入到 /etc/mtab 文件中。
“-r” 以只读方式挂载设备。
“-s” 不支持某些特定的文件系统类型时,不会报错提示。
“-v” 显示挂载过程中的详细信息。
“-w” 以可读写方式挂载设备,这是默认的挂载方式。
2、“[-o option [,option]...]” 表示通过 “-o” 参数可以指定一些额外的挂载选项,多个选项之间用逗号分隔。例如 “-o ro” 表示以只读方式挂载,“-o remount” 用于重新挂载已经挂载的设备,可用于修改挂载参数。
3、“device|dir” 表明这里既可以是要挂载的设备(例如 /dev/sda1 代表某个硬盘分区),也可以是挂载点目录(文件系统中用于挂载设备的目录,比如 /mnt )。“[-fnrsvw]” 中的这些中括号内的字母代表可选参数:
“-f” 通常用于模拟挂载操作,并不实际执行挂载,主要用于测试。
“-n” 表示执行挂载操作时不将挂载信息写入到 /etc/mtab 文件中。
“-r” 以只读方式挂载设备。
“-s” 不支持某些特定的文件系统类型时,不会报错提示。
“-v” 显示挂载过程中的详细信息。
“-w” 以可读写方式挂载设备,这是默认的挂载方式。

例4、mount [-fnrsvw] [-t vfstype] [-o options] device dir
“[-fnrsvw]” 表示 mount 命令可携带的一些选项,每个字母代表不同功能,比如 “f” 可能是模拟挂载(不实际挂载),“n” 可能是不将挂载信息写入 /etc/mtab 等;
“[-t vfstype]” 表示通过 “-t” 选项指定要挂载的文件系统类型,如 ext4、ntfs 等;
“[-o options]” 通过 “-o” 选项设定一些额外的挂载选项,例如读写权限等;“device” 代表要挂载的设备,比如硬盘分区、U 盘设备路径等;“dir” 表示挂载点,即设备挂载到系统中的某个目录位置。

选项:

-r以只读模式挂载文件系统。
选项作用
-t指定要挂载的文件系统类型,常见的文件系统类型有ext4、ntfs、vfat等。
-o指定挂载选项,比如可以指定只读挂载(ro)、允许所有用户挂载(user)、允许执行程序挂载(exec)等。
-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, 73729

Allocating 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 命令” 用于卸载已挂载的文件系统,它能将设备与挂载点分离,比如卸载一个已挂载的 U 盘,使其能安全移除。例如,当你不再需要访问挂载在 “/mnt/usb” 的 U 盘时,可执行 “umount /mnt/usb” 命令。

“swapoff 命令” 用于关闭交换空间,交换空间是磁盘上的一块区域,当系统物理内存不足时,部分内存数据会被交换到这里。比如系统内存紧张,要临时关闭交换空间,可执行 “swapoff -a” 命令关闭所有交换空间。这两个命令在系统管理存储设备和内存管理方面发挥重要作用。

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、开机状态下创建新硬盘

原有硬盘中存在文件时直接进行磁盘分区可能会损坏文件。

2、 确认新硬盘是否被系统识别

# 查看所有可用磁盘(重点关注新添加的磁盘,如sdb、nvme1n1等)
lsblk
没添加:[root@localhost ~]# 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
sr0              11:0    1 1024M  0 rom  

添加后:[root@localhost ~]# 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
sr0              11:0    1 1024M  0 rom  
结果:没有识别
识别:[root@localhost ~]# for i in `ls /sys/class/scsi_host`;do echo "- - -" >/sys/class/scsi_host/$i/scan;done
通过循环遍历 “/sys/class/scsi_host” 目录下的所有文件或目录(ls /sys/class/scsi_host列出该目录下的内容,for 循环将依次处理这些内容,每次循环时i代表其中一个文件或目录)。在每次循环中,向 “/sys/class/scsi_host/$i/scan” 这个文件写入 “- - -” 字符串。该操作的目的通常是触发 SCSI 主机适配器重新扫描 SCSI 总线,以便系统能够识别新连接的 SCSI 设备。例如,当新接入一块 SCSI 硬盘时,执行此命令可能使系统识别到该新设备。
[root@localhost ~]# 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 
sr0              11:0    1 1024M  0 rom  

# 查看详细磁盘信息及分区表
fdisk -l

# 查看内核消息(寻找与新磁盘相关的检测信息)
dmesg | grep -i 'sd\|nvme'

3、 查看当前磁盘情况

首先,要确认系统中磁盘的状态,从而找出可用于分区的磁盘。(在关机状态创建硬盘后开机会被识别,不需要上面的磁盘识别操作)

# 查看所有磁盘信息
fdisk -l
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:214.7 GB, 214748364800 字节,419430400 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e6301

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   419430399   208665600   8e  Linux LVM

# 查看存储设备的详细信息
lsblk
[root@localhost ~]# 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 
sr0              11:0    1 1024M  0 rom  

# 查看磁盘使用情况
df -h
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 894M     0  894M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M   11M  900M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  4.5G   46G    9% /
/dev/sda1               1014M  185M  830M   19% /boot
/dev/mapper/centos-home  147G   40M  147G    1% /home
tmpfs                    182M   12K  182M    1% /run/user/42
tmpfs                    182M     0  182M    0% /run/user/0

4、对新磁盘进行分区

假设新添加的磁盘是/dev/sdb,现在要对其进行分区操作。

# 使用fdisk工具对磁盘进行分区
fdisk /dev/sdb

# 进入fdisk交互界面后,依次执行以下操作:
n    # 创建新分区
p    # 选择主分区
1    # 指定分区号为1
     # 直接按回车键,使用默认的起始扇区
     # 划分扇区:+输入大小(如:+5G)
w    # 保存分区表并退出

示例

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

[root@localhost ~]# 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  

5、格式化分区

将新建的分区格式化为 ext4 文件系统。

mkfs.ext4 /dev/sdb1

[root@localhost ~]# mkfs.ext4 /dev/sdb1
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, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

6、创建挂载点目录

mkdir /mnt/data
[root@localhost ~]# ls -ld /mnt/data
drwxr-xr-x. 2 root root 6 5月  20 18:49 /mnt/data

7、 挂载分区

mount /dev/sdb1 /mnt/data

8、 验证挂载结果

# 查看挂载情况
df -h或ls -l /mnt/data或lsblk -f | grep sdb1
[root@localhost ~]# ls -l /mnt/data
总用量 16
drwx------. 2 root root 16384 5月  20 18:48 lost+found

如果挂载失败,请检查:

  • 分区是否存在(fdisk -l /dev/sdb)。

  • 分区是否已格式化(mkfs.ext4 /dev/sdb1)。

  • 挂载点目录权限(chmod 755 /mnt/data)。

9、 设置开机自动挂载

编辑/etc/fstab文件,添加新分区的挂载信息。

# 获取分区的UUID
blkid /dev/sdb1
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="c3759877-d394-4dd4-b4cf-3a07b5ec6383" TYPE="ext4" 

# 编辑fstab文件
vim /etc/fstab

# 在文件末尾添加以下内容(将UUID替换为实际的值)
UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxx /mnt/data ext4 defaults 0 0 
或/dev/sdb1 /mnt/data ext4 defaults 0 0
/dev/sdb1:挂载源  /mnt/data:挂载点  ext4:分区文件系统类型  defaults:挂载选项,默认
0 0 :开机自检 自动备份

10、测试自动挂载配置

# 卸载刚才挂载的分区
umount /mnt/data
# 重新挂载所有fstab中定义的分区
mount -a
# 再次检查挂载情况
df -h
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/sdb1                4.8G   20M  4.6G    1% /mnt/data

11、报错实验

1、挂载源 /mnt/data:错误

错:/dev/sdb12 /mnt/data ext4

[root@localhost ~]# vim /etc/fstab [root@localhost ~]# mount -a mount: 特殊设备 /dev/sdb12 不存在

处理方法:

挂载源 /mnt/data:错误,用reboot重启后发现开机失败,按Esc进入启动代码界面,发现加载界面超时,采用页面里的解决方法,输journalctl -xb 进入系统日志,按PgUPhe和PgDn上下翻页,发现设备等待超时(- systemd[1]: Job dev - sdb12.device/start timed out. 系统守护进程(systemd)[1]:设备 dev - sdb12.device 的启动任务超时。),然后考虑设备在哪里被查(/etc/fstab),后用vim /etc/fstab命令进入修改页面(想在日志中输入内容按:),按lsblk查看后退出vim界面,后在进入修改挂载源,用reboot重启,届时成功开机。

2、挂载点 /mnt/data1 :错误

挂载点 /mnt/data1 错误:/dev/sdb1 /mnt/data1 ext4 defaults 0 0

[root@localhost ~]# mount -a mount: 挂载点 /mnt/data1 不存在

处理方法:

重启后打开终端:[root@localhost ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sdb1 ext4 5.2G 21M 4.9G 1% /mnt/data1

3、分区文件系统类型 ext4:错误

错误:/dev/sdb1 /mnt/data ext55 defaults 0 0

[root@localhost ~]# umount /mnt/data [root@localhost ~]# mount -a mount: 未知的文件系统类型“ext55”

处理方法:

1、重启后进入页面

2、输入密码后查看系统日志错误在用vim修改,步骤同上。

4、挂载选项,默认 defaults:错误

错误:/dev/sdb1 /mnt/data ext4 defaults1 0 0

[root@localhost ~]# vim /etc/fstab [root@localhost ~]# mount -a mount: 文件系统类型错误、选项错误、/dev/sdb1 上有坏超级块、 缺少代码页或助手程序,或其他错误

   有些情况下在 syslog 中可以找到一些有用信息- 请尝试
   dmesg | tail  这样的命令看看。

5、开机自检 自动备份 0 0 :错误---(能使用)

错误:/dev/sdb1 /mnt/data1 ext4 defaults 1 0

root@localhost ~]# umount /mnt/data [root@localhost ~]# mount -a [root@localhost ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 937M 0 937M 0% /dev tmpfs tmpfs 954M 0 954M 0% /dev/shm tmpfs tmpfs 954M

结果:前四列写错就报错,但能使用最后一列错能使用。

处理方法:

终端:/dev/sdb1 ext4 5.2G 21M 4.9G 1% /mnt/data

无影响

其他实用操作

挂载 NTFS 分区

如果要挂载 Windows 的 NTFS 分区,需要先安装ntfs-3g工具。

# 安装ntfs-3g
sudo apt-get install ntfs-3g  # Ubuntu/Debian
sudo yum install ntfs-3g      # CentOS/RHEL

# 挂载NTFS分区
mount -t ntfs-3g /dev/sdc1 /mnt/windows
挂载 ISO 文件
mkdir /mnt/iso
mount -o loop /path/to/file.iso /mnt/iso
卸载分区
umount /mnt/data
# 或者通过设备名卸载
umount /dev/sdb1

注意事项

  1. 进行分区和格式化操作会清除磁盘上原有的数据,所以在操作前一定要做好数据备份。

  2. 编辑/etc/fstab文件时要格外谨慎,如果配置出现错误,可能会导致系统无法正常启动。

  3. 在卸载分区之前,要保证没有任何程序正在访问该分区。可以使用lsof命令来确认。

lsof +D /mnt/data
  1. 如果需要挂载 NFS 或 SMB 网络共享,还需要安装相应的客户端工具,例如nfs-commoncifs-utils

四、LVM逻辑卷

1、概述

LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进行管理的⼀种机制; 安装 Linux 操作系统时遇到的⼀个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空 间; 普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。

1.1、运行原理

LVM 通过三层抽象实现磁盘管理的灵活性:

核心概念

  1. 物理卷(Physical Volume, PV)

    • 底层物理存储设备(如硬盘、分区),通过pvcreate初始化为 LVM 可管理的设备。

    • 每个 PV 被划分为固定大小的物理扩展块(Physical Extent, PE),默认大小为 4MB。

  2. 卷组(Volume Group, VG)

    • 由多个物理卷组成的存储池,可视为一个 “虚拟磁盘”。

    • 卷组中的空间可动态分配给逻辑卷,无需考虑物理磁盘的限制。

  3. 逻辑卷(Logical Volume, LV)

    • 从卷组中划分出的逻辑分区,用户可将其格式化并挂载使用。

    • 逻辑卷被划分为逻辑扩展块(Logical Extent, LE),与物理扩展块一一对应。

工作原理

1. 数据存储映射

LVM 通过三级映射实现数据从文件系统到物理磁盘的存储:

  • 文件系统 → 逻辑卷:文件系统将数据写入逻辑卷的逻辑地址空间。

  • 逻辑卷 → 卷组:逻辑卷通过 LE 与卷组中的 PE 建立映射关系。

  • 卷组 → 物理卷:卷组将 PE 分配到具体的物理卷和物理扇区。、工作原理

    数据存储映射

    LVM 通过三级映射实现数据从文件系统到物理磁盘的存储:

    • 文件系统 → 逻辑卷:文件系统将数据写入逻辑卷的逻辑地址空间。

    • 逻辑卷 → 卷组:逻辑卷通过 LE 与卷组中的 PE 建立映射关系。

    • 卷组 → 物理卷:卷组将 PE 分配到具体的物理卷和物理扇区。

1.2、LVM 相关概念:

即逻辑卷管理(Logical Volume Manager),是在 Linux 系统中对磁盘分区进行管理的一种机制。

1.PV(Physical Volume):物理卷

处于 LVM 最底层,可以是物理硬盘或者分区,整个硬盘,或使用fdisk 等⼯具建⽴的普通分区,包许多默认 4MB 大小的 PE(Physical Extent,基本单元)。

2.PE(Physical Extend):物理区域

PV 中可以用于分配的最小存储单元,可以在创建 PV 的时候制定(默认为 4MB),如 1M, 2M, 4M, 8M, 32M, 64M… 组成同⼀VG 中所有 PV 的 PE大小应该相同。

3.VG(Volume Group):卷组

建立在 PV 之上,可以含有一个到多个 PV,一个或多个物理卷组合而成的整体。

4.LV(Logical Volume):逻辑卷

建立在 VG 之上,相当于原来分区的概念,不过大小可以动态改变。从卷组中分割出的一块空间,用于建立文件 系统。

1.3、挂载流程

2、管理命令

功能PV物理卷命令VG卷组命令LV逻辑卷命令
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
查询pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩容vgextendlvextend
缩容(不能用,除非备份后)vgreducelvreduce

3、配置案例

3.1构建LVM逻辑卷完整案例总步骤:

1. 环境准备

假设系统中有两块未分区磁盘:/dev/sdb/dev/sdc,将用于创建 LVM。

2. 创建物理卷 (PV)

pvcreate /dev/sdb /dev/sdc
  • 查看物理卷状态:

pvdisplay

3. 创建卷组 (VG)

创建名为data_vg的卷组,包含之前创建的两个物理卷:

vgcreate data_vg /dev/sdb /dev/sdc
  • 查看卷组状态:

vgdisplay

4. 创建逻辑卷 (LV)

data_vg卷组中分配 8GB 空间创建名为app_lv的逻辑卷:

lvcreate -L 8G -n app_lv data_vg
  • 查看逻辑卷状态:

lvdisplay
  1. 格式化逻辑卷

将逻辑卷格式化为 XFS 文件系统:

mkfs.xfs /dev/data_vg/app_lv

6. 挂载逻辑卷

创建挂载点并挂载逻辑卷:

mkdir /data/app
mount /dev/data_vg/app_lv /data/app

7. 设置自动挂载

编辑/etc/fstab文件,添加以下内容:

/dev/data_vg/app_lv  /data/app  xfs  defaults  0 0

8. LVM 扩展示例

若需要将app_lv扩展至 12GB:

lvextend -L +4G /dev/data_vg/app_lv
xfs_growfs /data/app  # 对于XFS文件系统
# 对于ext4文件系统使用:resize2fs /dev/data_vg/app_lv

9. LVM 缩减示例(危险操作!)

缩减前需确保文件系统有足够空闲空间:

umount /data/app
e2fsck -f /dev/data_vg/app_lv  # 检查ext4文件系统
resize2fs /dev/data_vg/app_lv 6G  # 先缩减文件系统到6GB
lvreduce -L 6G /dev/data_vg/app_lv  # 再缩减逻辑卷
mount /data/app  # 重新挂载

10. 删除 LVM 逻辑卷(不可逆!)

umount /data/app
lvremove /dev/data_vg/app_lv
vgremove data_vg
pvremove /dev/sdb /dev/sdc

关键注意事项

  1. 缩减操作前必须卸载文件系统并备份数据

  2. XFS 文件系统只支持扩展,不支持在线缩减

  3. 操作前建议通过pvdisplayvgdisplaylvdisplay确认状态

  4. 修改/etc/fstab后建议用mount -a测试挂载配置

以上步骤涵盖了 LVM 从创建到管理的完整生命周期,可根据实际需求调整容量和文件系统类型。

3.2、构建LVM逻辑卷具体示例

#识别创建后的磁盘
[root@localhost ~]# for i in `ls /sys/class/scsi_host`;do echo "- - -">/sys/class/scsi_host/$i/scan;done
[root@localhost ~]# 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 /mnt/data
sdc               8:32   0    8G  0 disk 
sdd               8:48   0    8G  0 disk 
sde               8:64   0    8G  0 disk 
sr0              11:0    1 1024M  0 rom  
#查看pv物理卷
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<199.00 GiB / 4.00 MiB free]
  Total: 1 [<199.00 GiB] / in use: 1 [<199.00 GiB] / in no VG: 0 [0   ]
  	
#创建物理卷
[root@localhost ~]# pvcreate /dev/sdc /dev/sdd /dev/sde
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
  Physical volume "/dev/sde" successfully created.
  
  #查看建立的物理卷(要删除用pvremove)
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <199.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              50943
  Free PE               1
  Allocated PE          50942
  PV UUID               97TDph-ktWC-LzvK-914e-32qe-EnSB-9WCKgV
   
  "/dev/sdd" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               XK9EEt-bMkQ-oese-n3ch-Iaiz-welM-XDHZfk
   
  "/dev/sde" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sde
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               CSz8fk-tZkR-9wjw-ZqjP-oMIj-6b6s-7u93SL
   
  "/dev/sdc" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OFJ1HB-x5q6-8XGr-fmfG-UeXG-MLfL-D

#创建卷组
[root@localhost ~]# vgcreate juanzu  /dev/sdc /dev/sdd /dev/sde
  Volume group "juanzu" successfully created
  
  #查看卷组信息
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               juanzu
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  
#创建逻辑卷
[root@localhost ~]# lvcreate -n luojijuan juanzu -L 2G
  Logical volume "luojijuan" created.
  
#查询逻辑卷是否创建成功
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/juanzu/luojijuan
  LV Name                luojijuan
  VG Name                juanzu
  LV UUID                i92YWn-avCP-OTnU-l7Gz-mLr2-VSKo-AIjJo4
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2025-05-21 19:29:31 +0800
  
#格式化逻辑卷
[root@localhost ~]# mkfs.xfs /dev/juanzu/luojijuan
meta-data=/dev/juanzu/luojijuan  isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, 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

#创建逻辑卷挂载点
[root@localhost ~]# mkdir /guazaidian

#挂载逻辑卷和查看
[root@localhost ~]# mount /dev/juanzu/luojijuan /guazaidian
[root@localhost ~]# df -TH
文件系统                     类型      容量  已用  可用 已用% 挂载点
devtmpfs                     devtmpfs  937M     0  937M    0% /dev
tmpfs                        tmpfs     954M     0  954M    0% /dev/shm
tmpfs                        tmpfs     954M   11M  944M    2% /run
tmpfs                        tmpfs     954M     0  954M    0% /sys/fs/cgroup
/dev/mapper/centos-root      xfs        54G  5.1G   49G   10% /
/dev/sda1                    xfs       1.1G  194M  870M   19% /boot
/dev/mapper/centos-home      xfs       158G   42M  158G    1% /home
tmpfs                        tmpfs     191M   13k  191M    1% /run/user/42
tmpfs                        tmpfs     191M     0  191M    0% /run/user/0
/dev/mapper/juanzu-luojijuan xfs       2.2G   34M  2.2G    2% /guazaidian

3.3、扩容LVM逻辑卷

#基于XFS文件系统的lv扩容逻辑卷
[root@localhost ~]# lvextend /dev/juanzu/luojijuan -L +2G
  Size of logical volume juanzu/luojijuan changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume juanzu/luojijuan successfully resized.
  
  #查看逻辑卷扩容结果
  [root@localhost ~]# lvdisplay /dev/juanzu/luojijuan
  --- Logical volume ---
  LV Path                /dev/juanzu/luojijuan
  LV Name                luojijuan
  VG Name                juanzu
  LV UUID                i92YWn-avCP-OTnU-l7Gz-mLr2-VSKo-AIjJo4
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2025-05-21 19:29:31 +0800
  LV Status              available
  # open                 1
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
   
  #扩展 XFS 文件系统大小
[root@localhost ~]# xfs_growfs /dev/juanzu/luojijuan
meta-data=/dev/mapper/juanzu-luojijuan isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 524288 to 1048576

#查看扩展 XFS 文件系统结果
[root@localhost ~]# df -TH
文件系统                     类型      容量  已用  可用 已用% 挂载点
devtmpfs                     devtmpfs  937M     0  937M    0% /dev
tmpfs                        tmpfs     954M     0  954M    0% /dev/shm
tmpfs                        tmpfs     954M   11M  944M    2% /run
tmpfs                        tmpfs     954M     0  954M    0% /sys/fs/cgroup
/dev/mapper/centos-root      xfs        54G  5.1G   49G   10% /
/dev/sda1                    xfs       1.1G  194M  870M   19% /boot
/dev/mapper/centos-home      xfs       158G   42M  158G    1% /home
tmpfs                        tmpfs     191M   13k  191M    1% /run/user/42
tmpfs                        tmpfs     191M     0  191M    0% /run/user/0
/dev/mapper/juanzu-luojijuan xfs       4.3G   34M  4.3G    1% /guazaidian

##基于EXT文件系统的lv扩容
[root@c2407 ~]# lvextend /dev/testvg2/testlv2 -L +2G
[root@c2407 ~]# e2fsck -f /dev/testvg2/testlv2 
e2fsck 1.42.9 (28-Dec-2013)
/dev/testvg2/testlv2 is mounted.
e2fsck: 无法继续, 中止.

[root@c2407 ~]# umount /testlv2 
[root@c2407 ~]# e2fsck -f /dev/testvg2/testlv2 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/testvg2/testlv2: 11/131072 files (0.0% non-contiguous), 26156/524288 blocks
[root@c2407 ~]# res
rescan-scsi-bus.sh  resize2fs           resizepart          
reset               resizecons          restorecon          
[root@c2407 ~]# resize2fs /dev/testvg2/testlv2 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/testvg2/testlv2 to 1048576 (4k) blocks.
The filesystem on /dev/testvg2/testlv2 is now 1048576 blocks long.

[root@c2407 ~]# mount /dev/testvg2/testlv2 /testlv2/
[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
/dev/mapper/testvg-testlv   xfs       4.0G   33M  4.0G    1% /testlv
/dev/mapper/testvg2-testlv2 ext4      3.9G  8.0M  3.7G    1% /testlv2
3.3.1区别:

lvextend /dev/testvg/testlv -L +2G和xfs_growfs /dev/testvg/testlv 区别

lvextendxfs_growfs是 LVM 逻辑卷管理中两个不同的操作,它们的主要区别如下:

1. lvextend - 扩展逻辑卷(物理层面)

作用

  • 扩展逻辑卷的物理容量,即增加逻辑卷在卷组中占用的空间。

  • 逻辑卷是一个虚拟的磁盘分区,lvextend操作会调整这个虚拟分区的大小,但不会改变文件系统的大小

命令示例

lvextend /dev/testvg/testlv -L +2G
  • 含义:给testlv逻辑卷增加 2GB空间(+2G表示增量)。

  • 若卷组空间不足,会报错(需先扩展卷组或调整其他逻辑卷)。

2. xfs_growfs - 扩展文件系统(逻辑层面)

作用

  • 扩展文件系统的大小,使其能够利用lvextend后新增加的空间。

  • 文件系统是存储数据的组织方式(如 XFS、ext4),扩展后才能真正使用新增的磁盘空间。

命令示例

xfs_growfs /dev/testvg/testlv
  • 含义:自动将testlv上的 XFS 文件系统扩展到最大可用空间(即逻辑卷的实际大小)。

  • 注意:该命令仅适用于 XFS 文件系统。对于 ext4 文件系统,需使用resize2fs

3. 为什么需要两步操作?

LVM 的扩展分为两个独立步骤:

  1. 扩展逻辑卷(物理):通过lvextend增加虚拟分区大小。

  2. 扩展文件系统(逻辑):通过xfs_growfsresize2fs让文件系统使用新增空间。

示例流程

# 1. 扩展逻辑卷(增加2GB物理空间)
lvextend /dev/testvg/testlv -L +2G

# 2. 扩展文件系统(让XFS使用新增空间)
xfs_growfs /dev/testvg/testlv

4. 不同文件系统的扩展命令

  • XFS(CentOS/RHEL 7 + 默认):

    xfs_growfs /挂载点  # 或 xfs_growfs /dev/逻辑卷路径
    • 注意:XFS只能扩展,不能缩减,且必须在线操作(挂载状态)

  • ext4

    resize2fs /dev/逻辑卷路径  # 可在线扩展,缩减需卸载对应的逻辑卷,以确保数据安全和操作的可行性。

5. 常见错误场景

  • 只执行lvextend,未执行文件系统扩展

    • 逻辑卷已变大,但文件系统仍保持原大小,导致空间浪费。

    • df -h查看时,可用空间不会增加。

  • 执行顺序错误

    • 必须先扩展逻辑卷,再扩展文件系统。否则会报错 “空间不足”。

总结对比

操作lvextendxfs_growfs(或resize2fs
作用对象逻辑卷(LVM 层面)文件系统(数据组织层面)
命令效果增加逻辑卷的物理容量扩展文件系统以利用新增的物理空间
文件系统限制不依赖文件系统类型XFS 用xfs_growfs,ext4 用resize2fs
是否需要卸载不需要(可在线操作)XFS 必须在线;ext4 扩展可在线,缩减需卸载

通过这两个命令的配合,可安全、高效地扩展存储容量。

3.4、缩容LVM逻辑卷(不建议)

五、磁盘配额

1、概述

针对用户和组,用于配置用户和组在该磁盘的使用容量限制。

在 Linux 系统中,磁盘配额(Disk Quota)的配置对象是文件系统(通常对应逻辑分区或物理分区),而非单个磁盘(物理磁盘)或逻辑卷(LVM)本身。

配额的作用范围

  • 磁盘配额是基于文件系统(如 ext4xfs)生效的,而文件系统通常建立在逻辑分区物理分区上(例如 /dev/sda1/dev/mapper/vg0-lv0)。

  • 一个物理磁盘(如 /dev/sda)可能包含多个分区(如 /dev/sda1/dev/sda2),每个分区可格式化为独立的文件系统,每个文件系统的配额需单独配置

配额类型:

  • usrquota:支持对用户的磁盘配额

  • grpquota:支持对组的磁盘配额

限制类型:

  • 软限制:指定一个软性的配额数据值,用户超过这个数据时,系统给出警告信息,可以打破数据值。

  • 硬限制:指定一个硬性的配额值,禁止用户超过这个限制。

    2、配置命令

2.1、quota命令

是在类 Unix 操作系统(如 Linux、FreeBSD 等)中用于查看用户或组磁盘配额使用情况的命令。磁盘配额是一种限制用户或组在特定文件系统上可以使用的磁盘空间和 inode 数量的机制。通过 quota 命令,系统管理员和用户可以了解到已使用的磁盘空间和 inode 数量,以及所设置的配额限制,以便更好地管理磁盘资源。例如,系统管理员可以通过该命令查看某个用户是否超出了分配给他的磁盘空间配额,从而决定是否需要进行调整或采取相应措施

语法:

quota [ -guv | q ]
quota [ -uv | q ] user
quota [ -gv | q ] group

选项:

选项作用
-g显示 用户所在组 的 组限额. 可选项(optional).
-u和 缺省情况 一样
-v显示 文件系统上 的 限额, 即使 没有 占用 空间.
-q简洁的 信息, 只 显示 超出 限额 的 文件系统.

案例:

查看磁盘配额:

quota -v -u zhao

2.2、xfs_quota命令

是用于管理 XFS 文件系统配额的指令。在 Linux 系统中,XFS 是一种高性能的日志文件系统,当系统管理员需要对用户或用户组在 XFS 文件系统上可使用的磁盘空间或 inode 数量进行限制时,就会用到 xfs_quota 命令。例如,通过该命令可以设置某个用户在特定 XFS 分区上最多能使用 10GB 磁盘空间,或者最多能创建 1000 个文件(inode 数量限制)。

语法:

xfs_quota [ -x ] [ -p prog ] [ -c cmd ] ... [ -d project ] ... [ path ... ]
xfs_quota -V
  • 表示 xfs_quota 命令,后面跟着一系列可选参数和路径。其中,“-x” “-p prog” “-c cmd” “-d project” 是可选参数,“path ...” 表示可跟一个或多个路径。例如 “-x” 可能开启某种特殊模式,“-p prog” 指定某个程序,“-c cmd” 执行特定命令,“-d project” 指定项目,具体含义取决于该命令的设计。

  • “xfs_quota -V”:表示使用 xfs_quota 命令并带上 “-V” 参数,通常 “-V” 参数用于显示命令的版本信息

选项:

选项作用
-x启用专家模式。所有允许对配额系统进行修改的管理命令(请参阅下面的“管理员命令”部分)仅在专家模式下可用。
-ccmd xfs_quota命令可以交互式运行(默认情况),也可以作为命令行参数运行。可以给出多个-c参数。命令按照给定的顺序运行,然后程序退出。
名称
xfs_quota - 管理XFS文件系统上的配额使用
概要
xfs_quota [ -x ] [ -p prog ] [ -c cmd ]... [ -d project ]... [ 路径... ]
xfs_quota -V
描述
xfs_quota是一个用于报告和编辑文件系统配额各个方面的实用工具。
xfs_quota的选项包括:
-c cmd xfs_quota命令可以交互式运行(默认情况),也可以作为命令行参数运行。可以给出多个-c参数。命令按照给定的顺序运行,然后程序退出。
-p prog 为提示和一些错误消息设置程序名称,默认值是xfs_quota。
-x 启用专家模式。所有允许对配额系统进行修改的管理命令(请参阅下面的“管理员命令”部分)仅在专家模式下可用。
-d project
可以使用此选项指定项目名称或数字标识符,这将单个xfs_quota命令的输出限制为指定的项目集。可以给出多个-d参数。
-V 打印版本号并退出。

#####用户命令
print 列出带有设备/项目标识符的所有路径。路径列表可以来自多个地方 - 命令行、挂载表和/etc/projects文件。
df 请参阅free命令。
quota [ -g | -p | -u ] [ -bir ] [ -hnNv ] [ -f file ] [ ID | 名称 ]...
显示单个用户名或数字用户ID的个人使用情况和限制。-h选项以类似于df(1)命令的“人类可读”格式报告。-n选项报告数字ID而不是名称。-N选项省略标题。-v选项输出详细信息。-f选项将输出发送到文件而不是标准输出。
free [ -bir ] [ -hN ] [ -f file ]
报告文件系统使用情况,非常类似于df(1)实用程序。它可以显示块、索引节点和/或实时块空间的使用情况,并显示已使用、空闲和总可用空间。如果正在使用项目配额(请参阅下面的“目录树配额”部分),它还将报告这些项目(目录树)的利用率。-h选项以“人类可读”格式报告。-N选项省略标题。-f选项将报告输出到文件而不是标准输出。
help [ 命令 ]
为所有命令或一个特定命令提供在线帮助。
quit 退出xfs_quota。
q 请参阅quit命令。
#####配额管理
XFS配额系统在许多方面与其他文件系统不同。最重要的是,XFS将配额信息视为文件系统元数据,并使用日志记录来提供更高层次的一致性保证。因此,它的管理方式不同,特别是:
quotacheck命令对XFS文件系统没有影响。在首次打开配额核算(在挂载时)时,XFS会在内部自动进行quotacheck;此后,在手动关闭配额之前,配额系统将始终保持完全一致。
XFS文件系统的根目录中不需要配额文件。
XFS区分配额核算和限制执行。在挂载XFS文件系统时必须打开配额核算。但是,可以在任何时候打开或关闭限制执行,只要配额核算已打开。mount命令的“quota”选项同时打开(用户)配额核算和执行。必须使用“uqnoenforce”选项来打开用户核算并禁用限制执行。
在根文件系统上打开配额略有不同。对于IRIX XFS,请参阅quotaon(1M)。对于Linux XFS,配额挂载标志必须通过“rootflags =”引导参数传递。
使用state来监视XFS配额子系统在各个阶段的情况是很有用的 - 它可以用于查看配额是否已打开,以及监视配额系统本身占用的空间。
xfsdump中内置了一种机制,允许在需要时备份配额限制信息以供以后恢复。
在打开配额之前,不能设置配额限制。
XFS文件系统对超级用户(用户ID为零)进行配额核算,并且该工具将显示超级用户的使用信息。但是,永远不会对超级用户执行限制(也不会对组和项目ID为零执行限制)。
XFS文件系统无论用户是否有配额限制都会进行配额核算。
XFS支持项目配额的概念,可用于实现一种目录树配额的形式(即限制目录树只能使用文件系统可用空间的一部分;或简单地跟踪树内使用的空间量或索引节点数量)。
#####管理员命令
path [ N ]
列出所有带有设备/项目标识符的路径,或将当前路径设置为列表中的第N个条目(这里描述的许多命令都使用当前路径,它标识命令指向的文件系统)。路径列表可以来自多个地方 - 命令行、挂载表和/etc/projects文件。
report [ -gpu ] [ -bir ] [ -ahntlLNU ] [ -f file ]
报告文件系统配额信息。这将报告文件系统的所有配额使用情况,对于指定的配额类型(u / g / p和/或块/索引节点/实时)。默认情况下,它以1KB为单位报告块。-h选项以类似于df(1)命令的“人类可读”格式报告。-f选项将报告输出到文件而不是标准输出。-a选项报告所有文件系统的信息。默认情况下,输出用户/组/项目的名称。如果为给定的ID未定义名称,则输出数字ID。-n选项输出数字ID而不是名称。-L和-U选项指定要报告的上下ID边界。如果指定了上/下边界,则默认情况下仅在输出中显示ID;使用-l选项,将执行查找以将这些ID转换为名称。-N选项报告信息时不包含标题行。-t选项进行简洁报告。
state [ -gpu ] [ -av ] [ -f file ]
报告总体配额状态信息。这将报告配额核算、配额执行的状态以及文件系统内配额元数据使用的范围数量。-f选项将状态信息输出到文件而不是标准输出。-a选项报告所有文件系统的状态,而不仅仅是当前路径。
limit [ -g | -p | -u ] bsoft = N | bhard = N | isoft = N | ihard = N | rtbsoft = N | rtbhard = N -d | id | 名称
设置配额块限制(bhard / bsoft)、索引节点计数限制(ihard / isoft)和/或实时块限制(rtbhard / rtbsoft)。-d选项(默认值)可用于设置将使用的默认值,否则必须指定特定的用户/组/项目名称或数字标识符。
timer [ -g | -p | -u ] [ -bir ] 值
允许修改配额执行超时(即允许在软限制被强制作为硬限制之前经过的时间量)。当前超时设置可以使用state命令显示。值参数是秒数,但也可以理解为“分钟”、“小时”、“天”和“周”的单位(以及它们的缩写“m”、“h”、“d”和“w”)。
warn [ -g | -p | -u ] [ -bir ] 值 -d | id | 名称
允许查看和修改配额警告限制(即向超配额的人发送警告的次数)。-d选项(默认值)可用于设置将使用的默认时间,否则必须指定特定的用户/组/项目名称或数字标识符。
注意:此功能当前未实现。
enable [ -gpu ] [ -v ]
为当前路径标识的文件系统打开配额执行。这要求文件系统在挂载时启用配额,并且当前活动的核算。-v选项(详细)在操作完成后显示状态。
disable [ -gpu ] [ -v ]
禁用配额执行,同时保持配额核算活动。-v选项(详细)在操作完成后显示状态。
off [ -gpu ] [ -v ]
永久关闭当前路径标识的文件系统的配额。此后只能通过卸载并重新挂载来重新打开配额。
remove [ -gpu ] [ -v ]
从当前路径标识的文件系统中删除分配给配额元数据的任何空间。文件系统上不得启用配额,否则此操作将报告错误。
dump [ -g | -p | -u ] [ -f file ]
为备份实用程序转储配额限制信息,要么输出到标准输出(默认),要么输出到文件。当然,这只是限制,而不是使用信息。
restore [ -g | -p | -u ] [ -f file ]
从备份文件恢复配额限制。文件必须采用dump命令生成的格式。
quot [ -g | -p | -u ] [ -bir ] [ -acnv ] [ -f file ]
按用户、组或项目汇总文件系统所有权。此命令使用特殊的XFS“批量统计”接口快速扫描整个文件系统并报告使用信息。即使文件系统配额未启用,也可以使用此命令,因为它是全文件系统扫描(可能也需要很长时间...)。-a选项显示所有文件系统的信息。-c选项显示直方图而不是报告。-n选项显示数字ID而不是名称。-v选项显示详细信息。-f选项将输出发送到文件而不是标准输出。
project [ -cCs [ -d depth ] [ -p path ] id | 名称 ]
-c、-C和-s选项允许维护目录树配额机制。-d允许在处理项目目录时限制递归级别,-p允许在命令行中指定项目路径(而不是/etc/projects)。所有选项将在下面详细讨论。
目录树配额

案例:

查看磁盘配额:

[root@c2407 ~]# xfs_quota -x -c 'report' /testlv

3、配置案例

#针对用户和组,用于配置用户和组在该磁盘的使用容量限制。
#实现支持磁盘配额的挂载:
mount -o ursquota,grpquota /dev/test_vg/test_lv /testlvm
#查看是否支持磁盘配额:
mount
#XFS文件系统的磁盘配额命令:
xfs_quota -x -c 'limit -u bsoft=10M bhard=50M isoft=10 ihard=20 lisi' /testlvm/
#-u:用户配额
#-g:组配额
#(b/i)soft:容量/文件数软限制,用于监视
#(b/i)hard:容量/文件数硬限制,不能超出设置的值
#查看容量配额:
xfs_quota -x -c 'report  -b -u ' /testlvm/
#查看文件数量配额:
xfs_quota -x -c 'report  -i -u ' /testlvm/
#在终端中切换用户的命令:
su - username
#验证:
#dd if=/dev/zero of=./test.txt bs=10M count=60
#mkdir dir{1..30}
[zhao@c2407 testlv]$ touch {1..51}.txt
touch: 无法创建"51.txt": 超出磁盘限额
[zhao@c2407 testlv]$ dd if=/dev/zero of=./1.txt bs=11M count=1
记录了1+0 的读入
记录了1+0 的写出
11534336字节(12 MB)已复制,0.0551349 秒,209 MB/秒
[zhao@c2407 testlv]$ dd if=/dev/zero of=./1.txt bs=51M count=1
dd: 写入"./1.txt" 出错: 超出磁盘限额
记录了1+0 的读入
记录了0+0 的写出
50135040字节(50 MB)已复制,0.278001 秒,180 MB/秒

3.1、xfs配额

3.1.1步骤总结:

下面是一个完整的 XFS 文件系统配额管理案例,包含用户配额、组配额、硬限制 / 软限制配置以及监控方法:

1. 环境准备

假设已挂载 XFS 文件系统到/data目录,需要启用配额功能:

# 查看文件系统类型(确保为xfs)
df -Th /data

# 查看当前挂载选项
mount | grep /data

*2. 启用 XFS 配额支持

临时启用(重启失效)

umount /data
mount -o remount,usrquota,grpquota /data

永久启用(修改 fstab)

编辑/etc/fstab,添加usrquota,grpquota选项:

/dev/data_vg/data_lv /data xfs defaults,usrquota,grpquota 0 0

重新挂载:

mount -o remount /data

3. 创建配额数据库

# 初始化用户和组配额数据库
xfs_quota -x -c "initquota -u -g" /data

4. 设置用户配额示例

为用户alice设置配额

# 设置硬限制(10GB)和软限制(8GB),宽限期7天
xfs_quota -x -c "limit -u bsoft=8g bhard=10g isoft=0 ihard=0 alice" /data

# 查看用户配额状态
xfs_quota -x -c "report -u" /data

输出示例:

User quota on /data (/dev/data_vg/data_lv)
                        Blocks                      Inodes
User ID   Used   Soft   Hard Warn/Grace   Used Soft Hard Warn/Grace
---------- ------------------------------------------------------------
root       0      0      0     00 [------]    0    0    0     00 [------]
alice      0      8G     10G    00 [------]    0    0    0     00 [------]

5. 设置组配额示例

为组developers设置配额

# 创建组并添加用户
groupadd developers
usermod -aG developers alice

# 设置组配额(硬限制20GB,软限制15GB)
xfs_quota -x -c "limit -g bsoft=15g bhard=20g isoft=0 ihard=0 developers" /data

# 查看组配额状态
xfs_quota -x -c "report -g" /data

6. 基于 inode 的配额限制(可选)

限制文件数量而非磁盘空间:

# 限制用户alice最多创建10000个文件
xfs_quota -x -c "limit -u isoft=8000 ihard=10000 alice" /data

7. 宽限期设置

当用户超过软限制时,宽限期内仍可写入,但会收到警告:

# 设置宽限期为3天(默认7天)
xfs_quota -x -c "timer -u btime=3days" /data

8. 监控配额使用情况

# 实时查看用户配额使用
xfs_quota -x -c "df -h" /data

# 生成详细报告(包含百分比)
xfs_quota -x -c "report -ubihp" /data

输出示例:

User quota on /data (/dev/data_vg/data_lv)
                          Blocks                        Inodes
User ID     Used    Soft    Hard  Warn%   Used  Soft  Hard Warn%
----------  ------  ------  ------  -----  -----  ----  ----  -----
alice        5.2G     8.0G    10.0G    65%    4230     0     0     0%

9. 强制实施配额检查

# 扫描文件系统并更新配额数据库
xfs_quota -x -c "repair" /data

10. 临时禁用 / 启用配额

# 禁用用户配额
xfs_quota -x -c "off -u" /data

# 重新启用
xfs_quota -x -c "on -u" /data

11. 删除配额限制

# 删除用户alice的配额限制
xfs_quota -x -c "limit -u bsoft=0 bhard=0 isoft=0 ihard=0 alice" /data

关键注意事项

  1. XFS 特性

    • 不支持在线缩减文件系统

    • 配额基于块(block)和 inode 分别管理

    • 配额数据库存储在文件系统自身

  2. 性能影响

    • 启用配额会增加少量 I/O 开销

    • 大型文件系统首次初始化配额可能较慢

  3. 故障排查

    • 若配额不生效,检查/etc/fstab挂载选项

    • 使用xfs_quota -x -c "check"诊断配额数据库问题

  4. 自动化

    • 可通过 cron 定期执行xfs_quota -x -c "report -a"生成使用报告

    • 结合quotaoffquotaon在维护期间临时禁用配额

通过以上步骤,可全面管理 XFS 文件系统的用户和组配额,实现存储资源的合理分配。

启用 XFS 配额支持**

3.1.2疑问:

临时启用(重启失效)

umount /data 疑问点
mount -o remount,usrquota,grpquota /data

在 Linux 系统中,对文件系统进行 挂载(mount)、启用配额(quota)或修改分区配置 时,通常需要先执行 umount /data 卸载文件系统,这主要是出于 数据安全操作可行性 的考虑。以下是具体原因和逻辑:

一、为什么挂载前需要先卸载?

严格来说,挂载(mount)操作本身不需要先卸载其他分区,但如果是对 同一挂载点(如 /data 进行重新挂载或更换挂载的设备,则必须先卸载当前已挂载的文件系统。 例如:

  • 原分区 /dev/sda1 挂载在 /data,现在想将新分区 /dev/sdb1 挂载到 /data,必须先执行 umount /data 卸载 /dev/sda1,否则会导致 挂载冲突,新分区无法正常挂载。

二、为什么启用配额(或修改文件系统配置)时需要先卸载?

在之前的 XFS 配额案例中,启用配额时需要通过 mount -o remount,usrquota,grpquota /data 重新挂载分区并添加配额参数。 此时是否需要先卸载?分两种情况:

1. 临时启用配额(不修改 fstab):

  • 可以不卸载,直接重新挂载:

    mount -o remount,usrquota,grpquota /data

    前提是当前分区已挂载在/data,remount参数会直接修改现有挂载的选项,无需先卸载再挂载。

2. 永久启用配额(修改 fstab):

  • 重启后生效需依赖 fstab 配置:修改/etc/fstab后,系统重启时会根据 fstab 自动挂载分区并应用配额参数。

    • 如果希望 立即生效,需执行 umount /data && mount /data,先卸载再重新挂载,使新的 fstab 配置生效。

    • 如果不手动操作,系统重启后才会应用新配置。

三、核心原因:避免数据损坏和操作冲突

无论是否涉及配额,卸载文件系统的核心目的是确保操作安全,具体包括:

1. 防止文件系统处于 “使用中” 状态

  • 当文件系统被挂载时,系统内核正在管理其数据读写。如果直接修改其配置(如启用配额、调整分区大小等),可能导致:

    • 正在读写的文件数据丢失或损坏。

    • 元数据(如 inode、块分配表)出现不一致,引发文件系统错误。

  • 卸载后,文件系统处于 离线状态,所有读写操作停止,此时修改配置或重新挂载更安全。

2. 确保配置修改有效

  • 例如,若分区已挂载且未启用配额,直接修改 fstab 添加usrquota,grpquota参数后,不卸载重新挂载,当前挂载的分区仍会使用旧的配置(无配额)。

    • 只有通过 umount 卸载并重新挂载(或 mount -o remount),才能让新参数生效。

3. 避免权限和锁冲突

  • 挂载的文件系统可能被进程占用(如某个程序正在写入/data目录),此时强制修改配置可能因文件锁或权限冲突失败。

    • 卸载后,所有进程对该文件系统的访问被切断,确保操作无干扰。

四、例外情况:在线操作(Online Operations)

部分操作无需卸载文件系统,例如:

  1. XFS 文件系统扩容

    lvextend /dev/vg/lv -L +2G  # 扩展逻辑卷
    xfs_growfs /dev/vg/lv        # 在线扩展文件系统,无需卸载

    XFS 支持在线扩容,因为其文件系统结构允许动态调整。

  2. 临时重新挂载(修改挂载选项): 使用 mount -o remount 直接修改已挂载分区的选项(如添加配额参数),无需先卸载。

总结:何时需要 umount?

操作场景是否需要先 umount原因
更换挂载的分区(如切换设备)同一挂载点只能挂载一个分区,需先卸载旧分区。
永久修改 fstab 后立即生效是(需重新挂载)需卸载后重新挂载以应用新配置。
对文件系统进行危险操作(如缩减分区、删除逻辑卷)避免数据读写导致损坏,必须离线操作。
临时修改挂载选项(如 remount)可直接用 mount -o remount 修改,无需卸载。

核心原则:如果操作涉及 文件系统结构变更挂载配置的永久性修改,通常需要先卸载;如果是临时调整或在线操作(如 XFS 扩容),则可能无需卸载。

3.1.3具体操作:

1. 环境准备

启用配额功能:

# 查看文件系统类型(确保为xfs)
[root@localhost ~]# df -TH
/dev/mapper/juanzu-luojijuan xfs       4.3G   34M  4.3G    1% /guazaidian

# 查看当前挂载选项(文件系统等信息)
[root@localhost ~]# mount | grep /dev
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=914452k,nr_inodes=228613,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/juanzu-luojijuan on /guazaidian type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost ~]# mount | grep /dev/juanzu

挂载并启用配额和查看

     [root@localhost ~]# umount /dev/juanzu-luojijuan
umount: /dev/juanzu-luojijuan: mountpoint not found
[root@localhost ~]# mount -o usrquota,grpquota /dev/juanzu/luojijuan /guazaidian
[root@localhost ~]# xfs_quota -x -c 'report' /guazaidian
User quota on /guazaidian (/dev/mapper/juanzu-luojijuan)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root                0          0          0     00 [--------]

Group quota on /guazaidian (/dev/mapper/juanzu-luojijuan)
                               Blocks                     
Group ID         Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root                0          0          0     00 [--------]

永久挂载参数如下:

/dev/sdb1 /mail xfs defaults,usrquota,grpquota 0 0

设置组配额示例**

为组developers设置配额

# 创建组并添加用户
[root@localhost ~]# groupadd developers
[root@localhost ~]# useradd user11
[root@localhost ~]# usermod -aG developers user11
# 设置组配额(硬限制20GB,软限制15GB)
[root@localhost ~]# xfs_quota -x -c "limit -g bsoft=15g bhard=20g isoft=0 ihard=0 developers" /guazaidian
# 查看组配额状态
[root@localhost ~]# xfs_quota -x -c "report -g" /guazaidian
Group quota on /guazaidian (/dev/mapper/juanzu-luojijuan)
                               Blocks                     
Group ID         Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root                0          0          0     00 [--------]
developers          0   15728640   20971520     00 [--------]

3.2、ext4配额(了解)

3.2.1总体步骤
  1. 环境准备

假设系统中有一个 ext4 文件系统已挂载在 /data 目录,先确认文件系统类型和挂载情况:

# 查看文件系统类型
df -Th /data
# 查看当前挂载选项
mount | grep /data

2. 启用 ext4 配额支持

临时启用(重启后失效)

# 先卸载文件系统
umount /data
# 重新挂载并启用用户和组配额
mount -o remount,usrquota,grpquota /data

永久启用(修改 /etc/fstab

编辑 /etc/fstab 文件,找到对应 /data 挂载的行,添加 usrquota,grpquota 选项,例如:

/dev/sdaX /data ext4 defaults,usrquota,grpquota 0 0

/dev/sdaX 为实际的设备名,需根据实际情况修改) 保存并退出编辑器后,重新挂载 /data 使配置生效:

mount -o remount /data

3. 创建配额数据库

# 初始化用户和组配额数据库
quotacheck -cugm /data

-c 选项表示创建新的配额文件;-u 表示检查用户配额;-g 表示检查组配额;-m 表示以读写模式挂载文件系统。

4. 激活配额

# 启用用户和组配额
quotaon -ug /data

5. 设置用户配额示例

为用户 testuser 设置磁盘空间配额,软限制为 500M,硬限制为 1G,文件数量软限制为 500,硬限制为 1000

edquota -u testuser

这会打开一个文本编辑器(通常是 vinano),编辑内容类似如下:

Disk quotas for user testuser (uid 1001):
  Filesystem  blocks   soft   hard   inodes   soft   hard
  /dev/sdaX       0    512000  1024000       0      500    1000

保存并退出编辑器,配额设置即生效。

6. 设置组配额示例

为组 testgroup 设置磁盘空间配额,软限制为 1G,硬限制为 2G,文件数量软限制为 1000,硬限制为 2000

edquota -g testgroup

同样编辑相关内容后保存退出,配额设置完成。

7. 查看配额使用情况

# 查看用户配额
quota -u testuser
# 查看组配额
quota -g testgroup
# 查看所有用户和组的配额使用情况
repquota -ug /data

8. 取消配额限制

如果需要取消某个用户或组的配额限制,可以使用以下命令:

# 取消用户 testuser 的配额限制
edquota -u -z testuser
# 取消组 testgroup 的配额限制
edquota -g -z testgroup

9. 禁用配额

# 禁用用户和组配额
quotaoff -ug /data

在整个过程中,umount /data 主要用于在启用配额的永久配置时(修改 /etc/fstab 后)重新挂载前卸载文件系统,以确保新的挂载选项能够正确应用。同时,在进行一些涉及文件系统底层变更的操作时,也可能需要先卸载文件系统以保证数据安全。

3.2.2具体案例

以上就是 ext4 文件系统配额管理的完整案例。在实际操作中,请务必谨慎,并提前备份重要数据

1、挂载

mount -o defaults,usrquota,grpquota /挂载磁盘 /挂载点

永久挂载参数如下:

/dev/sdb1 /mail ext4 defaults,usrquota,grpquota,defaults 0 0

2、生成配额文件

quotacheck /挂载点

3、启用配额;关闭配额命令用quotaoff

quotaon -ugv /挂载点

4、针对用户配额

edquota -u 用户名

        也可以针对组做配额: edquota -g 组名

5、修改配置文件格式如下:

/dev/sdd1 0 30M 50M 0 8 10
3.2.3ext4和xfs配额区别

ext4 和 XFS 是 Linux 系统中两种常用的文件系统,它们在配额管理方面存在一些关键差异,这些差异源于文件系统的设计和特性。以下是两者在配额管理上的主要区别:

1. 配额启用方式

特性ext4XFS
挂载选项需要在挂载时添加usrquotagrpquota选项,例如: mount -o usrquota,grpquota /dev/sda1 /data需要在挂载时添加usrquotagrpquota选项,例如: mount -o usrquota,grpquota /dev/sda1 /data
永久配置修改/etc/fstab,添加usrquota,grpquota修改/etc/fstab,添加usrquota,grpquota
初始化配额数据库使用quotacheck -cugm /data创建用户和组的配额文件使用xfs_quota -x -c "initquota -u -g" /data初始化配额数据库

2. 配额管理命令

操作ext4XFS
启用配额quotaon -ug /dataxfs_quota -x -c "on -u -g" /data
禁用配额quotaoff -ug /dataxfs_quota -x -c "off -u -g" /data
编辑用户配额edquota usernamexfs_quota -x -c "limit -u bsoft=10g bhard=20g username" /data
编辑组配额edquota -g groupnamexfs_quota -x -c "limit -g bsoft=10g bhard=20g groupname" /data
查看配额报告repquota -ug /dataxfs_quota -x -c "report -ubihp" /data

3. 文件系统特性对配额的影响

特性ext4XFS
在线调整支持在线扩展,但缩减需要卸载文件系统并使用resize2fs支持在线扩展和缩减(通过xfs_growfsxfs_repair
配额数据库位置存储在文件系统外部(通常是aquota.useraquota.group文件)存储在文件系统内部的元数据中
inode 配额支持基于 inode 数量的配额限制支持基于 inode 数量的配额限制
实时统计配额统计可能有延迟,尤其是在大文件系统上配额统计实时更新,性能开销较小

4. 宽限期(Grace Period)

特性ext4XFS
软限制宽限期超过软限制后,默认有 7 天宽限期,可以通过edquota -t修改超过软限制后,默认有 7 天宽限期,可以通过xfs_quota -x -c "timer -u btime=7days" /data修改
宽限期检查频率需要通过cron定期运行quotacheck来更新宽限期状态宽限期由内核自动管理,无需额外操作

5. 高级特性

特性ext4XFS
项目配额(Project Quotas)支持通过pquota选项实现更精细的子目录配额控制支持通过projectsubproject实现更灵活的配额层次结构
磁盘空间预分配不支持支持通过xfs_quota命令预分配磁盘空间给用户或组
配额修复使用quotacheck -avugm修复损坏的配额数据库使用xfs_quota -x -c "repair" /data修复配额数据库

6. 性能与扩展性

特性ext4XFS
大文件系统表现在处理非常大的文件系统(数百 TB)时,配额管理性能可能下降设计用于处理大型文件系统,配额管理性能更优
高并发场景配额操作可能成为性能瓶颈,尤其是在频繁创建 / 删除文件的场景对高并发工作负载的配额管理更高效

7. 适用场景

场景ext4 推荐XFS 推荐
传统应用服务器适合中小型文件系统,对配额实时性要求不高的场景适合大型文件系统、高并发读写场景,如数据库、虚拟化存储池等
需要频繁缩减文件系统支持离线缩减,但操作相对复杂支持在线缩减,操作更简单
需要精细的配额控制基本的用户和组配额足够满足需求需要项目配额、子目录配额等高级特性时

总结

  • ext4 的配额管理相对传统,依赖外部配额文件,适合中小型系统和对性能要求不高的场景。

  • XFS 的配额管理更现代化,集成在文件系统内部,性能更好,适合大型系统和对实时性要求高的场景。

选择使用哪种文件系统的配额,应根据实际需求、文件系统大小、性能要求以及管理复杂度等因素综合考虑。

六、磁盘检测与修复

1、fsck命令

fsck - 检查并修复Linux文件系统

语法:

fsck [ -sACVRTNP ] [ -t fstype ] [filesys ... ] [--] [ fs-specific-options ]
  • fsck:文件系统检查(File System Check)工具,用于检查和修复文件系统中的错误。

  • [ -sACVRTNP ]:方括号表示这些选项是可选的。这些字母代表不同的选项,例如 -s 可能表示顺序检查;-A 也许用于检查 /etc/fstab 文件中列出的所有文件系统;-C 可能与显示检查进度相关;-V 或许用于显示详细信息;-R 可能在特定情况下与根文件系统相关;-T 可能用于控制是否显示标题信息;-N 可能用于不实际执行检查,仅显示要执行的操作;-P 具体含义因系统而异。

  • [ -t fstype ]:同样是可选选项,-t 用于指定要检查的文件系统类型,fstype 就是具体的文件系统类型,如 ext4xfs 等。

  • [filesys ... ]:表示要检查的文件系统,可以有一个或多个。

  • [--]:用于分隔选项和后面的文件系统特定选项,确保后面的参数不会被误认成 fsck 的通用选项。

  • [ fs-specific-options ]:文件系统特定的选项,不同的文件系统类型会有不同的特定选项,用于更精细地控制检查和修复操作。

选项:

选项作用
-y检查文件系统并进行尝试修复

案例:

fsck.ext4 -y /dev/sdb4

2、xfs_repair命令

用于修复 XFS 文件系统的工具。XFS 是一种高性能的日志型文件系统,常用于 Linux 系统。当 XFS 文件系统出现损坏,如文件系统元数据错误、磁盘坏块等问题时,就可以使用 xfs_repair 命令尝试修复。例如,在系统意外断电后,可能导致 XFS 文件系统不一致,此时可以在单用户模式下运xfs_repair 命令对相关分区进行修复。使用该命令时需谨慎,因为不当操作可能会导致数据丢失。

语法:

xfs_repair [options] device

一般语法为 “xfs_repair [选项] 设备” ,其中设备指的是包含 XFS 文件系统的磁盘分区,如 “/dev/sda1” 。选项则有不同功能,像 “-n” 选项用于以只读方式检查文件系统,不进行实际修复操作,方便先查看问题情况。

选项:

选项作用

案例:

xfs_repair -n -v /dev/sdb1

3、badblocks命令

是在 Linux 系统中用于检测和标记磁盘设备上坏块的工具。它可以扫描磁盘分区或整个磁盘,查找存在物理损坏的扇区。例如,若要对 /dev/sda1 分区进行非破坏性的读测试,可使用命令 “badblocks -v /dev/sda1” 。通过运行此命令,系统管理员能够及时发现磁盘潜在问题,以便采取相应措施,如更换磁盘或对坏块进行隔离,避免数据丢失或系统故障。

语法:

badblocks  [  -svwnf  ]  [  -b  block-size ] [ -c blocks_at_once ] [ -i input_file ] [ -o output_file ] [ -p num_passes ] device [ blocks-count ] [ start-block

选项:

选项作用

案例:

#模拟故障
[root@c2407 ~]# dd if=/dev/zero of=/dev/mapper/testvg-testlv bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000827944 秒,618 kB/秒
[root@c2407 ~]# mount /dev/mapper/testvg-testlv /testlv
mount: /dev/mapper/testvg-testlv 写保护,将以只读方式挂载
mount: 文件系统类型错误、选项错误、/dev/mapper/testvg-testlv 上有坏超级块、
       缺少代码页或助手程序,或其他错误

       有些情况下在 syslog 中可以找到一些有用信息- 请尝试
       dmesg | tail  这样的命令看看。

badblocks /dev/mapper/testvg-testlv

七、文件系统备份与恢复

1、xfsdump命令

“xfsdump 命令” 是用于在基于 Linux 系统中,针对 XFS 文件系统进行备份操作的命令。它能够将指定的 XFS 文件系统数据备份到存储设备,如磁带、磁盘等。通过使用该命令,可以灵活选择备份整个文件系统,或特定目录等。例如,要将 /data 目录所在的 XFS 文件系统备份到 /backup/data_backup 文件中,可使用类似 “xfsdump -f /backup/data_backup/data” 的命令(实际使用可能需根据具体环境和权限调整)。它还支持增量备份等功能,帮助用户更高效地管理数据备份

备份等级:

0 --完全备份(文件系统默认备份等级)

1—9 --增量备份

语法:

xfsdump -h
xfsdump [ options ] -f dest [ -f dest ... ] filesystem
xfsdump [ options ] - filesystem
xfsdump -I [ subopt=value ... ]

选项:

选项作用
-f指定备份到哪个目录
-L指定会话标签
-M指定设备标签
-s指定分区中文件或目录的相对路径

案例:

1)备份整个分区:

#交互式:xfsdump -f [备份存放路径] [要备份的的设备或挂载点]
xfsdump -f /opt/dump_sdb1 /dev/sda1
#非交互式:xfsdump -f [备份存放路径] [要备份的的设备或挂载点] -L [会话标签名] -M [设备标
签名]
xfsdump -f /opt/dump_sdb1_0 /dev/sdb1 -L dump_sdb1_0 -M sdb1_0

2)备份分区中某个目录或文件:

#xfsdump -f [备份存放路径] -s [要备份的目录或文件的相对路径] -L [会话标签名] -M [设
备标签名]
xfsdump -f /optdump_sda1_0 -s grub2/grub.cfg /boot -L dump_sda1_0 -M sda1_0

3)查看已备份的文件系统:

#每次备份成功后,都会在/var/lib/xfsdump/inventory 目录下生成档案信息,详细记录备份的信
息,如挂载点、挂载设备、会话标签、设备标签、备份目录等相关信息。
cd /var/lib/xfsdump/inventory
xfsdump -I

注意:

  • xfsdump不支持没有挂载的文件系统备份,所以只能备份已挂载的文件系统;

  • xfsdump必须使用root的权限才能操作;

  • xfsdump只能备份xfs文件系统;

  • xfsdump备份下来的数据只能让xfsrestore来解析;

  • xfsdump是通过文件系统的UUID来分辨备份档案的,因此不能备份两个具有相同UUID的文件系统

2、xfsrestore命令

xfsrestore” 命令是用于恢复由 “xfsdump” 命令创建的 XFS 文件系统备份的工具。它能将备份的数据还原到指定位置,在数据恢复场景中十分重要。比如在 XFS 文件系统数据丢失或损坏时,可通过 “xfsrestore” 命令从备份中恢复数据。使用时,需指定备份存储位置、目标恢复路径等参数,如 “xfsrestore -f /path/to/backup/target/directory” ,此命令会将位于 “/path/to/backup” 的备份数据恢复到 “/target/directory” 目录

语法:

语法:xfsrestore -f [已备份文件路径] [恢复后的文件路径]

选项:

选项作用
-f指定需要恢复的备份文件

案例:

#先删除挂载点下的内容
#恢复文件系统数据
xfsrestore -f /opt/dump_sdb1 /sdb1

附录:xfs常用命令

xfs_admin: 调整 xfs 文件系统的各种参数
xfs_copy: 拷贝 xfs 文件系统的内容到一个或多个目标系统(并行方式)
xfs_db: 调试或检测 xfs 文件系统(查看文件系统碎片等)
xfs_check: 检测 xfs 文件系统的完整性
xfs_bmap: 查看一个文件的块映射
xfs_repair: 尝试修复受损的 xfs 文件系统
xfs_fsr: 碎片整理
xfs_quota: 管理 xfs 文件系统的磁盘配额
xfs_metadump: 将 xfs 文件系统的元数据 (metadata) 拷贝到一个文件中
xfs_mdrestore: 从一个文件中将元数据 (metadata) 恢复到 xfs 文件系统
xfs_growfs: 调整一个 xfs 文件系统大小(只能扩展)
xfs_logprint: print the log of an XFS filesystem
xfs_mkfile: create an XFS file
xfs_info: expand an XFS filesystem
xfs_ncheck: generate pathnames from i-numbers for XFS
xfs_rtcp: XFS realtime copy command
xfs_freeze: suspend access to an XFS filesystem
xfs_io: debug the I/O path of an XFS filesystem

八、RAID类型介绍与应用场景

1. RAID 0(条带化)

  • 原理:数据分割为块,交替写入多块磁盘(条带化)。

  • 优点

    • 极致性能:读写速度接近磁盘数量的倍数。

    • 100%容量利用率:无冗余开销。

  • 缺点

    • 无冗余:任意一块磁盘故障即数据全损。

  • 适用场景

    • 临时数据处理(如视频渲染缓存)。

    • 对速度要求极高且数据可丢失的场景(如科研计算中间结果)。


2. RAID 1(镜像)

  • 原理:数据完全复制到另一块磁盘(镜像)。

  • 优点

    • 高可靠性:允许一块磁盘故障。

    • 读取速度提升:可从任意磁盘读取。

  • 缺点

    • 容量利用率50%:存储成本翻倍。

    • 写入速度无提升:需同时写入两块磁盘。

  • 适用场景

    • 关键系统盘(如操作系统、数据库日志文件)。

    • 小型企业文件服务器(预算有限但需基本冗余)。


3. RAID 5(分布式奇偶校验)

  • 原理:数据条带化分布,奇偶校验信息轮流存储在所有磁盘。

  • 优点

    • 平衡性能与冗余:允许一块磁盘故障,容量利用率为 (N-1)/N(如4盘利用75%)。

    • 读取性能高:多盘并行读取。

  • 缺点

    • 写入性能较低:每次写入需计算并更新奇偶校验。

    • 重建时间长:大容量磁盘重建期间二次故障风险高。

  • 适用场景

    • 中型文件服务器(如企业文档共享)。

    • 虚拟机存储(兼顾IOPS与成本)。


4. RAID 6(双分布式奇偶校验)

  • 原理:类似 RAID 5,但使用两组独立奇偶校验。

  • 优点

    • 更高容错:允许两块磁盘同时故障。

    • 大容量场景更安全:降低重建期间的故障风险。

  • 缺点

    • 写入性能更低:双重校验计算增加开销。

    • 容量利用率 (N-2)/N(如6盘利用66%)。

  • 适用场景

    • 大容量归档存储(如医疗影像、监控视频)。

    • 云存储后端(需应对多盘故障风险)。


5. RAID 10(镜像+条带化)

  • 原理:先镜像(RAID 1)再条带化(RAID 0)。

  • 优点

    • 高性能+高可靠:读写速度接近 RAID 0,允许每组镜像中一块磁盘故障。

    • 重建速度快:仅需复制镜像盘。

  • 缺点

    • 容量利用率50%:成本较高。

    • 最少4块磁盘:扩展需偶数递增。

  • 适用场景

    • 高事务数据库(如MySQL、Oracle)。

    • 虚拟化平台(ESXi、KVM)的存储池。


其他 RAID 类型

  • RAID 50/60:RAID 5/6与RAID 0结合,适合超大规模存储(需至少6盘)。

  • RAID 01(条带化+镜像):先条带化再镜像,故障容错性低于 RAID 10,已较少使用。


对比总结

RAID级别最小磁盘数容错能力容量利用率读取性能写入性能典型场景
RAID 02100%极高极高非关键临时数据
RAID 121块50%中等系统盘、小型服务器
RAID 531块(N-1)/N中等文件服务器、虚拟机存储
RAID 642块(N-2)/N大容量归档、云存储
RAID 104每组1块50%极高数据库、高IOPS应用

选择建议

  1. 性能优先 → RAID 0(无冗余)或 RAID 10(有冗余)。

  2. 预算有限+基本冗余 → RAID 5。

  3. 大容量+高容错 → RAID 6。

  4. 关键业务高可用 → RAID 10。


注意事项

  • RAID 不是备份:无法防止误删除、病毒攻击,需额外备份方案。

  • 硬件 RAID vs 软件 RAID

    • 硬件 RAID:依赖 RAID 卡,性能稳定,支持缓存加速。

    • 软件 RAID(如Linux mdadm):灵活,成本低,但占用CPU资源。

  • SSD与RAID:SSD的磨损均衡机制可能与RAID冲突,建议优先选用企业级SSD并禁用磁盘缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值