一、硬盘介绍1、硬盘的物理结构1.1、硬盘结构1.2、磁头数、磁道、柱面、扇区2、CHS编号2.1、磁道编号规则2.2、扇区编号规则2.3、通过CHS计算硬盘容量3、磁盘存储划分3.1、第一个扇区存储的数据3.2、硬盘分区4、开机流程5、要
目录
一、硬盘介绍
文件系统是Linux系统的核心,在Linux系统中,一切皆文件。对于开发者而言,编程过程中通常用到的是文件IO。在open函数打开文件,read函数读取文件的过程底层原理如何?本文件系统系列文章主要尝试针对的是这部分内容进行深入的讲解。
文件最终是存储在磁盘上,文件的存取,最终是读写磁盘。
1、硬盘的物理结构
1.1、硬盘结构
-
每个盘片有两面,两面都可以存储数据。
-
每个盘面都有一个磁头,用于存取数据。
-
所有磁头都是固定的,一起做物理移动。但是每次只有一个磁头执行存取数据的任务,选择使用哪个磁头是由系统控制的。磁头间的切换非常迅速,而磁头摆动寻道则比较慢。
-
磁头摆动,找到要读取数据所在的磁道;盘片通过转动,将数据“送到”磁头下。
1.2、磁头数、磁道、柱面、扇区
-
磁头数: 每个盘面都有一个磁头,因此磁头数 = 盘面数。
-
磁道: 上以盘片轴心为圆心,不同半径的同心圆称为磁道,磁道不是真正肉眼可看见的一道一道“坑”,而是被磁盘上被磁化的区域,磁道之间有一定的间隙,以免磁道之间磁介质相互影响。
-
扇区: 每个磁道被等分为若干个弧段(扇区),每个扇区可以存放512个字节的数据。扇区是磁盘驱动器向磁盘读写数据的最小单元。
-
柱面: 不同盘片半径相同的磁道组成的一个“柱面”。
2、CHS编号
所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每个柱面、磁头、扇区都有自己的编号。
2.1、磁道编号规则
-
磁头编号: 从上到下,分别为磁头0号,磁头1号......
-
柱面编号: 最外圈的柱面编号为0,往里依次递增1,2,3.....
2.2、扇区编号规则
每个磁道都可以被分为若干个扇区,假设有18个扇区,编号依次为1,... 18。这里的1...18在一个磁道中是唯一的,但不同磁道之间会重复。因此,要确定一个扇区在硬盘(多个盘片)中的具体位置,则需要结合柱面号/磁头号/扇区号来确定——绝对扇区编号,或者是为整个硬盘的所有扇区分配一个唯一的编号——DOS扇区编号(也称为相对扇区编号或逻辑扇区编号)。
-
绝对扇区: 由柱面号/磁头号/扇区号唯一确定。
-
DOS(Disk Operating System)扇区(逻辑扇区): 磁盘操作系统为了管理方便,会将柱面号/磁头号/扇区号确定的扇区编号转换为易于管理和计算的单一数字编号,称为相对扇区编号或逻辑扇区编号。DOS扇区编号是从柱面0/磁头0/扇区1开始的,编号为0,依次递增,即柱面0/磁头0/扇区18的DOS扇区编号为18;柱面0/磁头1/扇区1的DOS扇区编号为19...。每个分区的第一个扇区的逻辑扇区编号为0。
2.3、通过CHS计算硬盘容量
硬盘存储容量=磁头数×柱面数×每个磁道扇区数×每个扇区字节数
3、磁盘存储划分
3.1、第一个扇区存储的数据
硬盘的第一个扇区(逻辑编号为0)可以说是整个硬盘最重要扇区了,它主要存储两大信息:
-
主引导分区(Master Boot Record,MBR): 存放引导加载程序,大小为446字节。
-
分区表(partition table): 记录整块硬盘分区的状态,占64字节,每一个分区信息占16个字节。
3.2、硬盘分区
分区的最小单位为柱面(Cylinder),也就是说,分区其实就是指定从第几个柱面到第几个柱面属于哪个区。
假设硬盘有400个柱面,平均分为4个区(C、D、E、F盘),则第四个分区F的柱面范围是第301号到第400号柱面。
分区表中,记录的就是就是每个分区的起始柱面号和结束柱面号。因为分区表只有64字节,因此最多只能容纳4个分区的记录(硬盘默认),要想分更多的去,则需要通过扩展分区来创建逻辑分区。
4、开机流程
-
加载BIOS: BIOS(Base Input Output System,基本输入输出系统,读做/'baious/)是硬件厂商写入到主板ROM里的一个程序,电脑开机时,会最先执行BIOS。
-
MBR: BIOS在执行的过程中,会根据用户设置(即在BIOS的Boot界面选择的优先启动项,U盘/硬盘/光驱),如果硬盘的优先级最高,则计算机会从硬盘的第一个扇区的MBR中的读取引导加载程序(Boot Loader)。和BIOS一样,主引导分区MBR是硬件本身会支持的东西。
-
引导加载程序:引导加载程序(Boot Loader)是用于读取操作系统内核文件的一个小软件,不同的操作系统有各自的引导加载程序。每个分区都可以有自己的文件系统,有自己的引导扇区,在启动的过程中,用户可以选择是直接加载引导程序所在分区的操作系统,还是将引导加载功能交给各分区引导扇区中的加载程序。boot loader的功能主要有:
-
提供菜单:让用户选择不同的开机选项,是多重引导的重要功能。
-
载入内核文件:直接指向可开机的程序区段,开始操作系统。
-
转交其他loader: 将引导加载功能转交给其他loader负责。
-
-
操作系统内核文件:最后,引导加载程序加载操作系统的内核文件,启动操作系统!
5、要点
-
每个分区都有自己的引导扇区(boot sector)。
-
实际可开机的操作系统内核文件是存放在各个分区内的,如在C盘安装Windows系统,在D盘安装Linux操作系统。
-
引导加载程序(boot loader)只会认识自己所在分区内的可开机内核文件,以及其他boot loader(相当于一个指针,指向其他loader)。
-
loader可以直接指向或者间接地将管理权交给其他loader。
-
一点经验:如果要安装多系统,最好先安装Windows,后安装Linux。因为Windows会强制覆盖MBS,也就是说,如果你先装Linux再装Windows,MBR中就只有Windows的相关选项(Linux的被覆盖掉了)。而Linux则不会强制覆盖MBR,你可以选择将Linux的引导程序安装在MBR或者其所在分区的引导扇区中;你也可以在Linux的引导程序中设置Windows的开机选项。
6、磁盘存储数据的形式
磁盘以二进制的形式存储数据。我们平时编程过程中读写文件模式可能有文本形式/二进制形式,文件也有文本文件、音频文件、图片文件...等各种不同类型的文件,但这些文件在磁盘上都是以二进制的方式存储。
可以想像一下,二进制中的0,对应磁盘上的一个“凹”点,1对应磁盘上的一个“凸”点。
二、Linux文件系统
计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统的本质:一种方便管理、组织、访问数据的软件。
-
对于管理来说,主要是磁盘空闲空间的管理
-
对于组织来说,主要是通过引入文件(inode)、树形目录(dentry)来组织用户的数据。文件包含用户的数据、树形为用户提供了一个对数据进行分类的功能。
-
对于访问来说,通过目录+文件名的方式进行文件创建、删除、读、写(也就是所谓的增、删、查、改)。
1、根文件系统
根文件系统(rootfs)是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
2、虚拟文件系统
虚拟文件系统VFS软件抽象层为用户屏蔽了底层文件系统的差异,向上层提供了统一地访问接口。
3、真文件系统
真文件系统其实是实际存储设备的文件系统,挂载于EEPROM、 Nor FLASH、 NAND FLASH、 eMMC 等存储器中。
3.1、ext4
EXT4是第四代扩展文件系统(Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,使用64位空间记录块数量和i-节点数量。
3.2、xfs
XFS最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64位的文件系统,后来进行开源并且移植到了Linux操作系统中,目前CentOS 7将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
4、伪文件系统
Linux内核提供了sysfs、procfs、devtmpfs等伪文件系统,伪文件系统存在于内存,不占用硬盘。以文件地形式向用户提供一些系统信息,用户读写这些文件就可以读取、修改系统的一些信息。
4.1、procfs
procfs是 进程文件系统的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。
由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
4.2、devtmpfs
devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev(udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。),缩短 GNU/Linux 的开机时间。
如果将一个设备连接到Linux系统时,通常需要一个设备驱动程序才能正常工作。此时通过设备文件或设备节点与设备驱动程序交互,这些是看起来像普通文件的特殊文件。由于这些设备文件就像普通文件一样,所以可以使用ls、cat等程序与它们交互。这些设备文件一般存放在/dev目录下。
4.3、sysfs
sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。sysfs 文件系统被挂载在 /sys 挂载点上。
Sysfs的目的是更好地管理系统上的设备,相比/dev目录无法做到这一点。Sysfs是一个虚拟文件系统,通常挂载在/sys目录下。它为我们提供了比在/dev目录中能够看到的更详细的信息。目录/sys和/dev在某些方面看起来非常相似,但它们确实有很大的不同。基本上,/dev目录很简单,它允许其他程序访问设备本身,而/sys文件系统用于查看信息和管理设备。
/sys文件系统基本上包含了系统中所有设备的所有信息,比如制造商和型号、设备插入的位置、设备的状态、设备的层次结构等等。在这里看到的文件不是设备节点,因此实际上并不是在/sys目录下与设备交互,而是在管理设备。
三、磁盘分区与挂载
磁盘热扫描:
cd /sys/class/scsi_host for i in `ls /sys/class/scsi_host`;do echo "- - -" > ${i}/scan;done [root@localhost scsi_host]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 120G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 119G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] └─centos-home 253:2 0 67G 0 lvm /home sdb 8:16 0 20G 0 disk sr0 11:0 1 9.5G 0 rom /run/media/root/CentOS 7 x86_64
1、磁盘分区方式
MBR
主引导记录,支持四个主分区或三主一扩展多个逻辑,每分区最大2TB,兼容性好。
GPT
是GUID分区表(GUID Partition Table)的缩写; 含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。 自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于18EB的总容量, 几乎没有上限,最大支持到128个分区,分区大小支持到256TB。
表示形式
硬盘:
/dev/hda:hd,表示硬盘的接口为IDE /dev/sda:sd,表示硬盘的接口为scsi;a是硬盘的编号,如:b、c.....
分区:
/dev/sda1:第一个分区 /dev/sda2:第二个分区 假如使用MBR分区方式: 四个主分区,分别是:sda1,sda2,sda3,sda4;扩展分区:有且只能有一个,并且会占用主分区编号; 逻辑分区:基于扩展分区之上;/dev/sda5
2、分区命令
2.1、fdisk命令
fdisk - Linux分区表操作工具软件,主要用于管理磁盘分区。
基本功能
-
查看分区信息:能够显示磁盘的分区表状况。
-
创建分区:可以对新磁盘进行分区操作。
-
删除分区:能够移除不需要的分区。
-
修改分区类型:可更改分区的文件系统类型标识。
-
设置分区标志:比如设置活动分区(引导分区)。
语法:
fdisk [选项] <磁盘> 更改分区表 fdisk [选项] -l <磁盘> 列出分区表 fdisk -s <分区> 给出分区大小(块数)
常用命令选项
下面列举一些常用的 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
进行分区,可按以下步骤操作:
-
进入交互模式:
sudo fdisk /dev/sdb
-
输入
n
创建新分区,按提示设置分区大小等参数。 -
输入
w
保存更改并退出。
注意事项
-
数据安全:在使用
fdisk
操作磁盘时要格外谨慎,因为误操作可能会导致数据丢失。 -
GPT 与 MBR:对于大于 2TB 的磁盘,建议使用 GPT 分区表,可通过
gdisk
或parted
命令来创建。 -
刷新分区表:对磁盘进行分区操作后,可能需要重启系统或者使用
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 | 显示此帮助信息 |
常用命令
-
启动交互式模式
parted /dev/sda
进入交互界面后,可用
print
、mkpart
等命令操作。 -
显示磁盘信息
parted /dev/sda print
-
print
:显示分区表和分区信息。运行这条命令后,系统会显示出 /dev/sda 磁盘当前的分区布局,包括分区的编号、类型、起始位置、结束位置、大小等详细信息,以便用户了解磁盘的分区情况。 -
print all
:显示所有磁盘的信息。
-
-
创建分区
(parted环境下) mkpart primary ext4 1GB 10GB
-
primary
:主分区类型。 -
ext4
:文件系统类型。 -
1GB-10GB
:分区大小范围。
-
-
调整分区大小
(parted) resizepart 2
调整第二个分区的大小(需指定新的结束位置)。
-
删除分区
(parted) rm 2
删除第二个分区。
-
切换分区表类型
(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
:按最佳对齐方式创建分区。
注意事项
-
数据安全:操作前务必备份数据,错误操作可能导致数据丢失。
-
权限要求:需使用
sudo
或 root 权限执行。 -
挂载状态:修改分区前需确保目标分区未被挂载。
-
文件系统:创建分区后,需用
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
可以:
-
重新读取分区表并更新内核的分区信息。
-
使新的分区配置立即生效,无需重启系统。
常见用法
-
更新所有磁盘的分区表:
sudo partprobe
-
仅更新指定磁盘的分区表(例如
/dev/sda
):sudo partprobe /dev/sda
-
更新特定分区(较少使用,通常直接更新整个磁盘):
sudo partprobe /dev/sda1
注意事项
-
权限要求:必须使用
sudo
执行此命令。 -
适用场景:仅适用于分区表结构的变更,若要使文件系统生效,仍需挂载新分区(例如通过
mount
命令)。 -
局限性:对于某些复杂的分区变更(如 LVM、RAID),可能需要额外操作或重启系统。
-
替代方案:若
partprobe
无效,可尝试使用udevadm trigger
或kpartx
命令。
示例流程
假设你使用 fdisk
修改了 /dev/sda
的分区表:
-
使用
fdisk /dev/sda
创建新分区。 -
保存并退出
fdisk
。 -
执行:
sudo partprobe /dev/sda
-
使用
lsblk
或fdisk -l
验证分区是否已更新。
相关命令
-
fdisk
:分区表编辑器。 -
lsblk
:列出块设备(包括分区)。 -
mount
:挂载文件系统。
案例:
[root@c2407 ~]# partprobe /dev/sdb
3.3、blkid命令
blkid
是 Linux 系统中用于查看块设备(如硬盘、U 盘、分区等)属性的命令,主要用于识别块设备上的文件系统类型、UUID(通用唯一标识符)和其他标签信息。这些信息对于系统配置(如 /etc/fstab
文件)和脚本编写非常有用。(即:查看磁盘分区的UUID)
常用场景
-
查看设备 UUID:在
/etc/fstab
中推荐使用 UUID 挂载分区,避免设备名称变化导致的挂载失败。 -
识别文件系统类型:快速确认分区使用的是 ext4、XFS 还是其他文件系统。
-
查找特定设备:通过标签或 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>
:仅显示指定的标签(如UUID
、TYPE
、LABEL
)。 -
-o <format>
:输出格式,支持full
(默认)、brief
、device
、value
。 -
-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
对常见文件系统提供了简写形式:文件系统 等效命令 ext4 mkfs.ext4
xfs mkfs.xfs
btrfs mkfs.btrfs
vfat mkfs.vfat
或mkdosfs
示例:
mkfs.ext4 /dev/sdb1 # 等同于 mkfs -t ext4 /dev/sdb1 mkfs.xfs /dev/sdc1 # 格式化为 XFS 文件系统
重要注意事项
-
数据安全:格式化会永久删除分区中的所有数据,请务必提前备份!
-
权限要求:需要 root 权限(使用
sudo
)。 -
确认分区:操作前务必通过
lsblk
或fdisk -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
注意事项
-
进行分区和格式化操作会清除磁盘上原有的数据,所以在操作前一定要做好数据备份。
-
编辑
/etc/fstab
文件时要格外谨慎,如果配置出现错误,可能会导致系统无法正常启动。 -
在卸载分区之前,要保证没有任何程序正在访问该分区。可以使用
lsof
命令来确认。
lsof +D /mnt/data
-
如果需要挂载 NFS 或 SMB 网络共享,还需要安装相应的客户端工具,例如
nfs-common
或cifs-utils
。
四、LVM逻辑卷
1、概述
LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进行管理的⼀种机制; 安装 Linux 操作系统时遇到的⼀个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空 间; 普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。
1.1、运行原理
LVM 通过三层抽象实现磁盘管理的灵活性:
核心概念
-
物理卷(Physical Volume, PV)
-
底层物理存储设备(如硬盘、分区),通过
pvcreate
初始化为 LVM 可管理的设备。 -
每个 PV 被划分为固定大小的物理扩展块(Physical Extent, PE),默认大小为 4MB。
-
-
卷组(Volume Group, VG)
-
由多个物理卷组成的存储池,可视为一个 “虚拟磁盘”。
-
卷组中的空间可动态分配给逻辑卷,无需考虑物理磁盘的限制。
-
-
逻辑卷(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逻辑卷命令 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
查询 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩容 | vgextend | lvextend | |
缩容(不能用,除非备份后) | vgreduce | lvreduce |
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
-
格式化逻辑卷
将逻辑卷格式化为 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
关键注意事项
-
缩减操作前必须卸载文件系统并备份数据
-
XFS 文件系统只支持扩展,不支持在线缩减
-
操作前建议通过
pvdisplay
、vgdisplay
、lvdisplay
确认状态 -
修改
/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 区别
lvextend
和xfs_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 的扩展分为两个独立步骤:
-
扩展逻辑卷(物理):通过
lvextend
增加虚拟分区大小。 -
扩展文件系统(逻辑):通过
xfs_growfs
或resize2fs
让文件系统使用新增空间。
示例流程:
# 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
查看时,可用空间不会增加。
-
-
执行顺序错误:
-
必须先扩展逻辑卷,再扩展文件系统。否则会报错 “空间不足”。
-
总结对比
操作 | lvextend | xfs_growfs (或resize2fs ) |
---|---|---|
作用对象 | 逻辑卷(LVM 层面) | 文件系统(数据组织层面) |
命令效果 | 增加逻辑卷的物理容量 | 扩展文件系统以利用新增的物理空间 |
文件系统限制 | 不依赖文件系统类型 | XFS 用xfs_growfs ,ext4 用resize2fs |
是否需要卸载 | 不需要(可在线操作) | XFS 必须在线;ext4 扩展可在线,缩减需卸载 |
通过这两个命令的配合,可安全、高效地扩展存储容量。
3.4、缩容LVM逻辑卷(不建议)
五、磁盘配额
1、概述
针对用户和组,用于配置用户和组在该磁盘的使用容量限制。
在 Linux 系统中,磁盘配额(Disk Quota)的配置对象是: 文件系统(通常对应逻辑分区或物理分区),而非单个磁盘(物理磁盘)或逻辑卷(LVM)本身。
配额的作用范围
-
磁盘配额是基于文件系统(如
ext4
、xfs
)生效的,而文件系统通常建立在逻辑分区或物理分区上(例如/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 | 启用专家模式。所有允许对配额系统进行修改的管理命令(请参阅下面的“管理员命令”部分)仅在专家模式下可用。 |
-c | cmd 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
关键注意事项
-
XFS 特性:
-
不支持在线缩减文件系统
-
配额基于块(block)和 inode 分别管理
-
配额数据库存储在文件系统自身
-
-
性能影响:
-
启用配额会增加少量 I/O 开销
-
大型文件系统首次初始化配额可能较慢
-
-
故障排查:
-
若配额不生效,检查
/etc/fstab
挂载选项 -
使用
xfs_quota -x -c "check"
诊断配额数据库问题
-
-
自动化:
-
可通过 cron 定期执行
xfs_quota -x -c "report -a"
生成使用报告 -
结合
quotaoff
和quotaon
在维护期间临时禁用配额
-
通过以上步骤,可全面管理 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)
部分操作无需卸载文件系统,例如:
-
XFS 文件系统扩容:
lvextend /dev/vg/lv -L +2G # 扩展逻辑卷 xfs_growfs /dev/vg/lv # 在线扩展文件系统,无需卸载
XFS 支持在线扩容,因为其文件系统结构允许动态调整。
-
临时重新挂载(修改挂载选项): 使用
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总体步骤
-
环境准备
假设系统中有一个 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
这会打开一个文本编辑器(通常是 vi
或 nano
),编辑内容类似如下:
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. 配额启用方式
特性 | ext4 | XFS |
---|---|---|
挂载选项 | 需要在挂载时添加usrquota 和grpquota 选项,例如: mount -o usrquota,grpquota /dev/sda1 /data | 需要在挂载时添加usrquota 和grpquota 选项,例如: 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. 配额管理命令
操作 | ext4 | XFS |
---|---|---|
启用配额 | quotaon -ug /data | xfs_quota -x -c "on -u -g" /data |
禁用配额 | quotaoff -ug /data | xfs_quota -x -c "off -u -g" /data |
编辑用户配额 | edquota username | xfs_quota -x -c "limit -u bsoft=10g bhard=20g username" /data |
编辑组配额 | edquota -g groupname | xfs_quota -x -c "limit -g bsoft=10g bhard=20g groupname" /data |
查看配额报告 | repquota -ug /data | xfs_quota -x -c "report -ubihp" /data |
3. 文件系统特性对配额的影响
特性 | ext4 | XFS |
---|---|---|
在线调整 | 支持在线扩展,但缩减需要卸载文件系统并使用resize2fs | 支持在线扩展和缩减(通过xfs_growfs 和xfs_repair ) |
配额数据库位置 | 存储在文件系统外部(通常是aquota.user 和aquota.group 文件) | 存储在文件系统内部的元数据中 |
inode 配额 | 支持基于 inode 数量的配额限制 | 支持基于 inode 数量的配额限制 |
实时统计 | 配额统计可能有延迟,尤其是在大文件系统上 | 配额统计实时更新,性能开销较小 |
4. 宽限期(Grace Period)
特性 | ext4 | XFS |
---|---|---|
软限制宽限期 | 超过软限制后,默认有 7 天宽限期,可以通过edquota -t 修改 | 超过软限制后,默认有 7 天宽限期,可以通过xfs_quota -x -c "timer -u btime=7days" /data 修改 |
宽限期检查频率 | 需要通过cron 定期运行quotacheck 来更新宽限期状态 | 宽限期由内核自动管理,无需额外操作 |
5. 高级特性
特性 | ext4 | XFS |
---|---|---|
项目配额(Project Quotas) | 支持通过pquota 选项实现更精细的子目录配额控制 | 支持通过project 和subproject 实现更灵活的配额层次结构 |
磁盘空间预分配 | 不支持 | 支持通过xfs_quota 命令预分配磁盘空间给用户或组 |
配额修复 | 使用quotacheck -avugm 修复损坏的配额数据库 | 使用xfs_quota -x -c "repair" /data 修复配额数据库 |
6. 性能与扩展性
特性 | ext4 | XFS |
---|---|---|
大文件系统表现 | 在处理非常大的文件系统(数百 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
就是具体的文件系统类型,如ext4
、xfs
等。 -
[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 0 | 2 | 无 | 100% | 极高 | 极高 | 非关键临时数据 |
RAID 1 | 2 | 1块 | 50% | 高 | 中等 | 系统盘、小型服务器 |
RAID 5 | 3 | 1块 | (N-1)/N | 高 | 中等 | 文件服务器、虚拟机存储 |
RAID 6 | 4 | 2块 | (N-2)/N | 高 | 低 | 大容量归档、云存储 |
RAID 10 | 4 | 每组1块 | 50% | 极高 | 高 | 数据库、高IOPS应用 |
选择建议
-
性能优先 → RAID 0(无冗余)或 RAID 10(有冗余)。
-
预算有限+基本冗余 → RAID 5。
-
大容量+高容错 → RAID 6。
-
关键业务高可用 → RAID 10。
注意事项
-
RAID 不是备份:无法防止误删除、病毒攻击,需额外备份方案。
-
硬件 RAID vs 软件 RAID:
-
硬件 RAID:依赖 RAID 卡,性能稳定,支持缓存加速。
-
软件 RAID(如Linux mdadm):灵活,成本低,但占用CPU资源。
-
-
SSD与RAID:SSD的磨损均衡机制可能与RAID冲突,建议优先选用企业级SSD并禁用磁盘缓存。