跟着大佬学新云计算第十一天,教你快速掌握Linux操作系统磁盘管理的所有内容,真实干货,没有水分(图文详解,演示案例)

目录

Linux操作系统磁盘管理

一、硬盘介绍

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、格式化命令

5、挂载命令

4.1、mount命令&swapon命令

4.2、umount命令&swapoff命令

四、LVM逻辑卷

1、概述

1.1、运行原理

1.2、LVM 相关概念:

1.3、挂载流程

2、管理命令

3、配置案例

3.1、构建LVM逻辑卷

3.2、扩容LVM逻辑卷

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

五、磁盘配额

1、概述

2、配置命令

2.1、quota命令(只针对ext文件系统的配额)

2.2、xfs_quota命令

3、配置案例

3.1、xfs配额

3.2、ext4配额(了解)(对普通用户生效)

六、磁盘检测与修复

1、fsck命令

2、xfs_repair命令

3、badblocks命令

4、磁盘检查

七、文件系统备份与恢复

1、xfsdump命令

2、xfsrestore命令

3、用dd命令进行分区表备份

附录:xfs常用命令

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

1. RAID 0(条带化)

2. RAID 1(镜像)

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

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

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

其他 RAID 类型

对比总结

选择建议

注意事项


Linux操作系统磁盘管理

一、硬盘介绍

  • 文件系统是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目录下与设备交互,而是在管理设备。

三、磁盘分区与挂载

磁盘热扫描:

查看磁盘所在位置

 #[root@localhost ~]# cd /sys/class/scsi_host/
  [root@localhost scsi_host]# ls
  host0   host13  host18  host22  host27  host31  host7
  host1   host14  host19  host23  host28  host32  host8
  host10  host15  host2   host24  host29  host4   host9
  host11  host16  host20  host25  host3   host5
  host12  host17  host21  host26  host30  host6
  #[root@localhost scsi_host]# cd host0
  #[root@localhost host0]# ls
  active_mode     host_reset         supported_mode
  board_assembly  io_delay           uevent
  board_name      power              unchecked_isa_dma
  board_tracer    proc_name          unique_id
  can_queue       prot_capabilities  use_blk_mq
  cmd_per_lun     prot_guard_type    version_bios
  debug_level     scan               version_fw
  device          sg_prot_tablesize  version_mpi
  device_delay    sg_tablesize       version_nvdata_default
  eh_deadline     state              version_nvdata_persistent
  host_busy       subsystem          version_product
 

使用脚本扫描出新磁盘

#用热扫描的方式显示磁盘
 [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   60G  0 disk 
  ├─sda1            8:1    0    1G  0 part /boot
  └─sda2            8:2    0   59G  0 part 
    ├─centos-root 253:0    0 38.3G  0 lvm  /
    ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
    └─centos-home 253:2    0 18.7G  0 lvm  /home

查看系统已安装的分区表

#[root@localhost ~]# fdisk -l
  磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  磁盘标签类型:dos
  磁盘标识符:0x0004ec33
  •
     设备 Boot      Start         End      Blocks   Id  System
  /dev/sda1   *        2048     2099199     1048576   83  Linux
  /dev/sda2         2099200   125829119    61864960   8e  Linux LVM
  •
  磁盘 /dev/mapper/centos-root:41.1 GB, 41120956416 字节,80314368 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  •
  •
  磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  •
  •
  磁盘 /dev/mapper/centos-home:20.1 GB, 20073938944 字节,39206912 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  •
  •
  磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节

1、磁盘分区方式

MBR

        主引导记录,支持四个主分区或三主一扩展多个逻辑,每分区最大2TB,兼容性好。

GPT

        是GUID分区表(GUID Partition Table)的缩写; 含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。 自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于18EB的总容量, 几乎没有上限,最大支持到128个分区,分区大小支持到256TB。

表示形式

硬盘:

/dev/hda:hd,表示硬盘的接口为IDE
 /dev/sda:sd,表示硬盘的接口为scsi;a是硬盘的编号,如:b、c、d

分区:

 /dev/sda1:第一个分区
 /dev/sda2:第二个分区
 假如使用MBR分区方式: 四个主分区,分别是:sda1,sda2,sda3,sda4;扩展分区:有且只能有一个,并且会占用主分区编号;
 逻辑分区:基于扩展分区之上;/dev/sda5

2、分区命令

2.1、fdisk命令

fdisk - Linux分区表操作工具软件

单分区不能超过2TB

语法:

 fdisk [选项] <磁盘> 更改分区表
 fdisk [选项] -l <磁盘> 列出分区表
 fdisk -s <分区> 给出分区大小(块数)

选项:

选项作用
-l显示系统中已安装的分区表
-s显示分区的扇区数
-u显示分区的单元号
-c检查分区表是否正确
-d显示分区表中的错误
-n显示分区的起始和结束扇区号
-v显示fdisk的版本信息
-m显示分区的媒体类型
-u指定分区的单元号
-o指定分区的文件系统编号
-r从新分区表中创建一个新的根分区
-L创建逻辑分区(可选)
-p显示当前分区表的状态
-S设置分区的扇区大小(可选)
-a设置分区的主引导记录(MBR)类型(可选)

案例:

交互式分区

 [root@localhost ~]# 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)
 ​
 #分区类型
 82  Linux 交换 / So
 83  Linux
 8e  Linux LVM 
  • 输入m获取命令帮助

选项作用
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额外功能(仅限专家)

创建主分区(大小为5GB)注意:不要忘记+号

 命令(输入 m 获取帮助):n
 分区号 (1-128,默认 1):
 第一个扇区 (34-41943006,默认 2048):
 Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006,默认 41943006):+5G
 已创建分区 1
 ​
 ​
 命令(输入 m 获取帮助):p
 ​
 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
 Units = 扇区 of 1 * 512 = 512 bytes
 扇区大小(逻辑/物理):512 字节 / 512 字节
 I/O 大小(最小/最佳):512 字节 / 512 字节
 磁盘标签类型:gpt
 Disk identifier: E4EBD9AA-B625-4826-BD00-0A51D10FD7CC
 ​
 #         Start          End    Size  Type            Name
  1         2048     10487807      5G  Linux filesyste 
 ​
 命令(输入 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   60G  0 disk 
 ├─sda1            8:1    0    1G  0 part /boot
 └─sda2            8:2    0   59G  0 part 
   ├─centos-root 253:0    0 38.3G  0 lvm  /
   ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
   └─centos-home 253:2    0 18.7G  0 lvm  /home
 sdb               8:16   0   20G  0 disk 
 └─sdb1            8:17   0    5G  0 part 
 sr0              11:0    1  9.5G  0 rom  /run/media/root             11:0    1 1024M  0 rom  

代码中sdb1 就是我们创建的主分区

创建扩展分区:(无法被直接可格式化,只有在拓展分区上建立的逻辑分区可以被格式化)输入选项p查看分区信息,输入选项n建立新分区,输入e建立扩展分区,大小为10G

root@localhost ~]# fdisk /dev/sdb
  欢迎使用 fdisk (util-linux 2.23.2)。
  
  更改将停留在内存中,直到您决定将更改写入磁盘。
  使用写入命令前请三思。
  
  
  命令(输入 m 获取帮助):p
  
  磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  磁盘标签类型:dos
  磁盘标识符:0xd97c47d2
  
     设备 Boot      Start         End      Blocks   Id  System
  /dev/sdb1            2048    10487807     5242880   83  Linux
  
  命令(输入 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):10G
  值超出范围。
  Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+10G
  分区 2 已设置为 Extended 类型,大小设为 10 GiB

