2025年6月03周

1.基础存储概念与设备类型

1.1存储介质类型

  • 机械硬盘(HDD - Hard Disk Drive):传统普通硬盘,组成部分有盘片、磁头、盘片转轴及控制电机、磁头控制器、数据转换器、接口、缓存等 。盘片装在旋转转轴,盘片平行,存储面有磁头,磁头间距极小,联在磁头控制器,可沿半径运动,配合盘片高速旋转(几千转 / 分钟)读写数据,靠磁头电磁流改变极性存储和读取数据,为精密设备,进入空气需过滤。
  • 固态硬盘(SSD - Solid State Drive):用固态电子存储芯片阵列制成,由控制单元和存储单元(FLASH 芯片、DRAM 芯片 )组成,接口规范、功能、使用方法与普通硬盘相同,产品外形和尺寸也一致。
  • 混合硬盘(SSHD):结合 HDD 的容量和 SSD 的速度,通过小容量闪存缓存常用数据,性价比折中。
  1. 存储容量单位
  • 二进制单位(计算机底层计算):

    plaintext

1 Byte(字节)= 8 bit(位)
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB


- 十进制单位(厂商标注):
厂商常以 1000 为进制标注容量(如 1TB=1000GB),导致系统显示容量小于标称值(1TB 硬盘实际系统显示约 931GB)。

| 术语 | 英文                               | 描述                                                         |
| ---- | ---------------------------------- | ------------------------------------------------------------ |
| 磁头 | head                               | 一个盘面对应一个磁头                                         |
| 磁道 | track                              | 盘面上的每一圈就是一个磁道                                   |
| 扇区 | sector                             | 把每个磁道按 512bytes 大小再进行划分,这就是扇区,每个磁道上的扇区数量是不一样的 |
| 柱面 | cylinder                           | 磁头移动的时候,是一起移动的,如果是 6 个盘面,则 6 个磁头对应的磁道是一致的,这就是柱面 |
| 分区 | Partition                          | 硬盘上逻辑上独立的空间,用于存储数据和安装操作系统。包括主分区、扩展分区和逻辑分区。主分区和逻辑分区都可以用于存储数据和安装操作系统;扩展分区则是一个指向下一个分区的指针,用于管理多个逻辑分区 |
| NVMe | Non - Volatile Memory Express      | 一种专门用于访问固态硬盘(SSD)和其他非易失性内存设备的通信协议和接口规范,提供比传统存储接口更快的性能,广泛应用于现代计算系统中 |
| IOPS | Input/Output Operations Per Second | 每秒输入 / 输出操作次数,是衡量硬盘性能的重要指标之一。对于大量小数据量的随机读写应用,IOPS 比带宽更为重要 |
| 带宽 | Bandwidth                          | 硬盘数据传输的速率,通常以 MB/s 或 GB/s 为单位表示。对于大块顺序读写的应用,带宽是衡量硬盘性能的关键因素 |

## 1.2硬件接口与协议
1. 接口类型

| 类型     | 传输速度       | 适用设备     | 特点                                                         |
| -------- | -------------- | ------------ | ------------------------------------------------------------ |
| SATA III | 600MB/s        | HDD/SSD      | 主流机械硬盘接口,部分入门 SSD 也使用,兼容性强但速度受限。  |
| NVMe     | 最高 7000MB/s+ | 高端 SSD     | 基于 PCIe 通道(如 PCIe 4.0 x4),支持多队列并行读写,适合高性能场景。 |
| SAS      | 22.5Gbps       | 企业级 HDD   | 支持热插拔和多设备连接,用于数据中心存储阵列。               |
| M.2      | 取决于协议     | 主板内置 SSD | 物理接口,可支持 SATA 或 NVMe 协议,体积小巧,常见于笔记本和主板。 |

2. 存储协议

- SCSI(小型计算机系统接口):企业级存储标准,支持多设备管理和热插拔,衍生出 SAS 协议。
- ATA/ATAPI:传统 IDE 接口的演进,分为 PATA(并行)和 SATA(串行),后者目前主流。
- NVMe-oF:将 NVMe 协议扩展到网络存储,通过 RDMA 等技术实现低延迟远程存储访问。

| 设备类型                  | 设备文件命名示例                  | 备注 |
| ------------------------- | --------------------------------- | ---- |
| SAS,SATA,SCSI,IDE,USB | /dev/sda;/dev/sdb;/dev/sdc;……  |      |
| nvme 协议硬盘             | /dev/nvme0n1;/dev/nvme0n2;……    |      |
| 虚拟磁盘(虚拟环境下)    | /dev/vda;/dev/vdb;/dev/xvda;…… |      |

接口速度对比

| 接口        | 理论带宽 | 实际持续读写(典型值) |
| ----------- | -------- | ---------------------- |
| SATA III    | 600MB/s  | 500MB/s(SSD)         |
| PCIe 3.0 x4 | 8GB/s    | 3500MB/s(NVMe SSD)   |
| PCIe 4.0 x4 | 16GB/s   | 7000MB/s(高端 NVMe)  |

## 1.3磁盘管理与技术

1. 分区与文件系统
- 分区:将物理磁盘划分为多个逻辑区域(如 C 盘、D 盘),用于隔离数据或安装多系统。
- 文件系统:定义数据在磁盘上的组织方式:
- NTFS(Windows):支持大文件、权限管理和日志功能,但在 Linux 中读写效率较低。
- EXT4(Linux):高性能日志文件系统,支持超大文件和分区,稳定性强。
- XFS(Linux):专为大规模数据设计,支持超大文件(单文件最大 16EB )和分区(最大 8EB ),元数据操作高效,并行 I/O 性能出色,日志模式灵活(支持实时 / 延迟日志 )
- FAT32:兼容性强,但不支持 4GB 以上文件,逐渐被 exFAT 取代(如 U 盘常用)。
- APFS(macOS):针对 SSD 优化,支持快照、空间共享和加密。

2. RAID(磁盘阵列)技术通过多块磁盘组合提升性能或可靠性:
- RAID 0:条带化(数据分块存储),性能翻倍但无冗余,一块磁盘损坏数据全失。
- RAID 1:镜像(数据完全复制),容量减半但可靠性高,常用于系统盘。
- RAID 5:分布式奇偶校验(至少 3 块盘),允许单盘损坏,兼顾性能和冗余。
- RAID 10:RAID 1+RAID 0 的组合,先镜像再条带化,性能和可靠性最佳但成本高。

