1.基础存储概念与设备类型
1.1存储介质类型
- 机械硬盘(HDD - Hard Disk Drive):传统普通硬盘,组成部分有盘片、磁头、盘片转轴及控制电机、磁头控制器、数据转换器、接口、缓存等 。盘片装在旋转转轴,盘片平行,存储面有磁头,磁头间距极小,联在磁头控制器,可沿半径运动,配合盘片高速旋转(几千转 / 分钟)读写数据,靠磁头电磁流改变极性存储和读取数据,为精密设备,进入空气需过滤。
- 固态硬盘(SSD - Solid State Drive):用固态电子存储芯片阵列制成,由控制单元和存储单元(FLASH 芯片、DRAM 芯片 )组成,接口规范、功能、使用方法与普通硬盘相同,产品外形和尺寸也一致。
- 混合硬盘(SSHD):结合 HDD 的容量和 SSD 的速度,通过小容量闪存缓存常用数据,性价比折中。
- 存储容量单位
-
二进制单位(计算机底层计算):
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需要进行分区,操作步骤如下:
- 查看磁盘信息
在进行分区操作之前,先使用lsblk命令查看当前系统的磁盘和分区情况,确认目标磁盘。
lsblk
该命令会列出系统中所有的块设备,找到你要分区的磁盘,如/dev/sdb ,确保它没有重要数据,因为分区操作会清除磁盘上原有的数据。
- 进入 fdisk 交互模式
使用sudo fdisk /dev/sdb命令进入fdisk对/dev/sdb磁盘的交互操作界面。
sudo fdisk /dev/sdb
进入后,会显示一些帮助信息,同时命令行提示符变为Command (m for help):,表示可以输入命令进行操作。
- 创建分区表
如果磁盘是全新的,没有分区表,可以使用o命令创建一个新的 DOS(MBR)分区表。
Command (m for help): o
Created a new DOS disklabel with disk identifier 0x[随机十六进制数].
- 创建主分区
输入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.
- 设置分区类型(可选)
如果要设置分区类型,如将分区设置为 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'
- 保存分区表
完成分区创建和设置后,输入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磁盘进行分区:
- 查看磁盘信息
使用lsblk命令查看磁盘情况,确认目标磁盘。
lsblk
- 进入 gdisk 交互模式
使用sudo gdisk /dev/sdb命令进入gdisk对/dev/sdb磁盘的交互操作界面。
sudo gdisk /dev/sdb
进入后,会显示磁盘的相关信息,同时命令行提示符变为Command (? for help):。
- 创建 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确认创建。
- 创建分区
输入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
- 保存分区表
输入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
- 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
- umount 卸载分区示例
要卸载刚才挂载的/dev/sdb1分区,需要确保没有任何进程正在访问该分区。
方法 1:通过设备名卸载
sudo umount /dev/sdb1
方法 2:通过挂载点卸载
sudo umount /mnt/data
如果提示 “device is busy”,表示有进程正在使用该分区,可以使用lsof命令查找相关进程并关闭,例如:
sudo lsof /mnt/data
然后关闭相关进程,再尝试卸载。
- /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 更稳定,因为设备名可能会因硬件变动而改变。 - 第二列:挂载点,即分区要挂载到的目录。
- 第三列:文件系统类型,如
ext4、tmpfs等。 - 第四列:挂载选项,
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 0 | 100% | 无冗余(单盘故障数据丢失) | 读写性能最高(并行条带化) | 2 块 |
| RAID 1 | 50% | 全冗余(镜像,允许单盘故障) | 读性能高,写性能受镜像同步影响 | 2 块 |
| RAID 5 | (n-1)/n(n≥3) | 奇偶校验冗余(允许单盘故障) | 读写性能均衡(校验计算开销) | 3 块 |
| RAID 10 | 50% | 双重冗余(允许每组单盘故障) | 读写性能优异(条带 + 镜像组合) | 4 块 |
| RAID 01 | 50% | 镜像冗余(允许单组故障) | 读性能高,写性能受条带 + 镜像双重影响 | 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

3万+

被折叠的 条评论
为什么被折叠?