创建逻辑分区 输入选项l ,大小为1G ,w同步磁盘

oot@localhost ~]# fdisk /dev/sdb
  欢迎使用 fdisk (util-linux 2.23.2)。
  
  更改将停留在内存中,直到您决定将更改写入磁盘。
  使用写入命令前请三思。
  
  
  命令(输入 m 获取帮助):p
  
  磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
  Units = 扇区 of 1 * 512 = 512 bytes
  扇区大小(逻辑/物理):512 字节 / 512 字节
  I/O 大小(最小/最佳):512 字节 / 512 字节
  磁盘标签类型:dos
  磁盘标识符:0xd97c47d2
 ​
     设备 Boot      Start         End      Blocks   Id  System
  /dev/sdb1            2048    10487807     5242880   83  Linux
  /dev/sdb2        10487808    31459327    10485760    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-31459327,默认为 10489856):
 将使用默认值 10489856
 Last 扇区, +扇区 or +size{K,M,G} (10489856-31459327,默认为 31459327):+1G
 分区 5 已设置为 Linux 类型,大小设为 1 GiB
  
 命令(输入 m 获取帮助):w
 The partition table has been altered!
 ​
 Calling ioctl() to re-read partition table.
 正在同步磁盘。

非交互创建分区 ( < 重定向输入,不是所有命令都适用)

[root@localhost ~]# vim fdisk.txt 
 n 
 p
 ​
 ​
 +5G
 w
 #创建逻辑分区Vim fdisk.txt(只空一行)
 n
 l
 ​
 +5G
 w
 ##################以上为文件内容######
 [root@localhost ~]#fdisk /dev/sdb < fdisk.txt
 [root@c2407 ~]# lsblk 
 NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 sda               8:0    0  200G  0 disk 
 ├─sda1            8:1    0    1G  0 part /boot
 └─sda2            8:2    0  199G  0 part 
   ├─centos-root 253:0    0   50G  0 lvm  /
   ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
   └─centos-home 253:2    0  147G  0 lvm  /home
 sdb               8:16   0   20G  0 disk 
 ├─sdb1            8:17   0    5G  0 part 
 ├─sdb2            8:18   0    5G  0 part 
 ├─sdb3            8:19   0    5G  0 part 
 └─sdb4            8:20   0    5G  0 part 
 sr0              11:0    1 1024M  0 rom

2.2、parted命令

用于磁盘分区的命令行工具,创建、调整、删除和查看磁盘分区

语法:

parted [options] [device [command [options...]...]]

选项:

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

操作步骤

  1. parted /dev/sdb 对/dev/sdb进行分区或管理操作(定义分区标签)

  2. (parted) mklabel gpt 定义分区表格式 (常用的有msdos(mbr)和gpt分区表格式,msdos不支持2TB以上容量的磁盘,所以大于2TB的磁盘选gpt分区表格式)

  3. (parted) mkpart p1 创建第一个分区,名称为p1(p1只是第一个分区的名称,用别的名称也可以,如part1)

  4. File system type? [ext2]? ext3 定义分区格式 (不支持ext4,想分ext4格式的分区,可以通过mkfs.ext4格式化成ext4格式)(先指定文件格式类型,格式化时按照文件类型进行格式化)

  5. Start? 1 定义分区的起始位置

    (单位支持K,M,G,T)百分比

  6. End? 20G 定义分区的结束位置 (单位支持K,M,G,T)百分比

  7. (parted) print

    查看当前分区情况

    Number Start End Size File system Name 标志

  8. (parted) rm rm删除命令 (删除之前必须确保分区没有被挂载)

  9. Partition number? 1 删除第一个分区 Number