# 2.MBR&GPT

MBR(Master Boot Record,主引导记录)和 GPT(GUID Partition Table,全局唯一标识分区表)是两种不同的磁盘分区表结构,它们在多个方面存在区别,具体如下:

## 2.1分区数量限制

- MBR:最多只能划分 4 个主分区,或者 3 个主分区和 1 个扩展分区(扩展分区里可划分多个逻辑分区)。这是因为 MBR 分区表的空间有限,其中记录分区信息的区域只有 64 字节,最多能容纳 4 个主分区记录。
- GPT:理论上对分区数量没有严格限制,Windows 系统下最多支持 128 个分区,Linux 下限制主要取决于操作系统和文件系统,且每个分区都有唯一的 GUID 标识。

## 2.2磁盘容量支持

- MBR:最大支持 2TB 的磁盘容量。由于 MBR 使用 32 位来记录磁盘扇区地址,按每个扇区 512 字节计算,其可寻址范围最大约为 2TB(2^32 * 512 字节 = 2199023255040 字节 ≈ 2TB ),超过这个容量的部分无法被 MBR 分区表有效管理 。
- GPT:支持的磁盘容量远远超过 2TB,最大可达 9.4ZB(zettabytes,1ZB = 1024^7 字节 ),能满足未来很长时间内对大容量存储设备的需求。

## 2.3分区表的备份与恢复

- MBR:没有内置的备份机制,只有位于 MBR 末尾的校验和字段用于简单检测 MBR 是否被破坏。一旦 MBR 分区表损坏,恢复相对复杂,通常需要借助专门的分区恢复工具,并且数据丢失风险较高。
- GPT:在磁盘的首尾两端都存储了分区表,并且有循环冗余校验码(CRC)检测分区表的完整性,其中一端的分区表损坏时,可通过另一端的备份来恢复,数据安全性更高。

## 2.4引导方式

- MBR:采用 BIOS(Basic Input Output System,基本输入输出系统)引导方式,计算机启动时,BIOS 会读取 MBR 中的引导代码,然后由引导代码加载操作系统。但 BIOS 的局限性使得它在启动速度和硬件支持方面存在一定的不足。
- GPT:通常与 UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)配合使用,UEFI 能够提供更强大的功能,比如图形化界面、支持大于 2TB 的磁盘直接引导、更快的启动速度等。不过,GPT 分区也可以在支持 UEFI 模拟 BIOS 环境的计算机上使用 BIOS 引导。

## 2.5数据结构与存储方式

- MBR:结构相对简单,前 446 字节是引导程序,紧接着 64 字节是分区表,最后 2 字节是签名(一般为 0x55AA )。分区表中的每个分区记录包含分区的起始扇区、结束扇区、分区类型等信息。
- GPT:使用一种更为复杂的数据结构,包含了分区表头、分区表项数组等部分。分区表头存储了 GPT 的相关参数,如分区表的起始位置、分区表项的大小和数量等;每个分区表项则记录了该分区的 GUID、起始和结束 LBA(Logical Block Address,逻辑块地址 )、分区属性和名称等详细信息。

## 2.6兼容性

- MBR:在较老的操作系统(如 Windows 95/98/Me 等)以及一些对磁盘管理功能要求不高的设备中兼容性较好,并且在一些特定的嵌入式系统和工业控制计算机中仍有应用。但在现代大容量磁盘和 UEFI 环境下,存在诸多限制。
- GPT:随着 UEFI 逐渐成为主流的固件接口,GPT 在新的计算机系统和操作系统(如 Windows Vista 及以后版本、Linux 2.6.29 及以后版本、macOS 10.6 及以后版本 )中得到广泛支持。不过,在一些非常老旧的计算机硬件或操作系统中,可能无法识别 GPT 分区的磁盘。

## 2.7备份mbr分区表