案例:

 #1、root@localhost ~]# parted /dev/sdb
 GNU Parted 3.1
 使用 /dev/sdb
 Welcome to GNU Parted! Type 'help' to view a list of
 commands.
 #2、(parted) mklabel gpt
 警告: The existing disk label on /dev/sdb will be
 destroyed and all data on this disk will be lost. Do you
 want to continue?
 #3、是/Yes/否/No? yes 
 #4、(parted) mkpart p1
 #5、文件系统类型?  [ext2]? 
 affs0            amufs5           jfs
 affs1            apfs1            linux-swap
 affs2            apfs2            linux-swap(new)
 affs3            asfs             linux-swap(old)
 affs4            btrfs            linux-swap(v0)
 affs5            ext2             linux-swap(v1)
 affs6            ext3             nilfs2
 affs7            ext4             ntfs
 amufs            fat16            reiserfs
 amufs0           fat32            sun-ufs
 amufs1           hfs              swsusp
 amufs2           hfs+             xfs
 amufs3           hfsx             
 amufs4           hp-ufs           
 #文件系统类型?  [ext2]? xfs
 #6、起始点? 1        
 #7、结束点? 20G      
 #8、(parted) print
 Model: VMware, VMware Virtual S (scsi)
 Disk /dev/sdb: 21.5GB
 Sector size (logical/physical): 512B/512B
 Partition Table: gpt
 Disk Flags: 
 ​
 Number  Start   End     Size    File system  Name  标志
  1      1049kB  20.0GB  20.0GB               p1
 ​
 (parted) rm       
 分区编号? 1      
 (parted) 

3、查看与识别命令

3.1、lsblk命令

列出所有块设备信息

语法:

lsblk [options] [device...]

选项:

选项作用

案例:

[root@localhost ~]# lsblk
 NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 sda           8:0    0  100G  0 disk 
 ├─sda1        8:1    0    1G  0 part /boot
 └─sda2        8:2    0   99G  0 part 
   ├─rl-root 253:0    0 65.2G  0 lvm  /
   ├─rl-swap 253:1    0    2G  0 lvm  [SWAP]
   └─rl-home 253:2    0 31.8G  0 lvm  /home
 sdb           8:16   0   10G  0 disk 
 sdc           8:32   0   10G  0 disk 
 sdd           8:48   0   10G  0 disk 
 sr0          11:0    1 1024M  0 rom 

3.2、partprobe命令

通知内核重新读取所有磁盘的分区表(加载分区识别)

语法:

 partprobe [-d] [-s] [devices...]

案例:

对/dev/sdb磁盘进行分区识别

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

3.3、blkid命令

查看磁盘分区的UUID

 [root@localhost ~]# blkid
 /dev/sda1: UUID="348b2788-8d0b-45b7-93fc-7b74b5c7eabd" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="97af6eca-01"
 /dev/sda2: UUID="ia5jGz-utgT-uoEz-vkPF-Va8V-WfiR-wrg4ad" TYPE="LVM2_member" PARTUUID="97af6eca-02"
 /dev/mapper/rl-root: UUID="3ffc2768-8d6e-463c-912c-66b01337f83a" BLOCK_SIZE="512" TYPE="xfs"
 /dev/mapper/rl-swap: UUID="0c986abb-4b26-4e39-ac5f-8449de93e597" TYPE="swap"
 /dev/mapper/rl-home: UUID="a054071f-5162-4d4d-901e-3f745d4aeb2f" BLOCK_SIZE="512" TYPE="xfs"

4、格式化命令

mkfs命令

用于格式化磁盘分区,生成指定的文件系统。格式化后分区中的数据将丢失!

语法:

mkfs [ -V ] [ -t 文件系统类型 ] [ fs-选项 ] 文件系统 [ 块 ]
 mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
 mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs 

选项:

选项作用
-t文件系统类型
-v产生冗长输出信息。帮助信息
.(链式写法)文件系统类型(与-t作用一样)

案例:

1)普通文件系统格式化

 #格式化为xfs文件系统
 [root@localhost ~]# 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@localhost ~]# 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文件系统格式化

  • swap虚拟内存

    物理内存小于16G,给1.5倍—2倍的空间;大于16G,给和内存数相等的容量空间即可

  • 交换空间swap

[root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1746        1048          78          21         619         522
 Swap:          2067          19        2048
  • 案列

首先创建一个分区,增加交换空间/dev/sdb1,使用swapon挂载/dev/sdb1,设置虚内存空间 通过free -m查看内存使用情况

#[root@localhost ~]# fdisk /dev/sdb
 ​
 欢迎使用 fdisk (util-linux 2.32.1)。
 更改将停留在内存中,直到您决定将更改写入磁盘。
 使用写入命令前请三思。
 ​
 设备不包含可识别的分区表。
 创建了一个磁盘标识符为 0xb2979a66 的新 DOS 磁盘标签。
 ​
 命令(输入 m 获取帮助):n 
 分区类型
    p   主分区 (0个主分区,0个扩展分区,4空闲)
    e   扩展分区 (逻辑分区容器)
 选择 (默认 p):
 ​
 将使用默认回应 p。
 分区号 (1-4, 默认  1): 
 第一个扇区 (2048-20971519, 默认 2048): 
 上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-20971519, 默认 20971519): +1G
 ​
 创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
 ​
 命令(输入 m 获取帮助):p
 Disk /dev/sdb:10 GiB,10737418240 字节,20971520 个扇区
 单元:扇区 / 1 * 512 = 512 字节
 扇区大小(逻辑/物理):512 字节 / 512 字节
 I/O 大小(最小/最佳):512 字节 / 512 字节
 磁盘标签类型:dos
 磁盘标识符:0xb2979a66
 ​
 设备       启动  起点    末尾    扇区 大小 Id 类型
 /dev/sdb1        2048 2099199 2097152   1G 83 Linux
 ​
 命令(输入 m 获取帮助):w
 分区表已调整。
 将调用 ioctl() 来重新读分区表。
 正在同步磁盘。
 ​
 #[root@localhost ~]# mkswap /dev/sdb1
 正在设置交换空间版本 1,大小 = 1024 MiB (1073737728  个字节)
 无标签,UUID=70a81803-e85d-4322-a586-9390c7de0876
 #[root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1746        1048          71          21         626         522
 Swap:          2067          47        2020
 #[root@localhost ~]# swapon /dev/sdb1
 #[root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1746        1042          74          21         628         528
 Swap:          3091          58        3033