```bash
# 备份磁盘分区表
# skip表示跳过源
dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446

# 破坏分区表
# seek表示跳过目标
dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446

# 还原分区表
dd if=/data/dpt.img of=/dev/sda bs=1 count=64 seek=446

3.分区和文件系统管理

虚拟机添加新磁盘之后不显示解决办法

for i in {1..32};do echo "- - -" > /sys/class/scsi_host/host$i/scan;done

虚拟机分区之后内存不同步的解决办法

# centos7/8
partprobe

# centos6及之前
# 新增分区操作
partx -a /dev/DEVICE ,简单新增分区,/dev/DEVICE 需替换为实际磁盘设备名(如 /dev/sda )
kpartx -a /dev/DEVICE -f ,带 force(强制)参数的新增分区方式,-f 表示强制,kpartx 常与 partx 关联用于处理分区映射
# 删除分区操作
命令格式:partx -d --nr M-N /dev/DEVICE ,-d 表示删除,--nr M-N 指定要删除的分区编号范围(如 6-8 ),/dev/DEVICE 为目标磁盘设备名

3.1分区管理

3.1.1fdisk 分区示例(以创建 MBR 分区表为例)

常见分区类型:

Aliases:
   linux          - 83
   swap           - 82
   raid           - FD
   lvm            - 8E

假设我们有一块新磁盘/dev/sdb需要进行分区,操作步骤如下:

  1. 查看磁盘信息

在进行分区操作之前,先使用lsblk命令查看当前系统的磁盘和分区情况,确认目标磁盘。

lsblk

该命令会列出系统中所有的块设备,找到你要分区的磁盘,如/dev/sdb ,确保它没有重要数据,因为分区操作会清除磁盘上原有的数据。

  1. 进入 fdisk 交互模式

使用sudo fdisk /dev/sdb命令进入fdisk/dev/sdb磁盘的交互操作界面。

sudo fdisk /dev/sdb

进入后,会显示一些帮助信息,同时命令行提示符变为Command (m for help):,表示可以输入命令进行操作。

  1. 创建分区表

如果磁盘是全新的,没有分区表,可以使用o命令创建一个新的 DOS(MBR)分区表。

Command (m for help): o
Created a new DOS disklabel with disk identifier 0x[随机十六进制数].
  1. 创建主分区

输入n命令创建新分区,然后按照提示选择分区类型(默认是主分区,直接回车即可 ),指定分区号(默认从 1 开始,直接回车 ),设置起始扇区(默认是第一个可用扇区,直接回车 ),最后设置结束扇区。如果要创建一个占满剩余所有空间的分区,直接回车即可;如果要指定大小,可以输入+大小单位,如+10G表示创建一个 10GB 大小的分区。

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-20971519, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): 
Created a new partition 1 of type 'Linux' and of size 10 GiB.
  1. 设置分区类型(可选)

如果要设置分区类型,如将分区设置为 Linux swap 分区,先输入p命令查看分区情况,找到要设置类型的分区号,然后输入t命令,接着输入分区号,最后输入对应的分区类型代码(如 Linux swap 分区的代码是 82 )。

Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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: dos
Disk identifier: 0x[随机十六进制数]

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 20971519 20969472  10G 83 Linux

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'
  1. 保存分区表

完成分区创建和设置后,输入w命令保存分区表并退出fdisk

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

3.1.2gdisk 分区示例(以创建 GPT 分区表为例)

常见分区类型:

8200 Linux swap
8300 Linux filesystem
8e00 Linux LVM
fd00 Linux RAID

同样假设要对/dev/sdb磁盘进行分区:

  1. 查看磁盘信息

使用lsblk命令查看磁盘情况,确认目标磁盘。

lsblk
  1. 进入 gdisk 交互模式

使用sudo gdisk /dev/sdb命令进入gdisk/dev/sdb磁盘的交互操作界面。

sudo gdisk /dev/sdb

进入后,会显示磁盘的相关信息,同时命令行提示符变为Command (? for help):

  1. 创建 GPT 分区表

如果磁盘没有 GPT 分区表,输入o命令创建一个新的 GPT 分区表。

Command (? for help): o
This option deletes all partitions on the disk and creates a new protective MBR.
Proceed? (Y/N): Y

输入Y确认创建。

  1. 创建分区

输入n命令创建新分区,按照提示输入分区号(默认从 1 开始,直接回车 ),设置起始扇区(默认是第一个可用扇区,直接回车 ),结束扇区(如果要创建占满剩余空间的分区,直接回车;也可以指定大小,如+5G表示创建 5GB 大小的分区 ),最后输入分区的名称(可自定义 )。

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-20971519, default = 34) or {+-}size{KMGTP}: 
Last sector (34-20971519, default = 20971519) or {+-}size{KMGTP}: +5G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'
Partition name (optional): my_partition1
  1. 保存分区表

输入w命令保存分区表并退出gdisk

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

3.2文件系统管理

3.2.1创建文件系统(win上俗称格式化分区)

使用 lsblk 命令查看系统中的磁盘和分区信息,确认目标分区:

lsblk

输出类似如下内容,确认 /dev/sdb1 是你要操作的分区:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   500G  0 disk 
├─sda1   8:1    0     1G  0 part /boot
└─sda2   8:2    0   499G  0 part 
  └─vg0-lv0 253:0    0   499G  0 lvm  /
sdb      8:16   0   100G  0 disk 
└─sdb1   8:17   0    10G  0 part 

创建 ext4 文件系统:

sudo mkfs -t ext4 /dev/sdb1

-t ext4 表示指定创建的文件系统类型为 ext4 ,执行命令后,会看到类似以下的输出信息,表示文件系统创建成功:

mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 12345678-1234-1234-1234-1234567890ab
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done 

3.2.2创建swap分区

1.创建交换分区方式1(基于正常磁盘分区):

sudo mkswap /dev/sdb2

执行该命令后,会输出类似以下内容,表示交换分区创建成功:

Setting up swapspace version 1, size = 9.9 GiB (1062240256 bytes)
no label, UUID=567890ab-1234-1234-1234-1234567890cd

启用交换分区(可选,若希望立即使用该交换分区):使用 swapon 命令启用刚刚创建的交换分区:

sudo swapon /dev/sdb2

查看交换分区状态:
使用 swapon -s 命令查看系统中已启用的交换分区情况,会看到类似如下输出,确认 /dev/sdb2 已成功启用:

Filename				Type		Size	Used	Priority
/dev/sdb2                               partition	10379772	0	-2

2.创建交换分区方式2(基于块设备):

# 创建块设备
dd if=/dev/zero of=/swapfile bs=1G count=2
# 创建swap
mkswap swapfile
blkid swapfile
# 挂载的时候不要写UUID,因为开机不知道从哪里寻找此UUID设备
/swapfile swap swap defaults 0 0

swapon -a

设置开机自动挂载交换分区(可选,若希望系统每次开机时自动启用该交换分区):编辑 /etc/fstab 文件,在文件末尾添加一行:

# 添加自动挂载配置
/dev/sdb2 swap swap defaults 0 0
mount -a 

# 禁用swap分区步骤
1.fstab中swap行注释掉
2.swapoff -a #禁用所有swap

3.2.3mount/umount

  1. mount 挂载分区示例

假设我们有一个新的分区/dev/sdb1,格式化为ext4文件系统,要将其挂载到/mnt/data目录下。

步骤 1:创建挂载点
在挂载分区之前,需要先创建一个空目录作为挂载点:

sudo mkdir /mnt/data

步骤 2:挂载分区
使用mount命令进行挂载:

# mount 分区 挂载点
sudo mount /dev/sdb1 /mnt/data

# 重新挂载分区
sudo mount -o remount,rw /

此时,/dev/sdb1分区的内容就可以通过/mnt/data目录来访问了。

步骤 3:验证挂载
可以使用df -h命令查看挂载情况,输出类似如下内容,确认/dev/sdb1已经挂载到/mnt/data

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        49G  3.2G   43G   7% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           394M     0  394M   0% /dev/shm
tmpfs           394M  8.6M  386M   3% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           394M     0  394M   0% /sys/fs/cgroup
/dev/sda1       976M  224M  672M  25% /boot
/dev/sdb1        99G   61M   94G   1% /mnt/data
  1. umount 卸载分区示例

要卸载刚才挂载的/dev/sdb1分区,需要确保没有任何进程正在访问该分区。

方法 1:通过设备名卸载

sudo umount /dev/sdb1

方法 2:通过挂载点卸载

sudo umount /mnt/data

如果提示 “device is busy”,表示有进程正在使用该分区,可以使用lsof命令查找相关进程并关闭,例如:

sudo lsof /mnt/data

然后关闭相关进程,再尝试卸载。

  1. /etc/fstab 文件示例

/etc/fstab文件包含了系统开机时自动挂载的分区信息,每行代表一个挂载项,格式为:

<文件系统> <挂载点> <文件系统类型> <挂载选项> <转储频率> <文件系统检查顺序>

以下是一个示例/etc/fstab文件内容:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda1       /boot           ext4    defaults        0       2
UUID=12345678-1234-1234-1234-1234567890ab /       ext4    errors=remount-ro 0       1
/dev/sdb1       /mnt/data       ext4    defaults        0       2
tmpfs           /dev/shm        tmpfs   defaults        0       0
devpts          /dev/pts        devpts  gid=5,mode=620  0       0
sysfs           /sys            sysfs   defaults        0       0
proc            /proc           proc    defaults        0       0
  • 第一列:可以是设备名(如/dev/sda1)或 UUID(如UUID=12345678-1234-1234-1234-1234567890ab)。使用 UUID 更稳定,因为设备名可能会因硬件变动而改变。
  • 第二列:挂载点,即分区要挂载到的目录。
  • 第三列:文件系统类型,如ext4tmpfs等。
  • 第四列:挂载选项,defaults表示使用默认选项,还可以设置其他选项,如ro(只读)、noauto(开机不自动挂载)等。
  • 第五列:转储频率,用于dump命令,一般设为 0 表示不进行转储。
  • 第六列:文件系统检查顺序,根分区设为 1,其他分区设为 2,非本地文件系统设为 0。

4.raid技术

RAID 0(条带化,无冗余)

  • 工作原理:RAID 0 将数据条带化(Stripping)分布在多个磁盘上,简单来说就是把数据分割成多个小块,然后依次写入到不同的磁盘中。这种方式可以并行地进行读写操作,从而显著提高数据传输速度。但它没有数据冗余功能,如果其中一个磁盘出现故障,所有数据都会丢失。

  • 优点:读写性能高,成本相对较低。

  • 缺点:可靠性差,任何一个磁盘故障都会导致数据丢失。

    磁盘1: [D1][D3][D5]
    磁盘2: [D2][D4][D6]
    -------------------
    数据分布:数据分块交叉存储,并行读写
    

RAID 1(镜像,全冗余)

  • 工作原理:RAID 1 通过磁盘镜像(Mirroring)的方式工作,它会在多个磁盘上创建完全相同的数据副本。例如,使用两个磁盘组成 RAID 1,写入的数据会同时写入到这两个磁盘上。当其中一个磁盘出现故障时,可以从另一个磁盘上恢复数据,保证数据的安全性。
  • 优点:数据冗余性高,可靠性强。
  • 缺点:磁盘利用率低,成本较高。
磁盘1: [D1][D2][D3]
磁盘2: [D1][D2][D3]
-------------------
数据分布:完全镜像,写入时同步复制

RAID 5(条带 + 奇偶校验)

  • 工作原理:RAID 5 采用条带化和奇偶校验(Parity)相结合的方式。它将数据条带化分布在多个磁盘上,同时在每个条带中计算并存储奇偶校验信息。奇偶校验信息分布在所有磁盘上,而不是集中在一个磁盘上。当一个磁盘出现故障时,可以利用其他磁盘上的数据和奇偶校验信息来重建故障磁盘上的数据。
  • 优点:具有一定的数据冗余性,读写性能较好,磁盘利用率较高(n - 1,n 为磁盘数量)。
  • 缺点:如果同时有两个磁盘出现故障,数据可能会丢失。
磁盘1: [D1][D3][D5][P1]
磁盘2: [D2][D4][P2][D6]
磁盘3: [P3][D7][D8][D9]
-----------------------
数据分布:D为数据块,P为奇偶校验块(分布在不同磁盘)

RAID 10(先镜像后条带)

  • 工作原理:RAID 10 是 RAID 1 和 RAID 0 的组合,也称为 RAID 1 + 0。它先将磁盘两两组成 RAID 1 进行镜像,然后再将这些 RAID 1 组组成 RAID 0 进行条带化。这种方式既具备 RAID 1 的数据冗余性,又具备 RAID 0 的高性能读写能力。
  • 优点:数据安全性高,读写性能好。
  • 缺点:磁盘利用率低,成本较高。
组1: 磁盘1 [D1][D3]  磁盘2 [D1][D3]
组2: 磁盘3 [D2][D4]  磁盘4 [D2][D4]
-------------------------------
数据分布:先两两镜像,再跨组条带化

RAID 01(先条带后镜像)

  • 工作原理:RAID 01 是 RAID 0 和 RAID 1 的组合,与 RAID 10 不同的是,它先将磁盘组成 RAID 0 进行条带化,然后再将这些 RAID 0 组组成 RAID 1 进行镜像。在性能上与 RAID 10 类似,但在容错能力上相对较弱,因为只要 RAID 0 组中的一个磁盘出现故障,整个 RAID 0 组就会失效。
  • 优点:读写性能高。
  • 缺点:容错能力相对较弱,磁盘利用率低,成本较高。
组1: 磁盘1 [D1][D3]  磁盘2 [D2][D4]
组2: 磁盘3 [D1][D3]  磁盘4 [D2][D4]
-------------------------------
数据分布:先跨盘条带,再跨组镜像

RAID 级别对比表

RAID 类型利用率冗余性性能特点最少硬盘数
RAID 0100%无冗余(单盘故障数据丢失)读写性能最高(并行条带化)2 块
RAID 150%全冗余(镜像,允许单盘故障)读性能高,写性能受镜像同步影响2 块
RAID 5(n-1)/n(n≥3)奇偶校验冗余(允许单盘故障)读写性能均衡(校验计算开销)3 块
RAID 1050%双重冗余(允许每组单盘故障)读写性能优异(条带 + 镜像组合)4 块
RAID 0150%镜像冗余(允许单组故障)读性能高,写性能受条带 + 镜像双重影响4 块

5.LVM技术

5.1基本原理

LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 系统中用于管理磁盘分区的一种机制,其核心作用是在硬盘分区和文件系统之间添加一个逻辑层, 为文件系统屏蔽了下层的磁盘分区布局,让用户可以更灵活地管理磁盘空间。以下是 LVM 的工作原理:

物理卷(Physical Volume,PV)

物理卷是 LVM 的基本组成部分,它可以是一块硬盘(如/dev/sdb ),也可以是硬盘上的一个分区(如/dev/sda1 )。通过pvcreate命令可以将物理磁盘或分区初始化为物理卷,这一过程会在磁盘或分区上写入 LVM 元数据,用于标识该设备已被 LVM 管理。
例如,将/dev/sdb初始化为物理卷:

# 设备可以是磁盘也可以是分区
sudo pvcreate /dev/sdb /dev/sdc

# 创建完成可以用pvs或pvdisplay查看状态
pvs
pvdisplay /dev/sdb

卷组(Volume Group,VG)

卷组是由一个或多个物理卷组成的存储池。创建卷组时,LVM 会将这些物理卷的空间整合在一起,形成一个统一的存储资源池。通过vgcreate命令可以创建卷组,比如要创建名为myvg的卷组,并将/dev/sdb添加进去:

# 创建卷组,默认PE大小是4M,也可以-s 指定大小
sudo vgcreate myvg0 /dev/sdb /dev/sdc

# 创建完成可以用pvs或pvdisplay查看状态
vgs
vgdisplay myvg0 

卷组会记录各个物理卷的空间使用情况,以及物理区域(PE,Physical Extent)的分配信息。

物理区域(Physical Extent,PE)

物理区域是物理卷中可用于分配的最小存储单元,是 LVM 进行空间管理的基本单元。每个物理卷被划分为多个大小相等的物理区域(默认大小是 4MB )。LVM 通过管理物理区域的分配和回收,来实现对卷组空间的灵活管理。

逻辑卷(Logical Volume,LV)

逻辑卷是从卷组中划分出来的逻辑存储单元,用户可以在逻辑卷上创建文件系统。通过lvcreate命令可以从卷组中创建逻辑卷,比如在myvg卷组中创建一个名为mylv,大小为 10GB 的逻辑卷:

# 使用-L指定创建的逻辑卷空间大小(推荐)
# -l后面跟需要多少个PE
sudo lvcreate -L 10G -n mylv0 myvg0

这里的-L指定逻辑卷的大小,-n指定逻辑卷的名称。逻辑卷的大小由若干个物理区域组成,LVM 会在卷组中为逻辑卷分配相应的物理区域。

文件系统创建与挂载

在创建好逻辑卷之后,就可以像对待普通分区一样,在逻辑卷上创建文件系统(如ext4),并挂载到指定的目录进行使用。例如,在mylv逻辑卷上创建ext4文件系统:

sudo mkfs.ext4 /dev/myvg0/mylv0

然后将其挂载到/data目录:

sudo mount /dev/myvg0/mylv0 /data

动态调整

  • 扩容:当逻辑卷空间不足时,可以通过lvextend命令从卷组中获取更多的物理区域来扩展逻辑卷的大小,然后再使用文件系统的扩展工具(如resize2fs用于ext4文件系统 )来调整文件系统的大小,使其可以使用扩展后的逻辑卷空间。
    例如,将mylv逻辑卷扩展 5GB:
sudo lvextend -L +5G /dev/myvg0/mylv0
sudo resize2fs /dev/myvg0/mylv0

# 一步到位方式,部分老系统不支持此命令
# -r 根据文件系统自动的执行扩容,不需要执行扩展文件系统的操作
# +100%FREE指将vg中所有剩余空间全部分配给lv
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
  • 缩容:对于不再需要那么大空间的逻辑卷,可以通过lvreduce命令减少逻辑卷的大小,同时也要相应地调整文件系统大小(注意,部分文件系统在缩容时需要格外谨慎,可能需要卸载文件系统 ,xfs文件系统仅支持扩容,不支持缩容)。
# 取消挂载
umount /dev/VG_NAME/LV_NAME

# 文件系统检测,e2fsck可写成fsck
e2fsck -f /dev/VG_NAME/LV_NAME

# 缩减文件系统到指定大小
resize2fs /dev/VG_NAME/LV_NAME N[mMgGtT]

# 缩减逻辑卷
lvreduce -L [-] N[mMgGtT] /dev/VG_NAME/LV_NAME

# 重新挂载
mount /dev/VG_NAME/LV_NAME mountpoint

数据迁移与存储池管理

LVM 还支持将物理卷从一个卷组移动到另一个卷组,或者将物理卷从卷组中移除等操作,方便进行数据迁移和存储池的优化管理。例如,将一个物理卷从卷组中移除:

# 先查看需要拆除或迁移的磁盘使用情况
# 如果要拆除磁盘需要现将PE占用块都释放
pvdisplay
Total PE 2559	# 总块数
Free PE 2303	# 空余块数

# vg中移除磁盘/dev/sdb
sudo vgreduce myvg0 /dev/sdb

# pv中删除磁盘
pvremove /dev/sdc

5.2操作演示

前期准备

前期准备:添加两块新硬盘:2G、4G

在这里插入图片描述

# 由于新加硬盘在虚拟机上存在问题,需要手动识别
root@ubuntu24-13:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  200G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  198G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0   99G  0 lvm  /
sr0                        11:0    1    3G  0 rom  

# 循环扫描硬件
root@ubuntu24-13:~# for i in {1..32};do echo "- - -" > /sys/class/scsi_host/host$i/scan;done

# 出现新硬盘
root@ubuntu24-13:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  200G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  198G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0   99G  0 lvm  /
sdb                         8:16   0    2G  0 disk 
sdc                         8:32   0    4G  0 disk 
sr0                        11:0    1    3G  0 rom  

进行磁盘分区及类型转换

# 分配所有空间,并转换为LVM格式
Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: VMware Virtual S
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: dos
Disk identifier: 0x8829e5cc

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4194303 4192256   2G 8e Linux LVM

# 最后效果
root@ubuntu24-13:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  200G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  198G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0   99G  0 lvm  /
sdb                         8:16   0    2G  0 disk 
└─sdb1                      8:17   0    2G  0 part 
sdc                         8:32   0    4G  0 disk 
└─sdc1                      8:33   0    4G  0 part 
sr0                        11:0    1    3G  0 rom  

5.2.1创建lvs

创建pv

# 创建pv
root@ubuntu24-13:~# pvs
  PV         VG        Fmt  Attr PSize    PFree 
  /dev/sda3  ubuntu-vg lvm2 a--  <198.00g 99.00g
root@ubuntu24-13:~# pvcreate /dev/sd{b1,c1}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
root@ubuntu24-13:~# pvs
  PV         VG        Fmt  Attr PSize    PFree 
  /dev/sda3  ubuntu-vg lvm2 a--  <198.00g 99.00g
  /dev/sdb1            lvm2 ---    <2.00g <2.00g
  /dev/sdc1            lvm2 ---    <4.00g <4.00g

创建vg

# 创建vg0,PE默认大小
root@ubuntu24-13:~# vgcreate vg0 /dev/sd{b1,c1}
  Volume group "vg0" successfully created
root@ubuntu24-13:~# vgs
  VG        #PV #LV #SN Attr   VSize    VFree 
  ubuntu-vg   1   1   0 wz--n- <198.00g 99.00g
  vg0         2   0   0 wz--n-    5.99g  5.99g

创建lv

# 创建lv
root@ubuntu24-13:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <99.00g                                       
  
# 创建lv,使用-L指定大小为5G
root@ubuntu24-13:~# lvcreate -L 5G -n lv0 vg0
  Logical volume "lv0" created.
root@ubuntu24-13:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <99.00g                                                    
  lv0       vg0       -wi-a-----   5.00g 

创建文件系统

# 创建文件系统,ext4
root@ubuntu24-13:~# blkid
/dev/sdb1: UUID="OitIts-GCxq-afos-lWsx-QS1c-0FYN-t0cJwh" TYPE="LVM2_member" PARTUUID="8829e5cc-01"
/dev/sdc1: UUID="GwzvP3-0a9v-wqfc-UZZm-KDPE-sML1-JxWg9h" TYPE="LVM2_member" PARTUUID="c1409050-01"
/dev/sda1: PARTUUID="a71d4f45-3fad-4914-8e90-20ddbfcb333e"

root@ubuntu24-13:~# mkfs.ext4 /dev/vg0/lv0 
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: e1ad545c-346b-4d5b-a943-a5e266cbf084
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@ubuntu24-13:~# blkid
/dev/sdb1: UUID="OitIts-GCxq-afos-lWsx-QS1c-0FYN-t0cJwh" TYPE="LVM2_member" PARTUUID="8829e5cc-01"
/dev/sdc1: UUID="GwzvP3-0a9v-wqfc-UZZm-KDPE-sML1-JxWg9h" TYPE="LVM2_member" PARTUUID="c1409050-01"
/dev/mapper/vg0-lv0: UUID="e1ad545c-346b-4d5b-a943-a5e266cbf084" BLOCK_SIZE="4096" TYPE="ext4"

# 可以手动挂载或/etc/fstab中自动挂载
root@ubuntu24-13:~# mount /dev/vg0/lv0 /mnt
root@ubuntu24-13:~# df -hT
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  387M  1.6M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    97G  7.7G   85G   9% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  192M  1.6G  11% /boot
tmpfs                             tmpfs  387M   12K  387M   1% /run/user/0
/dev/mapper/vg0-lv0               ext4   4.9G   24K  4.6G   1% /mnt

# 复制文件测试
root@ubuntu24-13:~# cp /boot/* /mnt
cp: -r not specified; omitting directory '/boot/grub'
cp: -r not specified; omitting directory '/boot/lost+found'
root@ubuntu24-13:~# ls /mnt
config-6.8.0-60-generic      System.map-6.8.0-60-generic
config-6.8.0-62-generic      System.map-6.8.0-62-generic
initrd.img                   vmlinuz
initrd.img-6.8.0-60-generic  vmlinuz-6.8.0-60-generic
initrd.img-6.8.0-62-generic  vmlinuz-6.8.0-62-generic
initrd.img.old               vmlinuz.old
lost+found

5.2.2扩容及缩容

lvs扩容和缩容

扩容:

# 查看vg是否有可用空间
root@ubuntu24-13:~# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               5.99 GiB
  PE Size               4.00 MiB
  Total PE              1534
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       254 / 1016.00 MiB	# 有可用空间
  VG UUID               9cUULf-ofJg-d7QL-2hJ5-Z9jv-2hWD-0arcUH

# 扩容500M
root@ubuntu24-13:~# lvextend -L +500M /dev/vg0/lv0 
  Size of logical volume vg0/lv0 changed from 5.00 GiB (1280 extents) to <5.49 GiB (1405 extents).
  Logical volume vg0/lv0 successfully resized.
  
# 需要扩展文件系统
root@ubuntu24-13:~# resize2fs /dev/vg0/lv0
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/vg0/lv0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv0 is now 1438720 (4k) blocks long.
# 看到空间一已经扩展
root@ubuntu24-13:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              387M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   97G  7.7G   85G   9% /
tmpfs                              1.9G     0  1.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  192M  1.6G  11% /boot
tmpfs                              387M   12K  387M   1% /run/user/0
/dev/mapper/vg0-lv0                5.4G  352M  4.7G   7% /mnt

缩容:

# 缩容,需要确定空间是否有空间缩容
root@ubuntu24-13:/# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              387M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   97G  7.7G   85G   9% /
tmpfs                              1.9G     0  1.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  192M  1.6G  11% /boot
tmpfs                              387M   12K  387M   1% /run/user/0
root@ubuntu24-13:~# umount /dev/vg0/lv0

# 检测磁盘
root@ubuntu24-13:/# e2fsck -f /dev/vg0/lv0 
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv0: 23/344064 files (21.7% non-contiguous), 133105/1361920 blocks
# 缩减文件系统,先声明
root@ubuntu24-13:/# resize2fs /dev/vg0/lv0 3G
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/vg0/lv0 to 786432 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 786432 (4k) blocks long.
# 缩减空间和上面声明一致
root@ubuntu24-13:/# lvreduce -L 3G /dev/vg0/lv0 
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
  Size of logical volume vg0/lv0 changed from <5.20 GiB (1330 extents) to 3.00 GiB (768 extents).
  Logical volume vg0/lv0 successfully resized.
# 重新挂载设备
root@ubuntu24-13:/# mount /dev/vg0/lv0 /mnt
root@ubuntu24-13:/# cd /mnt/
# 文件还存在
root@ubuntu24-13:/mnt# ll
total 360020
drwxr-xr-x  3 root root     4096 Jun 22 04:33 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root   287574 Jun 22 04:33 config-6.8.0-60-generic
-rw-r--r--  1 root root   287598 Jun 22 04:33 config-6.8.0-62-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old
root@ubuntu24-13:/mnt# 

5.2.3vg扩容和拆除pv设备

新增一块6G硬盘
在这里插入图片描述

# 同样执行分区转换操作
root@ubuntu24-13:/mnt# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  200G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  198G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0   99G  0 lvm  /
sdb                         8:16   0    2G  0 disk 
└─sdb1                      8:17   0    2G  0 part 
sdc                         8:32   0    4G  0 disk 
└─sdc1                      8:33   0    4G  0 part 
  └─vg0-lv0               252:1    0    3G  0 lvm  /mnt
sdd                         8:48   0    6G  0 disk 
└─sdd1                      8:49   0    6G  0 part 
sr0                        11:0    1    3G  0 rom 

# 创建pv
root@ubuntu24-13:/mnt# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created.
root@ubuntu24-13:/mnt# pvs
  PV         VG        Fmt  Attr PSize    PFree   
  /dev/sda3  ubuntu-vg lvm2 a--  <198.00g   99.00g
  /dev/sdb1  vg0       lvm2 a--    <2.00g   <2.00g
  /dev/sdc1  vg0       lvm2 a--    <4.00g 1020.00m
  /dev/sdd1            lvm2 ---    <6.00g   <6.00g
  
# 扩展vg
root@ubuntu24-13:/mnt# vgextend vg0 /dev/sdd1 
  Volume group "vg0" successfully extended
root@ubuntu24-13:/mnt# vgs
  VG        #PV #LV #SN Attr   VSize    VFree 
  ubuntu-vg   1   1   0 wz--n- <198.00g 99.00g
  vg0         3   1   0 wz--n-  <11.99g <8.99g
root@ubuntu24-13:/mnt# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <11.99 GiB
  PE Size               4.00 MiB
  Total PE              3069
  Alloc PE / Size       768 / 3.00 GiB
  Free  PE / Size       2301 / <8.99 GiB	# 可用空间增加了
  VG UUID               9eOI8r-tHIW-uTWk-tRoK-fil6-sjir-dnvl9G
# 扩展lv
root@ubuntu24-13:/mnt# lvextend -L +5G /dev/vg0/lv0 
  Size of logical volume vg0/lv0 changed from 3.00 GiB (768 extents) to 8.00 GiB (2048 extents).
  Logical volume vg0/lv0 successfully resized.
root@ubuntu24-13:/mnt# resize2fs /dev/vg0/lv0 
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/vg0/lv0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv0 is now 2097152 (4k) blocks long.
# 可以看到空间增加了
root@ubuntu24-13:/mnt# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              387M  1.8M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   97G  7.7G   85G   9% /
tmpfs                              1.9G     0  1.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  192M  1.6G  11% /boot
tmpfs                              387M   12K  387M   1% /run/user/0
/dev/mapper/vg0-lv0                7.8G  352M  7.1G   5% /mnt

移除不需要的磁盘(拆除指定PV设备)

# 先进行lv缩容
# 检查磁盘
root@ubuntu24-13:/# e2fsck -f /dev/vg0/lv0 
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv0: 23/524288 files (21.7% non-contiguous), 145054/2097152 blocks
# 声明大小
root@ubuntu24-13:/# resize2fs /dev/vg0/lv0 1G
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/vg0/lv0 to 262144 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 262144 (4k) blocks long.
# 缩容lv
root@ubuntu24-13:/# lvreduce -L 1G /dev/vg0/lv0 
  WARNING: Reducing active logical volume to 1.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
  Size of logical volume vg0/lv0 changed from 8.00 GiB (2048 extents) to 1.00 GiB (256 extents).
  Logical volume vg0/lv0 successfully resized.
# 重新挂载磁盘
root@ubuntu24-13:/# mount /dev/vg0/lv0 /mnt
root@ubuntu24-13:/# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              387M  1.9M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   97G  7.7G   85G   9% /
tmpfs                              1.9G     0  1.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  192M  1.6G  11% /boot
tmpfs                              387M   12K  387M   1% /run/user/0
/dev/mapper/vg0-lv0                932M  352M  520M  41% /mnt
# 检查pv占用情况
# 假设要拆除2块磁盘,sdc1、sdd1
root@ubuntu24-13:/# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  200G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  198G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0   99G  0 lvm  /
sdb                         8:16   0    2G  0 disk 
└─sdb1                      8:17   0    2G  0 part 
sdc                         8:32   0    4G  0 disk 
└─sdc1                      8:33   0    4G  0 part 
  └─vg0-lv0               252:1    0    1G  0 lvm  /mnt
sdd                         8:48   0    6G  0 disk 
└─sdd1                      8:49   0    6G  0 part 
root@ubuntu24-13:/# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              511
  Free PE               511
  Allocated PE          0
  PV UUID               zWG8Ac-Lcq5-V6i0-cs6i-ZmyF-RQMM-ZiKBrk
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               vg0
  PV Size               <4.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               767
  Allocated PE          256
  PV UUID               BDdbBO-N58d-VAWo-fADF-ZrgK-uUmE-HXDd3V
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg0
  PV Size               <6.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1535
  Free PE               1535
  Allocated PE          0
  PV UUID               pETMV7-vwaa-FML3-2SIS-H1Xs-dXmj-zQCoqa
# 转移占用块到其他盘
root@ubuntu24-13:/# pvmove /dev/sdd1
  No data to move for vg0.
root@ubuntu24-13:/# pvmove /dev/sdc1
  /dev/sdc1: Moved: 8.98%
  /dev/sdc1: Moved: 100.00%
root@ubuntu24-13:/# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              511
  Free PE               255
  Allocated PE          256
  PV UUID               zWG8Ac-Lcq5-V6i0-cs6i-ZmyF-RQMM-ZiKBrk
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               vg0
  PV Size               <4.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               1023
  Allocated PE          0
  PV UUID               BDdbBO-N58d-VAWo-fADF-ZrgK-uUmE-HXDd3V
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg0
  PV Size               <6.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1535
  Free PE               1535
  Allocated PE          0
  PV UUID               pETMV7-vwaa-FML3-2SIS-H1Xs-dXmj-zQCoqa
# vg缩容
root@ubuntu24-13:/# vgreduce vg0 /dev/sdd1
  Removed "/dev/sdd1" from volume group "vg0"
root@ubuntu24-13:/# vgreduce vg0 /dev/sdc1
  Removed "/dev/sdc1" from volume group "vg0"
root@ubuntu24-13:/# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              511
  Free PE               255
  Allocated PE          256
  PV UUID               zWG8Ac-Lcq5-V6i0-cs6i-ZmyF-RQMM-ZiKBrk
    
  "/dev/sdc1" is a new physical volume of "<4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               <4.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               BDdbBO-N58d-VAWo-fADF-ZrgK-uUmE-HXDd3V
   
  "/dev/sdd1" is a new physical volume of "<6.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               <6.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pETMV7-vwaa-FML3-2SIS-H1Xs-dXmj-zQCoqa
# 移除需要拆除的磁盘pv
root@ubuntu24-13:/# pvremove /dev/sdc1
  Labels on physical volume "/dev/sdc1" successfully wiped.
root@ubuntu24-13:/# pvremove /dev/sdd1
  Labels on physical volume "/dev/sdd1" successfully wiped.
root@ubuntu24-13:/# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              511
  Free PE               255
  Allocated PE          256
  PV UUID               zWG8Ac-Lcq5-V6i0-cs6i-ZmyF-RQMM-ZiKBrk
   
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               <198.00 GiB / not usable 0   
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              50687
  Free PE               25344
  Allocated PE          25343
  PV UUID               yysibG-a1P5-wvR5-vEUk-wWQx-IPub-4I0m1w

5.2.4快照

# 创建快照
root@ubuntu24-13:/# cd /mnt/
root@ubuntu24-13:/mnt# ll
total 360020
drwxr-xr-x  3 root root     4096 Jun 22 04:33 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root   287574 Jun 22 04:33 config-6.8.0-60-generic
-rw-r--r--  1 root root   287598 Jun 22 04:33 config-6.8.0-62-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old
root@ubuntu24-13:/# lvcreate -n lv0snapshot -s -L 200M -p r /dev/vg0/lv0
  Logical volume "lv0snapshot" created.

root@ubuntu24-13:/# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                qDIPpD-S1ks-PqSj-lH3z-NAH7-JbZV-Uy4LTb
  LV Write Access        read/write
  LV Creation host, time ubuntu24-13, 2025-06-22 04:33:06 +0000
  LV snapshot status     source of
                         lv0snapshot [active]
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
   
  --- Logical volume ---
  LV Path                /dev/vg0/lv0snapshot
  LV Name                lv0snapshot
  VG Name                vg0
  LV UUID                QjWwgR-0kba-p1vj-Rm0G-C1fj-PJlt-m1rwQc
  LV Write Access        read only
  LV Creation host, time ubuntu24-13, 2025-06-22 06:37:55 +0000
  LV snapshot status     active destination for lv0
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  COW-table size         200.00 MiB
  COW-table LE           50
  Allocated to snapshot  0.05%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:4

# 挂载快照盘,表面看是存在文件的,实际是假的
root@ubuntu24-13:/# mount /dev/vg0/lv0snapshot /opt
mount: /opt: WARNING: source write-protected, mounted read-only.
root@ubuntu24-13:/# ll /opt/
total 360020
drwxr-xr-x  3 root root     4096 Jun 22 04:33 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root   287574 Jun 22 04:33 config-6.8.0-60-generic
-rw-r--r--  1 root root   287598 Jun 22 04:33 config-6.8.0-62-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old

# 修改lv0中的一些文件
root@ubuntu24-13:/mnt# rm -rf config-6.8.0-6*
root@ubuntu24-13:/mnt# ll
total 359452
drwxr-xr-x  3 root root     4096 Jun 22 06:40 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old
root@ubuntu24-13:/mnt# touch file{1..10}.txt
root@ubuntu24-13:/mnt# ll
total 359452
drwxr-xr-x  3 root root     4096 Jun 22 06:40 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root        0 Jun 22 06:40 file10.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file1.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file2.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file3.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file4.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file5.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file6.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file7.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file8.txt
-rw-r--r--  1 root root        0 Jun 22 06:40 file9.txt
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old
# 此时看opt中还是之前的文件,没变化。
root@ubuntu24-13:/mnt# cd /opt
root@ubuntu24-13:/opt# ll
total 360020
drwxr-xr-x  3 root root     4096 Jun 22 04:33 ./
drwxr-xr-x 24 root root     4096 Jun 21 00:45 ../
-rw-r--r--  1 root root   287574 Jun 22 04:33 config-6.8.0-60-generic
-rw-r--r--  1 root root   287598 Jun 22 04:33 config-6.8.0-62-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img-6.8.0-60-generic
-rw-r--r--  1 root root 72455059 Jun 22 04:33 initrd.img-6.8.0-62-generic
-rw-r--r--  1 root root 72449134 Jun 22 04:33 initrd.img.old
drwx------  2 root root    16384 Jun 22 04:33 lost+found/
-rw-------  1 root root  9109334 Jun 22 04:33 System.map-6.8.0-60-generic
-rw-------  1 root root  9109506 Jun 22 04:33 System.map-6.8.0-62-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz-6.8.0-60-generic
-rw-------  1 root root 15006088 Jun 22 04:33 vmlinuz-6.8.0-62-generic
-rw-------  1 root root 14997896 Jun 22 04:33 vmlinuz.old

# 卸载磁盘
root@ubuntu24-13:/# umount /opt 
root@ubuntu24-13:/# umount /mnt 
# 还原磁盘
# 先查看快照状态
root@ubuntu24-13:~# lvs -a -o +snap_percent,origin
  LV          VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Snap%  Origin
  ubuntu-lv   ubuntu-vg -wi-ao---- <99.00g                                                                  
  lv0         vg0       owi-a-s---   1.00g                                                                  
  lv0snapshot vg0       sri-a-s--- 200.00m      lv0    0.05                                    0.05   lv0   
root@ubuntu24-13:/# lvconvert --merge /dev/vg0/lv0snapshot 
  Merging of volume vg0/lv0snapshot started.
  vg0/lv0: Merged: 100.00%
# 合并完成后,Snap% 会变为 0.00%,且 origin 列会消失:
root@ubuntu24-13:~# lvs -a -o +snap_percent,origin
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Snap%  Origin
  ubuntu-lv ubuntu-vg -wi-ao---- <99.00g                                                                  
  lv0       vg0       -wi-a-----   1.00g           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值