5、挂载命令

挂载源: 磁盘分区或者文件系统

挂载点: 文件系统访问的入口,通常是目录。

4.1、mount命令&swapon命令

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

swapon:挂载swap文件系统

语法:

选项:

选项作用
-t指定要挂载的文件系统类型,常见的文件系统类型有ext4、ntfs、vfat等。
-o指定挂载选项,比如可以指定只读挂载(ro)、允许所有用户挂载(user)、允许执行程序挂载(exec)等。
-r以只读模式挂载文件系统。
-w以读写模式挂载文件系统
-a挂载/etc/fstab文件中定义的所有文件系统。
-n不重新挂载/etc/fstab文件中定义的文件系统。
-o remount重新挂载一个已经挂载的文件系统,可以改变挂载选项。
-o loop挂载一个loop设备上的文件系统

案例:

1)普通文件系统挂载

#临时挂载文件系统
 [root@localhost ~]# mkdir /sdb1 /sdb2
 [root@localhost ~]# mount /dev/sdb1 /sdb1
 [root@localhost ~]# mount /dev/sdb2 /sdb2
 [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 /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@localhost ~]# mount /dev/sdb3 /sdb3
 mount: /dev/sdb3 写保护,将以只读方式挂载
 mount: 文件系统类型错误、选项错误、/dev/sdb3 上有坏超级块、缺少代码页或助手程序,或其他错误有些情况下在syslog 中可以找到一些有用信息- 请尝试dmesg | tail  这样的命令看看。
 #永久挂载文件系统 :写入/etc/fstab
 #挂载源 挂载点 文件系统类型 挂载参数 是否备份 是否自检
 [root@localhost ~]# vim /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@localhost ~]# mount -a  #测试fstab中文件系统是否进行正藏挂载
 [root@localhost ~]# 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@localhost ~]# mkswap /dev/sdb1
 正在设置交换空间版本 1,大小 = 1024 MiB (1073737728  个字节)
 无标签,UUID=70a81803-e85d-4322-a586-9390c7de0876
 #[root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1746        1048          71          21         626         522
 Swap:          2067          47        2020
 #[root@localhost ~]# swapon /dev/sdb1
 #[root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1746        1042          74          21         628         528
 Swap:          3091          58        3033

3)挂载本地文件,如:iso镜像文件

 [root@localhost ~]# mount -o loop deepin-desktop-community-20.9-amd64.iso /srv
 mount: /dev/loop0 写保护,将以只读方式挂载
 [root@localhost ~]# 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% /srv

4)挂载模拟的块设备文件

 #[root@localhost ~]# dd if=/dev/zero of=/test_disk bs=100M count=2
 记录了2+0 的读入
 记录了2+0 的写出
 209715200 bytes (210 MB, 200 MiB) copied, 0.963061 s, 218 MB/s
 #[root@localhost ~]# du -ah /test_disk
 200M    /test_disk
 #[root@localhost ~]# mkfs.ext4 /test_disk 
 mke2fs 1.45.6 (20-Mar-2020)
 丢弃设备块: 完成                            
 创建含有 204800 个块(每块 1k)和 51200 个inode的文件系统
 文件系统UUID:4cc97dd8-0049-42f1-aa4a-74cc7e6896a5
 超级块的备份存储于下列块: 
         8193, 24577, 40961, 57345, 73729
 ​
 正在分配组表: 完成                            
 正在写入inode表: 完成                            
 创建日志(4096 个块)完成
 写入超级块和文件系统账户统计信息: 已完成
 ​
 #[root@localhost ~]# mount /test_disk /mnt/
 #[root@localhost ~]# df -Th
 文件系统            类型      容量  已用  可用 已用% 挂载点
 devtmpfs            devtmpfs  844M     0  844M    0% /dev
 tmpfs               tmpfs     874M     0  874M    0% /dev/shm
 tmpfs               tmpfs     874M   24M  850M    3% /run
 tmpfs               tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home xfs        32G  260M   32G    1% /home
 /dev/sda1           xfs      1014M  273M  742M   27% /boot
 tmpfs               tmpfs     175M   28K  175M    1% /run/user/0
 /dev/loop0          ext4      189M   14K  175M    1% /mnt

5)重新挂载一个已经挂载的文件系统

[root@localhost ~]#mount -o remount,rw /dev/sdb1 /mnt/

注意:在Rocky操作系统中,模拟的磁盘文件无法作为swap使用!!

4.2、umount命令&swapoff命令

umount - 卸载文件系统

swapoff-卸载swap文件系统

语法:

umount -a [-nrv] [-t vfstype]
 umount 挂资源或者挂载点

选项:

选项作用
-a卸载所有可卸载文件系统

案例:

1)卸载普通文件系统

[root@localhost ~]# umount /mnt
 [root@localhost ~]# df -Th
 文件系统            类型      容量  已用  可用 已用% 挂载点
 devtmpfs            devtmpfs  844M     0  844M    0% /dev
 tmpfs               tmpfs     874M     0  874M    0% /dev/shm
 tmpfs               tmpfs     874M   24M  850M    3% /run
 tmpfs               tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home xfs        32G  260M   32G    1% /home
 /dev/sda1           xfs      1014M  273M  742M   27% /boot
 tmpfs               tmpfs     175M   28K  175M    1% /run/user/0

2)swap文件系统卸载

[root@localhost ~]# swapoff /dev/sdb3
 [root@localhost ~][root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1819         472         957          10         388        1190
 Swap:          2047           0        2047
 #卸载所有swap文件系统
 [root@localhost ~]# swapoff -a
 [root@localhost ~]# free -m
               total        used        free      shared  buff/cache   available
 Mem:           1819         471         960          10         387        1191
 Swap:             0           0           0

四、LVM逻辑卷

1、概述

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

1.1、运行原理

1.2、LVM 相关概念:

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. 创建分区

    fdisk /dev/sdb

  2. 创建物理卷

    pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3

  3. 创建卷组(只有卷组生成才会有PE产生)

    vgcreate c2505 /dev/sdb1 /dev/sdb2 /dev/sdb3

  4. 扩容卷组

    vgextend c2505 /dev/sdd

  5. 创建逻辑卷

    lvcreate -n c2505_lv1 c2505 -L 2G

    案列

  • 创建物理卷

#[root@localhost ~]# pvcreate /dev/sdc
 Physical volume "/dev/sdc" successfully created.
 #[root@localhost ~]# pvcreate /dev/sdd
   Physical volume "/dev/sdd" successfully created.
 #[root@localhost ~]# pvdisplay
   --- Physical volume ---
   PV Name               /dev/sda2
   VG Name               rl
   PV Size               <99.00 GiB / not usable 3.00 MiB
   Allocatable           yes (but full)
   PE Size               4.00 MiB
   Total PE              25343
   Free PE               0
   Allocated PE          25343
   PV UUID               ia5jGz-utgT-uoEz-vkPF-Va8V-WfiR-wrg4ad
    
   "/dev/sdc" is a new physical volume of "10.00 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdc
   VG Name               
   PV Size               10.00 GiB
   Allocatable           NO
   PE Size               0   
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               0Km58c-GDX3-PZUS-xydl-r8yL-NdX1-upO01h
    
   "/dev/sdd" is a new physical volume of "10.00 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdd
   VG Name               
   PV Size               10.00 GiB
   Allocatable           NO
   PE Size               0   
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               AEuf1c-msVr-VdGj-qF16-LiFA-H07d-fu1RF2
  • 创建卷组 vgcerate 卷组名 物理卷

[root@localhost ~]# vgcreate c2505 /dev/sdc
   Volume group "c2505" successfully created
 [root@localhost ~]# pvdisplay
   --- Physical volume ---
   PV Name               /dev/sdc
   VG Name               c2505
   PV Size               10.00 GiB / not usable 4.00 MiB
   Allocatable           yes 
   PE Size               4.00 MiB
   Total PE              2559
   Free PE               2559
   Allocated PE          0
   PV UUID               0Km58c-GDX3-PZUS-xydl-r8yL-NdX1-upO01h
    
   --- Physical volume ---
   PV Name               /dev/sda2
   VG Name               rl
   PV Size               <99.00 GiB / not usable 3.00 MiB
   Allocatable           yes (but full)
   PE Size               4.00 MiB
   Total PE              25343
   Free PE               0
   Allocated PE          25343
   PV UUID               ia5jGz-utgT-uoEz-vkPF-Va8V-WfiR-wrg4ad
    
   "/dev/sdd" is a new physical volume of "10.00 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdd
   VG Name               
   PV Size               10.00 GiB
   Allocatable           NO
   PE Size               0   
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               AEuf1c-msVr-VdGj-qF16-LiFA-H07d-fu1RF2
  • 扩容卷组 vgextend 卷组名 物理卷 (基于XFS文件系统的lv扩容)

[root@localhost ~]# vgextend c2505 /dev/sdd
   Volume group "c2505" successfully extended
 [root@localhost ~]# vgdisplay
   --- Volume group ---
   VG Name               c2505
   System ID             
   Format                lvm2
   Metadata Areas        2
   Metadata Sequence No  2
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                0
   Open LV               0
   Max PV                0
   Cur PV                2
   Act PV                2
   VG Size               19.99 GiB
   PE Size               4.00 MiB
   Total PE              5118
   Alloc PE / Size       0 / 0   
   Free  PE / Size       5118 / 19.99 GiB
   VG UUID               eslmNK-N5je-GZ0b-ZIJx-2eEk-5umX-pEO48j
    
   --- Volume group ---
   VG Name               rl
   System ID             
   Format                lvm2
   Metadata Areas        1
   Metadata Sequence No  4
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                3
   Open LV               3
   Max PV                0
   Cur PV                1
   Act PV                1
   VG Size               <99.00 GiB
   PE Size               4.00 MiB
   Total PE              25343
   Alloc PE / Size       25343 / <99.00 GiB
   Free  PE / Size       0 / 0   
   VG UUID               LGLgYs-4BFa-N9Kp-okdF-Z0Q6-otc2-9Wv44l
  • 创建逻辑卷 lvcreate -n 逻辑卷名 卷组名 -L 大小

[root@localhost ~]# lvcreate -n c2505_lv1 c2505 -L 2G
   Logical volume "c2505_lv1" created.
  • 逻辑卷先挂载在才能识别,查看容量 查看:xfs_growfs 逻辑卷路径

[root@localhost ~]# mkfs.xfs /dev/c2505/c2505_lv1
 meta-data=/dev/c2505/c2505_lv1   isize=512    agcount=4, agsize=262144 blks
          =                       sectsz=512   attr=2, projid32bit=1
          =                       crc=1        finobt=1, sparse=1, rmapbt=0
          =                       reflink=1    bigtime=0 inobtcount=0
 data     =                       bsize=4096   blocks=1048576, 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 ~]# xfs_growfs /dev/c2505/c2505_lv1
 xfs_growfs: /dev/c2505/c2505_lv1 is not a mounted XFS filesystem
 #[root@localhost ~]# mount /dev/mapper/c2505-c2505_lv1 /mnt/
 #[root@localhost ~]# xfs_growfs /dev/c2505/c2505_lv1
 meta-data=/dev/mapper/c2505-c2505_lv1 isize=512    agcount=4, agsize=262144 blks
          =                       sectsz=512   attr=2, projid32bit=1
          =                       crc=1        finobt=1, sparse=1, rmapbt=0
          =                       reflink=1    bigtime=0 inobtcount=0
 data     =                       bsize=4096   blocks=1048576, 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
 data blocks changed from 1048576 to 1572864
 #[root@localhost ~]# df -Th
 文件系统                    类型      容量  已用  可用 已用% 挂载点
 devtmpfs                    devtmpfs  844M     0  844M    0% /dev
 tmpfs                       tmpfs     874M     0  874M    0% /dev/shm
 tmpfs                       tmpfs     874M   43M  832M    5% /run
 tmpfs                       tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root         xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home         xfs        32G  260M   32G    1% /home
 /dev/sda1                   xfs      1014M  273M  742M   27% /boot
 tmpfs                       tmpfs     175M   28K  175M    1% /run/user/0
 /dev/mapper/c2505-c2505_lv1 xfs       4.0G   61M  4.0G    2% /mnt
  • 扩容逻辑卷,lvextend 逻辑卷路径 -L +大小(注意+)

    先卸载在扩容

 #[root@localhost ~]# umount /mnt
 #[root@localhost ~]# lvextend /dev/c2505/c2505_lv1 -L +2G
   Size of logical volume c2505/c2505_lv1 changed from 4.00 GiB (1024 extents) to 6.00 GiB (1536 extents).
   Logical volume c2505/c2505_lv1 successfully resized.
 #[root@localhost ~]# xfs_growfs /dev/c2505/c2505_lv1
 xfs_growfs: /dev/c2505/c2505_lv1 is not a mounted XFS filesystem
 [root@localhost ~]# mount /dev/mapper/c2505-c2505_lv1 /mnt/
 [root@localhost ~]# xfs_growfs /dev/c2505/c2505_lv1
 meta-data=/dev/mapper/c2505-c2505_lv1 isize=512    agcount=4, agsize=262144 blks
          =                       sectsz=512   attr=2, projid32bit=1
          =                       crc=1        finobt=1, sparse=1, rmapbt=0
          =                       reflink=1    bigtime=0 inobtcount=0
 data     =                       bsize=4096   blocks=1048576, 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
 data blocks changed from 1048576 to 1572864
 [root@localhost ~]# df -Th
 文件系统                    类型      容量  已用  可用 已用% 挂载点
 devtmpfs                    devtmpfs  844M     0  844M    0% /dev
 tmpfs                       tmpfs     874M     0  874M    0% /dev/shm
 tmpfs                       tmpfs     874M   43M  832M    5% /run
 tmpfs                       tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root         xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home         xfs        32G  260M   32G    1% /home
 /dev/sda1                   xfs      1014M  273M  742M   27% /boot
 tmpfs                       tmpfs     175M   28K  175M    1% /run/user/0
 /dev/mapper/c2505-c2505_lv1 xfs       6.0G   76M  6.0G    2% /mnt

3.2、扩容LVM逻辑卷

 #基于XFS文件系统的lv扩容
 [root@c2407 ~]# lvextend /dev/testvg/testlv  -L +2G
   Size of logical volume testvg/testlv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
   Logical volume testvg/testlv successfully resized.
 [root@c2407 ~]# xfs_growfs /dev/testvg/testlv 
 meta-data=/dev/mapper/testvg-testlv 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
 [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

2、基于EXT文件系统的扩容

  • 增加一块名为 c2505_lv2逻辑卷,格式化为ext4文件系统,将逻辑卷挂载到/srv/

##基于EXT文件系统的lv扩容
 [root@localhost ~]# lvcreate -n c2505_lv2 c2505 -L +2G
   Logical volume "c2505_lv2" created.
 [root@localhost ~]# mkfs.ext4 /dev/c2505/c2505_lv2
 mke2fs 1.45.6 (20-Mar-2020)
 创建含有 524288 个块(每块 4k)和 131072 个inode的文件系统
 文件系统UUID:d1f601ae-51d6-4f24-9d96-d5f6752fcca6
 超级块的备份存储于下列块: 
         32768, 98304, 163840, 229376, 294912
 ​
 正在分配组表: 完成                            
 正在写入inode表: 完成                            
 创建日志(16384 个块)完成
 写入超级块和文件系统账户统计信息: 已完成
 [root@localhost ~]# mount /dev/mapper/c2505-c2505_lv2 /srv/
 [root@localhost ~]# df -Th
 文件系统                    类型      容量  已用  可用 已用% 挂载点
 devtmpfs                    devtmpfs  844M     0  844M    0% /dev
 tmpfs                       tmpfs     874M     0  874M    0% /dev/shm
 tmpfs                       tmpfs     874M   43M  831M    5% /run
 tmpfs                       tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root         xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home         xfs        32G  260M   32G    1% /home
 /dev/sda1                   xfs      1014M  273M  742M   27% /boot
 tmpfs                       tmpfs     175M   28K  175M    1% /run/user/0
 /dev/mapper/c2505-c2505_lv1 xfs       6.0G   76M  6.0G    2% /mnt
 /dev/mapper/c2505-c2505_lv2 ext4      2.0G   24K  1.8G    1% /srv
  • 扩建逻辑卷大小为2G

[root@localhost ~]# lvextend /dev/c2505/c2505_lv2 -L +2G
   Size of logical volume c2505/c2505_lv2 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
   Logical volume c2505/c2505_lv2 successfully resized.
 [root@localhost ~]# df -Th
 文件系统                    类型      容量  已用  可用 已用% 挂载点
 devtmpfs                    devtmpfs  844M     0  844M    0% /dev
 tmpfs                       tmpfs     874M     0  874M    0% /dev/shm
 tmpfs                       tmpfs     874M   43M  831M    5% /run
 tmpfs                       tmpfs     874M     0  874M    0% /sys/fs/cgroup
 /dev/mapper/rl-root         xfs        66G  7.1G   59G   11% /
 /dev/mapper/rl-home         xfs        32G  260M   32G    1% /home
 /dev/sda1                   xfs      1014M  273M  742M   27% /boot
 tmpfs                       tmpfs     175M   28K  175M    1% /run/user/0
 /dev/mapper/c2505-c2505_lv1 xfs       6.0G   76M  6.0G    2% /mnt
 /dev/mapper/c2505-c2505_lv2 ext4      2.0G   24K  1.8G    1% /srv
  • 用e2fsck -f查看 先卸载,

[root@localhost ~]# e2fsck /dev/c2505/c2505_lv2
 e2fsck 1.45.6 (20-Mar-2020)
 /dev/c2505/c2505_lv2 已挂载。
 e2fsck: 无法继续,已中止。
 ​
 [root@localhost ~]# umount /srv
 [root@localhost ~]# e2fsck /dev/c2505/c2505_lv2
 e2fsck 1.45.6 (20-Mar-2020)
 /dev/c2505/c2505_lv2:没有问题,11/131072 文件,26156/524288 块
 [root@localhost ~]# resize2fs /dev/c2505/c2505_lv2
 resize2fs 1.45.6 (20-Mar-2020)
 请先运行“e2fsck -f /dev/c2505/c2505_lv2”。
 ​
 [root@localhost ~]# e2fsck -f /dev/c2505/c2505_lv2
 e2fsck 1.45.6 (20-Mar-2020)
 第 1 步:检查inode、块和大小
 第 2 步:检查目录结构
 第 3 步:检查目录连接性
 第 4 步:检查引用计数
 第 5 步:检查组概要信息
 /dev/c2505/c2505_lv2:11/131072 文件(0.0% 为非连续的), 26156/524288 块
 [root@localhost ~]# resize2fs /dev/c2505/c2505_lv2
 resize2fs 1.45.6 (20-Mar-2020)
 将 /dev/c2505/c2505_lv2 上的文件系统调整为 1048576 个块(每块 4k)。
 /dev/c2505/c2505_lv2 上的文件系统现在为 1048576 个块(每块 4k)。

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

 ​

五、磁盘配额

1、概述

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

配额类型:

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

  • grpquota:支持对组的磁盘配额(组内成员共用该控件)

  • 使用磁盘配额必须先将挂载参数 usrquota,grpquota挂载上去才能支持磁盘配额

[root@localhost ~]# mount -o usrquota,grpquota /dev/c2505/c2505_lv2 /srv/
 [root@localhost ~]# mount
 /dev/mapper/c2505-c2505_lv2 on /srv type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota)

限制类型:

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

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

2、配置命令

2.1、quota命令(只针对ext文件系统的配额)

语法:

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_quota [ -x ] [ -p prog ] [ -c cmd ] ... [ -d project ] ... [ path ... ]
 xfs_quota -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配额

1、挂载并启用配额

 mount -o usrquota,grpquota /挂载磁盘 /挂载点
 #挂载磁盘/dec/c2505/c2505_l  到挂载点/mnt/
 [root@localhost srv]# mount -o usrquota,grpquota /dev/c2505/c2505_lv1 /mnt/

永久挂载参数如下:

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

2、编辑用户配额(固定格式,不能改变)

xfs_quota -x -c 'limit -u bsoft:30M bhard:50M isoft:3 ihard:5 用户名' /挂载目录
 #编辑用户配额,并给文件提权
 [root@localhost srv]# xfs_quota -x -c 'limit -u bsoft:30M bhard:50M isoft:3 ihard:5 hou' /mnt
 [root@localhost srv]# chmod 777 /mnt/

也可以针对组编辑配额

 xfs_quota -x -c 'limit -g bsoft:30M bhard:50M isft:3 ihard:5 组名' /挂载目录

3、切换用户,生成块文件进行

root@localhost srv]# su - hou
 [hou@localhost ~]$ cd /mnt/
 [hou@localhost mnt]$ dd if=/dev/zero of=./f1 bs=55M count=1
 dd: 写入'./f1' 出错: 超出磁盘限额
 记录了1+0 的读入
 记录了0+0 的写出
 50135040 bytes (50 MB, 48 MiB) copied, 0.619865 s, 80.9 MB/s
 [hou@localhost mnt]$ ls -lh
 总用量 48M
 -rw-rw-r--. 1 hou hou 48M 5月  24 03:15 f1
 [hou@localhost mnt]$ for i in {1..10};do touch f$i;done
 touch: 无法创建 'f6': 超出磁盘限额
 touch: 无法创建 'f7': 超出磁盘限额
 touch: 无法创建 'f8': 超出磁盘限额
 touch: 无法创建 'f9': 超出磁盘限额
 touch: 无法创建 'f10': 超出磁盘限额
 [hou@localhost mnt]$ ls -lh
 总用量 48M
 -rw-rw-r--. 1 hou hou 48M 5月  24 03:16 f1
 -rw-rw-r--. 1 hou hou   0 5月  24 03:16 f2
 -rw-rw-r--. 1 hou hou   0 5月  24 03:16 f3
 -rw-rw-r--. 1 hou hou   0 5月  24 03:16 f4
 -rw-rw-r--. 1 hou hou   0 5月  24 03:16 f5

3.2、ext4配额(了解)(对普通用户生效)

1、挂载

mount -o defaults,usrquota,grpquota /挂载磁盘 /挂载点
 [root@localhost ~]# mount -o usrquota,grpquota /dev/c2505/c2505_lv2 /srv/
 [root@localhost ~]# mount
 /dev/mapper/c2505-c2505_lv2 on /srv type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota)

永久挂载参数如下:

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

2、生成配额文件

quotacheck /挂载点
 [root@localhost ~]# quotacheck /dev/c2505/c2505_lv2

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

quotaon -ugv /挂载点
 [root@localhost ~]# quotaon -ugv /dev/c2505/c2505_lv2
 quotaon: cannot find /srv/aquota.group on /dev/mapper/c2505-c2505_lv2 [/srv]
 /dev/mapper/c2505-c2505_lv2 [/srv]: user quotas turned on
 [root@localhost ~]# cd /srv/
 [root@localhost srv]# ls
 aquota.user  lost+found

4、针对用户配额(普通用户)

edquota -u 用户名
 blocks:块的配额  (容量)
 soft:软限额,用于监视,超出的限额数量
 hard:硬限额,不允许超出
 inodes节点的配额  (文件数)
 soft
 hard
 [root@localhost srv]# edquota -u hou
 [root@localhost srv]# su - hou
 [hou@localhost ~]$ cd /srv/

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

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

/dev/sdd1 0 30M 50M 0 8 10
 Disk quotas for user hou (uid 1000):
   Filesystem                   blocks       soft       hard     inodes     soft     hard
   /dev/mapper/c2505-c2505_lv2      20480      10M      20M         20       10       20
6、设置生成文件

 #生成配额文件f1,大小25M,数量1
 [hou@localhost srv]$ dd if=/dev/zero of=./f1 bs=25M count=1
 dm-4: warning, user block quota exceeded.
 dm-4: write failed, user block limit reached.
 dd: 写入'./f1' 出错: 超出磁盘限额
 记录了1+0 的读入
 记录了0+0 的写出
 20971520 bytes (21 MB, 20 MiB) copied, 0.131747 s, 159 MB/s
 配置文件的时候限额20M,生成为文件大小为25M,超出磁盘限额
 ​
 #用for脚本生成f1-f20的文件 并统计查看
 [hou@localhost srv]$ for i in {1..20};do touch f$i;done
 dm-4: warning, user file quota exceeded.
 [hou@localhost srv]$ ls -lh
 总用量 21M
 -rw-------. 1 root root 7.0K 5月  23 23:37 aquota.user
 -rw-rw-r--. 1 hou  hou   20M 5月  24 02:24 f1
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f10
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f11
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f12
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f13
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f14
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f15
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f16
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f17
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f18
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f19
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f2
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f20
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f3
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f4
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f5
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f6
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f7
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f8
 -rw-rw-r--. 1 hou  hou     0 5月  24 02:24 f9
 drwx------. 2 root root  16K 5月  22 20:31 lost+found
 [hou@localhost srv]$ ls -lh | wc -l
 23
 #生成f21-f25的文件,出现错误  超出磁盘限额
 [hou@localhost srv]$ for i in {21..25};do touch f$i;done 
 dm-4: write failed, user file limit reached.
 touch: 无法创建 'f21': 超出磁盘限额
 touch: 无法创建 'f22': 超出磁盘限额
 touch: 无法创建 'f23': 超出磁盘限额
 touch: 无法创建 'f24': 超出磁盘限额
 touch: 无法创建 'f25': 超出磁盘限额

六、磁盘检测与修复

1、fsck命令

fsck - 检查并修复Linux文件系统(可能会出现不成功)

语法:

 fsck [ -sACVRTNP ] [ -t fstype ] [filesys ... ] [--] [ fs-specific-options ]

选项:

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

案例:

fsck.ext4 -y /dev/sdb4

2、xfs_repair命令

修复XFS文件系统的工具

语法:

 xfs_repair [options] device

选项:

选项作用

案例:

 xfs_repair -n -v /dev/sdb1

3、badblocks命令

badblocks - 查询设备的坏区块

语法:

 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

4、磁盘检查

见文件《smartctl命令详解》

七、文件系统备份与恢复

1、xfsdump命令

备份等级:

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)查看已备份的文件系统:xfsdump -I(大写i)

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

注意:

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

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

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

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

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

2、xfsrestore命令

语法:

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

选项:

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

案例:

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

3、用dd命令进行分区表备份

案例

#先卸载挂载点
 [root@localhost ~]# umount /mnt
 #用dd备份
 [root@localhost ~]# dd if=/dev/c2505/c2505_lv1 of=./lv1.txt bs=512 count=1
 记录了1+0 的读入
 记录了1+0 的写出
 512 bytes copied, 0.00437003 s, 117 kB/s
 [root@localhost ~]# cat lv1.txt
 XFSB�•5�F���<���
 ��
                 @6�����d�•��������J[root@localhost ~]# Wind^C
 #损坏文件 进行备份还原
 [root@localhost ~]# dd if=/dev/zero of=/dev/c2505/c2505_lv1 bs=512 count=1
 记录了1+0 的读入
 记录了1+0 的写出
 512 bytes copied, 0.00296118 s, 173 kB/s
 [root@localhost ~]# mount /dev/c2505/c2505_lv1 /mnt/
 mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mapper/c2505-c2505_lv1, missing codepage or helper program, or other error.
 ​
 #还原文件,重新挂载
 [root@localhost ~]# dd if=./lv1.txt of=/dev/c2505/c2505_lv1
 记录了1+0 的读入
 记录了1+0 的写出
 512 bytes copied, 0.00252881 s, 202 kB/s
 [root@localhost ~]# mount /dev/c2505/c2505_lv1 /mnt/

附录: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: 查看XFS文件系统的日志内容
 xfs_mkfile: 创建 XFS 文件
 xfs_info: 显示文件系统的详细信息
 xfs_ncheck: 根据 inode 编号反向查找文件或目录的路径
 xfs_rtcp: XFS 实时复制命令
 xfs_freeze: 暂停/恢复 XFS 文件系统访问
 xfs_io: 调试 XFS 文件系统 I/O 路径

八、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、付费专栏及课程。

余额充值