提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
磁盘存储是文件系统的底层,文件系统是系统操作的基础,本文就介绍磁盘存储,分区、文件系统相关的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、磁盘存储术语.
1、接口类型
- IDE:133MB/s,并行接口,早期家用电脑
- SCSI:640MB/s,并行接口,早期服务器,并行接口因为相互影响,所以可能会因为某个接口慢,导致整
体慢。 - SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
- SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而 SATA中不包
含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行 - USB:480MB/s
- M.2:M.2接口(原称NGFF,Next Generation Form Factor)是专为高性能移动设备和小型化存储设计的先进接口标准,已成为现代计算机系统中最主流的存储接口之一。
2、磁盘存储协议
硬盘存储协议详解
存储协议定义了数据在存储设备与主机之间的传输规则,是决定存储系统性能的关键因素之一。以下是主流硬盘存储协议的全面解析:
2.1、基础协议
1. ATA/ATAPI (Advanced Technology Attachment)
- 工作模式:
- PATA (并行ATA):IDE接口,44/80芯电缆
- SATA (串行ATA):主流消费级协议
- 版本演进:
版本 速率 特性 SATA 1.0 1.5Gbps 150MB/s SATA 2.0 3Gbps 300MB/s,NCQ技术 SATA 3.0 6Gbps 600MB/s,TRIM支持 - 应用场景:机械硬盘、入门级SSD
2. AHCI (Advanced Host Controller Interface)
- 核心特点:
- 单命令队列,深度32
- 延迟约6μs
- 原生热插拔支持
- 局限:无法充分发挥NVMe设备的并行性
2.2、高性能协议
1. NVMe (Non-Volatile Memory Express)
-
架构优势:
- 基于PCIe总线,直接访问内存
- 支持64K队列,每队列64K命令
- 延迟低至2.8μs
-
版本对比:
特性 NVMe 1.3 NVMe 1.4 NVMe 2.0 (2021) 最大带宽 PCIe 4.0 x4 PCIe 4.0 x4 PCIe 5.0 x4 新功能 PLM电源管理 ZNS分区命名空间 多控制器支持 IOPS提升 1M 1.5M 3M+ -
扩展协议:
- NVMe-oF:通过网络扩展NVMe(支持TCP/RDMA/FC)
- ZNS:分区命名空间技术,优化QLC寿命
2. SCSI (Small Computer System Interface)
- 企业级特性:
- 支持多设备级联(最大16设备)
- 标签命令队列(TCQ)
- 完善的错误恢复机制
- 衍生协议:
类型 速率 应用领域 SAS-3 12Gbps 企业级硬盘阵列 iSCSI 10/25/100G IP SAN存储 FCoE 10/40/100G 融合网络存储
2.3、协议性能对比
参数 | AHCI | NVMe | SCSI |
---|---|---|---|
最大队列深度 | 1队列/32命令 | 64K队列/64K命令 | 256队列 |
延迟 | 6μs | <3μs | 4μs |
最大吞吐量 | 600MB/s | 16GB/s | 24Gbps(SAS-4) |
CPU占用率 | 较高 | 极低 | 中等 |
典型接口 | SATA | PCIe/M.2/U.2 | SAS/FC |
3、机械硬盘
3.1基本结构
-
磁盘(Drive/Disk)
- 用于长期存储数据的物理设备,分为机械硬盘(HDD)和固态硬盘(SSD)
- 特点:非易失性存储,容量大,速度较内存慢
-
扇区(Sector)
- 磁盘的最小物理存储单元,传统硬盘通常为512字节,现代高级格式硬盘多为4KB
- 操作系统读写磁盘的基本单位
-
磁道(Track)
- 磁盘盘片上的同心圆环,数据存储在磁道上
- 每个磁道被划分为多个扇区
-
柱面(Cylinder)
- 所有盘面上相同半径的磁道组成的圆柱形
- 磁盘寻址时的重要概念
3.2 性能相关术语
-
寻道时间(Seek Time)
- 磁头移动到目标磁道所需的时间
- 机械硬盘的关键性能指标之一
-
旋转延迟(Rotational Latency)
- 盘片旋转使目标扇区到达磁头下方所需的时间
- 平均为盘片旋转半周的时间
-
传输速率(Transfer Rate)
- 数据从磁盘传输到内存的速率
- 包括内部传输率(磁头到磁盘缓存)和外部传输率(缓存到内存)
-
IOPS(Input/Output Operations Per Second)
- 每秒输入/输出操作数
- 衡量存储设备性能的重要指标
3.3 寻址方式
*Cylinder-Head-Sector 柱面-磁头-扇区)*也称为3D模式
- 它通过提供柱面号、磁头号和扇区号来唯一确定一个扇区的位置。
- CHS采用 24 bit位寻址
- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
- 最大寻址空间 8 GB 【2^24*512/1024/1024/1024 = 8G】
- 是硬盘最早采用的寻址模式之一。
LBA (logical block addressing)
- LBA方式使用逻辑块号来寻址磁盘上的数据。逻辑块号是一个连续的、线性的编号,从0开始,每个逻
辑块的大小通常为512字节(但也可能根据系统或文件系统的不同而有所变化)。LBA方式通过直接指定逻辑块
号来定位数据。- LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址
- ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到
128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes - 它基于扇区的线性编号来定位数据,不受柱面、磁头和扇区的限制。
- 在现代硬盘中,LBA寻址方式已经成为主流。
4、SSD
SSD基本原理深度解析
SSD(Solid-State Drive,固态硬盘)是一种基于半导体存储技术的高速存储设备,其核心原理与机械硬盘(HDD)存在本质差异。
4.1、硬件架构组成
1. 核心组件
组件 | 功能描述 |
---|---|
NAND闪存芯片 | 数据存储单元,由浮栅晶体管构成,通过电荷存储实现非易失性存储 |
主控制器 | 执行FTL算法、管理数据读写、实现磨损均衡/垃圾回收等核心功能 |
DRAM缓存 | 高速缓冲映射表(部分高端型号配备),加速逻辑地址到物理地址的转换 |
接口电路 | 支持SATA/PCIe/NVMe等协议,实现与主机的物理连接 |
2. 对比HDD机械结构
特性 | HDD | SSD |
---|---|---|
存储介质 | 磁性盘片 | NAND闪存芯片 |
机械部件 | 磁头/马达/盘片 | 无移动部件 |
访问方式 | 机械寻道 | 电子寻址 |
抗震能力 | 脆弱(运行中<5G) | 强(可承受1500G冲击) |
4.1、存储介质:NAND闪存
1. 存储单元类型
类型 | 每单元位数 | 特点 | 典型寿命(P/E) | 应用场景 |
---|---|---|---|---|
SLC | 1 bit | 高速度、高耐久、高成本 | 50,000-100,000 | 企业级/军工 |
MLC | 2 bits | 平衡性能与成本 | 3,000-10,000 | 高端消费级 |
TLC | 3 bits | 高密度、低成本 | 500-3,000 | 主流消费级 |
QLC | 4 bits | 超高密度、低耐久 | 100-1,000 | 大容量存储 |
3D NAND | 多层堆叠 | 垂直堆叠技术提升容量和可靠性 | 比平面结构高2-3倍 | 全领域普及 |
2. 物理结构特性
- 页(Page):基本编程单位(典型16KB)
- 块(Block):基本擦除单位(包含128-256页,典型4MB)
- 擦写限制:每个块有固定擦除次数(P/E Cycle)
4.2、工作原理与关键技术
1. 数据存储原理
- 写入过程:
- 控制器接收逻辑地址(LBA)
- FTL映射到物理地址(PBA)
- 向目标页注入电子(编程)
- 读取过程:通过感应晶体管阈值电压判断存储状态
- 擦除要求:必须先擦除整个块才能重新写入
2. 核心控制技术
技术名称 | 功能描述 |
---|---|
FTL映射 | 逻辑地址到物理地址的动态转换,支持动态磨损均衡 |
磨损均衡(WL) | 通过动态分配写入位置,平衡各闪存块的擦写次数(算法:动态/静态/全局) |
垃圾回收(GC) | 合并有效数据页,释放无效块(影响:写入放大率WA) |
ECC纠错 | 采用LDPC/BCH等算法纠正比特错误(QLC需要>1200bit/1KB纠错能力) |
OP预留空间 | 保留7-28%的物理空间提升性能与寿命(企业级OP通常>20%) |
3、SSD vs HDD关键差异总结
对比维度 | SSD | HDD |
---|---|---|
启动时间 | <1秒 | 10-30秒 |
随机访问 | 微秒级 | 毫秒级(需寻道+旋转) |
功耗 | 待机0.1W,满载5W | 待机5W,满载10W |
噪音 | 无 | 30-50dB |
抗震性 | 1500G冲击耐受 | 运行中易损坏 |
容量成本 | $0.08/GB (QLC) | $0.03/GB (8TB HDD) |
5、如何快速清除数据
方法 | 适用设备 | 特点 |
---|---|---|
mkfs 格式化 | HDD/SSD | 快速创建文件系统,旧数据可能残留 |
dd 覆写 | HDD | 单次/多次覆写,耗时长 |
shred | HDD | 多次覆写,符合安全标准 |
ATA 安全擦除 | SSD | 底层擦除,快速且不损伤 SSD |
TRIM/blkdiscard | SSD | 依赖设备支持,快速清理可用空间 |
加密密钥删除 | HDD/SSD | 高效安全,需提前加密 |
二、MBR,GPT结构区别
以下是 MBR 和 GPT 分区方案的核心区别总结,以简洁清晰的对比表格和关键点形式呈现:
1.MBR(主引导记录)
主引导记录(MBR,Master Boot Record)是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区。
经典主引导记录布局
[22:17:30 root@leige ~]#hexdump -n 512 -Cv /dev/sda | tail -6 #完整显示磁盘第一个扇区并以规范的十六进制和 ASCII 码形式完整输出
000001b0 00 00 00 00 00 00 00 00 d6 47 cd 8c 00 00 80 04 |.........G......|
000001c0 01 04 83 fe c2 ff 00 08 00 00 00 00 20 00 00 fe |............ ...| #sda1分区表信息
000001d0 c2 ff 8e fe c2 ff 00 08 20 00 00 f8 df 18 00 00 |........ .......| #sda2分区表信息
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
[22:06:12 root@leige ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 10.2G 0 rom
从上面可知sda只有sda1和sda2两个主分区,所以在MBR所在扇区处,前两个分区信息字节有数据,而后两个分区表项字节为全0;
2.GPT(全局唯一标识分区表)
- 在GPT分区表的最开头,出于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护性MBR(Protective MBR)。
- 分区表头(LBA 1)定义了硬盘的可用空间以及组成分区表的项的大小和数量。
- LBA 2–33的位置存放的是分区表项。
3.MBR vs GPT 核心区别对比表
对比项 | MBR(主引导记录) | GPT(GUID分区表) |
---|---|---|
最大磁盘容量 | 2 TB(32位LBA寻址) | 9.4 ZB(64位LBA寻址,实际支持256TB+) |
最大分区数量 | 4个主分区(或3主分区+1扩展分区+无限逻辑分区) | 128个主分区(Windows默认限制) |
数据安全性 | ❌ 无备份和校验机制,易被病毒破坏 | ✅ 分区表双备份 + CRC32校验,支持自动修复 |
兼容性 | ✅ 兼容所有旧版BIOS系统 | ❗ 需UEFI固件(Windows Vista及以上支持) |
启动方式 | 仅支持Legacy BIOS启动 | 支持UEFI启动(Windows 8/10/11必选) |
分区表位置 | 磁盘首扇区(仅1份,无备份) | 磁盘首尾各存1份分区表(冗余设计) |
适用场景 | 旧系统(如Win7及更早)、小容量硬盘 | 新硬件、大容量硬盘(>2TB)、多系统启动 |
4.关键区别详解
-
容量限制
- MBR:32位寻址,最大支持2TB磁盘。超过2TB时,剩余空间无法识别。
- GPT:64位寻址,理论支持9.4 ZB(1 ZB = 10亿TB),实际受操作系统限制(如Windows支持256TB)。
-
分区管理
- MBR:需通过扩展分区管理逻辑分区,复杂且易出错。
- GPT:直接支持128个主分区,无需扩展分区,管理更简单。
-
安全与可靠性
- MBR:无校验机制,分区表损坏可能导致数据全损。
- GPT:通过CRC校验检测错误,备份分区表可自动修复损坏。
-
启动兼容性
- MBR:仅支持Legacy BIOS启动模式。
- GPT:必须搭配UEFI启动(Windows 11强制要求)。
-
现代系统支持
- Windows:从Vista开始支持GPT,但Win8/10/11系统盘必须用GPT(UEFI模式)。
- macOS/Linux:默认使用GPT分区。
总结
- MBR:旧硬件、小容量盘、Legacy BIOS系统。
- GPT:新电脑、大容量硬盘(>2TB)、UEFI启动、多分区需求。
- 未来趋势:GPT将全面取代MBR(微软已逐步淘汰Legacy启动)。
三、分区,文件系统管理。
1.查看分区信息
fdisk -l
显示分区列表
[22:46:23 root@leige ~]#fdisk -l
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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 #IO大小
Disklabel type: dos #磁盘标签类型这里dos是MBR分区
Disk identifier: 0x8ccd47d6 #磁盘标识符
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 419430399 417331200 199G 8e Linux LVM
.......
cat /proc/partitions
显示内核中所有磁盘分区的概要信息。
[22:50:58 root@leige ~]#cat /proc/partitions #查看内核系统中所有已知的磁盘分区信息。
major minor #blocks name #主设备号 次设备号 分区大小 分区名称
8 0 209715200 sda
8 1 1048576 sda1
8 2 208665600 sda2
11 0 10660544 sr0
253 0 73400320 dm-0
253 1 2113536 dm-1
253 2 133148672 dm-2
lsblk
以树状结构显示系统中的块设备,能够清晰地展示磁盘、分区以及它们之间的关系
[23:00:22 root@leige ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 10.2G 0 rom
2.管理分区
虚拟机添加硬盘,Rocky9系统在线扫描更新块设备,可使用 “- - -” 覆盖/sys/class/scsi_host/host*/scan文件快速识别
for i in /sys/class/scsi_host/host*/scan; do echo "- - -" >"$i";done
- 创建分区
[23:27:21 root@leige ~]#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xc99229cb.
Command (m for help): n #输入n 创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p #输入"p "选择主分区表类型
Partition number (1-4, default 1): 1 #输入"1 "选择分区编号1
First sector (2048-20971519, default 2048): #输入"回车"默认2048为起始扇区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): +2G #输入 "+2G" 创建大小为2G的分区空间
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p #输入"p "显示分区信息
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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: 0xc99229cb
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
Command (m for help): w #输入" w" 写入分区信息,使之生效
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
- 删除分区
[23:29:41 root@leige ~]#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d #输入 d 删除分区,默认第1个编号分区
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p #显示分区
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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: 0xc99229cb
Command (m for help): w #写入保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
非交互模式下管理分区
以上面创建2G分区为例,echo 参数“n” “p” “+2G” 以及“\n”回车利用管道符 | 传递给fdisk命令直接完成操作;
echo -e 'n\np\n\n\n+2G\nw' |fdisk /dev/sdb
- 查看文件系统
查看当前内核支持的文件系统(ext4 xfs fat nfs 等)
[23:45:15 root@leige ~]#ls /lib/modules/$(uname -r)/kernel/fs
afs ceph exfat fscache isofs mbcache.ko.xz nfs_common overlayfs squashfs
binfmt_misc.ko.xz dlm ext4 fuse jbd2 netfs nfsd pstore udf
cachefiles erofs fat gfs2 lockd nfs nls smb xfs
linux常用文件系统
ext4
ext 文件系统的最新版。有很多新的特性,包括纳秒级时间戳、巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs
SGI,支持最大8EB的文件系统
swap
交换分区专用的文件系统
iso9660
光盘文件系统
lsblk -f 命令查看
[23:54:36 root@leige ~]#lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
│ xfs 3f9c107a-c618-422a-ab8b-39e4a519599d 656.5M 32% /boot
└─sda2
LVM2_m LVM2 I8lg5Q-fVHj-2r7C-QWCt-s0xY-evxE-GfO34f
├─rl-root
│ xfs 72965a08-a464-4d85-a0b4-73349ffe1b19 62.4G 11% /
├─rl-swap
│ swap 1 36592f75-4671-47bf-b66f-bd6a5142f29c [SWAP]
└─rl-home
xfs 31f9f635-0ba7-43f6-9a65-8f24674cfdb6 126G 1% /home
sdb
└─sdb1
sr0 iso966 Jolie Rocky-9-4-x86_64-dvd
2024-05-05-01-12-25-00
df命令查看
[00:00:00 root@leige ~]#df -Th #查看磁盘的文件系统信息
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 872M 0 872M 0% /dev/shm
tmpfs tmpfs 349M 7.0M 342M 2% /run
/dev/mapper/rl-root xfs 70G 7.5G 63G 11% /
/dev/sda1 xfs 960M 304M 657M 32% /boot
/dev/mapper/rl-home xfs 127G 946M 126G 1% /home
tmpfs tmpfs 175M 52K 175M 1% /run/user/42
tmpfs tmpfs 175M 36K 175M 1% /run/user/0
[00:02:35 root@leige ~]#df /dev/sdb #指定磁盘查看文件系统信息
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
[00:03:37 root@leige ~]#df -t xfs #指定文件系统类型查看
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rl-root 73334784 7852088 65482696 11% /
/dev/sda1 983040 310780 672260 32% /boot
/dev/mapper/rl-home 133083136 968148 132114988 1% /home
- 管理文件系统
创建文件系统
[00:08:28 root@leige ~]#mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: ce6e119b-6fc2-4517-a808-62a351b79413
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[00:08:46 root@leige ~]#lsblk -f /dev/sdb
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
└─sdb1 ext4 1.0 ce6e119b-6fc2-4517-a808-62a351b7941
mount命令挂载文件系统
[00:10:14 root@leige ~]#mount /dev/sdb1 -o ro /mnt # 挂载只读的ext4文件系统
[00:14:45 root@leige ~]#lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4 1.0 ce6e119b-6fc2-4517-a808-62a351b79413 1.8G 0% /mnt #挂载点/mnt 生效
umount命令卸载
[00:15:03 root@leige ~]#umount /mnt #卸载挂载点/mnt
[00:18:00 root@leige ~]#lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4 1.0 ce6e119b-6fc2-4517-a808-62a351b79413
四、raid 0, 1, 5, 10, 01的工作原理。
1、raid各级别工作原理
RAID JBOD
RAID JBOD的意思是Just a Bunch Of Disks,是将多块硬盘串联起来组成一个大的存储设备,从某种意义上说这种类型不被算作RAID,在维基百科里JBOD同时也被归入非RAID架构。RAID JBOD将所有的磁盘串联成一个单一的,容量是使用的磁盘的总和的存储设备供操作系统使用。
RAID0
RAID 0又称为条带化(Stripe)或分条(Striping),代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个硬盘上存取。
RAID1
RAID 1又称镜像(Mirror或Mirroring),即每个工作盘都有一个镜像盘,每次写数据时必须同时写入镜像盘,读数据时同时从工作盘和镜像盘读出。当更换故障盘后,数据可以重构,恢复工作盘正确数据。
RAID3
RAID3(带奇偶校验码的并行传送)。这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2,RAID 3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。
RAID5
RAID 5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。为保障存储数据的可靠性,采用循环冗余校验方式,并将校验数据分散存储在RAID的各成员盘上。当RAID的某个成员盘出现故障时,通过其他成员盘上的数据可以重新构建故障硬盘上的数据。
RAID6
在RAID 5的基础上,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块硬盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的硬盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”较差。
如图所示,PA为数据块A0、A1、A2的第一个校验信息块,QA为第二个校验信息块;PB为数据块B0、B1、B2的第一个校验信息块,QB为第二个校验信息块,以此类推。
RAID10
RAID10(高可靠性与高效磁盘结构)。这种结构无非是一个带区结构加一个镜像结构,因为两种结构各有优缺点,因此可以相互补充,达到既高效又高速的目的。
RAID01
从RAID 0+1名称上便可以看出是RAID0与RAID1的结合体。在单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,可以在磁盘镜像中建立带区集。因为这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。
2、总结RAID级别特点
五、LVM的基本原理,LVM的创建和磁盘扩容等简单实践。
1、基本原理
LVM(Logical Volume Manager)即逻辑卷管理器,是Linux系统下对磁盘分区进行管理的一种机
制。LVM在硬盘分区和文件系统之间添加了一个逻辑层,为文件系统屏蔽了下层的磁盘分区布局,提供了一个
抽象的卷组,用户可以在这个卷组上创建文件系统。
LVM(Logical Volume Manager,逻辑卷管理)是 Linux 系统下用于管理磁盘存储的一种高级工具。它通过抽象物理存储设备,提供更灵活的磁盘管理方式,支持动态调整存储空间、合并多个磁盘空间、创建快照等功能。以下是 LVM 的核心概念和工作原理:
核心概念
-
物理卷(Physical Volume, PV)
- 物理磁盘或分区(如
/dev/sda1
、/dev/sdb
)通过pvcreate
命令初始化为 LVM 可管理的物理卷。 - 是 LVM 存储的底层物理单元。
- 物理磁盘或分区(如
-
卷组(Volume Group, VG)
- 多个物理卷(PV)可以合并成一个卷组(VG),形成一个统一的存储池。
- 卷组是逻辑卷(LV)的容器,空间按需分配给逻辑卷。
-
逻辑卷(Logical Volume, LV)
- 从卷组(VG)中划分出的逻辑存储单元,类似于传统分区,但更灵活。
- 逻辑卷可以直接格式化为文件系统(如 ext4、xfs)并挂载使用。
-
物理扩展块(Physical Extent, PE)
- LVM 的最小存储单元,默认为 4MB。物理卷和逻辑卷的空间分配以 PE 为单位。
LVM 的层次结构
物理磁盘(如 /dev/sda)
→ 物理卷(PV)
→ 合并到卷组(VG)
→ 划分出逻辑卷(LV)
→ 格式化为文件系统并挂载(如 /home)
LVM 的核心优势
-
动态调整大小
- 逻辑卷(LV)和卷组(VG)可以在线(无需卸载)扩展或缩减。
- 例如:当
/home
空间不足时,可直接扩展其对应的逻辑卷。
-
存储池化
- 将多个物理磁盘/分区合并为单一卷组,突破单个磁盘容量限制。
-
快照(Snapshot)
- 创建逻辑卷的瞬时快照,用于备份或测试,避免数据损坏风险。
-
灵活的迁移与合并
- 支持将数据迁移到新磁盘,或合并不同磁盘的空间。
-
支持条带化、镜像
- 类似 RAID 的功能(需结合
mdadm
等工具)。
- 类似 RAID 的功能(需结合
适用场景
- 需要动态调整存储空间(如数据库、虚拟化环境)。
- 整合多块磁盘的空间。
- 需要频繁备份或测试系统更新(快照功能)。
注意事项
- 备份重要数据:LVM 操作有风险(如缩减空间可能导致数据丢失)。
- 文件系统兼容性:调整逻辑卷大小后,需同步调整文件系统(如
resize2fs
)。 - 性能:复杂操作可能引入轻微性能开销。
LVM 是 Linux 存储管理的强大工具,适合需要灵活性和可扩展性的场景,但需谨慎操作以避免数据风险。
2.实践操作
2.1创建实践
虚拟机新增两块硬盘,并分区
[00:31:16 root@leige ~]#lsblk -f /dev/sdb /dev/sdc
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
├─sdb1 ext4 1.0 ce6e119b-6fc2-4517-a808-62a351b79413
├─sdb2
├─sdb3
└─sdb4
sdc
├─sdc1
└─sdc2
创建PV
[00:31:24 root@leige ~]#pvcreate /dev/sdb2 /dev/sdc1
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdc1" successfully created.
查看PV
[00:31:33 root@leige ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdc1 lvm2 --- 4.00g 4.00g
[00:31:39 root@leige ~]#pvdisplay /dev/sdb2
"/dev/sdb2" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID hDXRti-LgnJ-RFf2-dRXC-OUVt-noHs-5tmUOd
[00:34:07 root@leige ~]#pvdisplay /dev/sdc1
"/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 9Yiodc-L2GH-u0Dn-c73o-IBA4-aZAO-4ibZeY
创建VG
[00:34:25 root@leige ~]#vgcreate -s 16M testvg /dev/sdb2 /dev/sdc1
Volume group "testvg" successfully created
[00:35:26 root@leige ~]#vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
testvg 2 0 0 wz--n- <5.97g <5.97g
查看VG
[00:35:36 root@leige ~]#vgdisplay testvg
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
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 <5.97 GiB
PE Size 16.00 MiB
Total PE 382
Alloc PE / Size 0 / 0
Free PE / Size 382 / <5.97 GiB
VG UUID pH4Mm9-JX1h-ekOv-cTyO-kix0-1d2S-23RcZe
创建LV
[00:36:12 root@leige ~]#lvcreate -l 100 -n lv1 testvg #从 testvg 中创建lv1,大小为 100个PE
Logical volume "lv1" created.
[00:37:45 root@leige ~]#lvcreate -L 1G -n lv2 testvg #创建lv2,大小为5G
Logical volume "lv2" created.
[00:38:48 root@leige ~]#lvcreate -l 20%free -n lv3 testvg #创建lv3,大小为剩下可用PE数量的 20%
Logical volume "lv3" created.
[00:39:12 root@leige ~]#lvcreate -l 10%VG -n lv4 testvg #创建lv4,大小为指定vg的10%
Logical volume "lv4" created.
查看LV
[00:39:17 root@leige ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home rl -wi-ao---- 126.98g
root rl -wi-ao---- 70.00g
swap rl -wi-ao---- <2.02g
lv1 testvg -wi-a----- 1.56g
lv2 testvg -wi-a----- 1.00g
lv3 testvg -wi-a----- 688.00m
lv4 testvg -wi-a----- 608.00m
[00:39:23 root@leige ~]#lvscan
ACTIVE '/dev/testvg/lv1' [1.56 GiB] inherit
ACTIVE '/dev/testvg/lv2' [1.00 GiB] inherit
ACTIVE '/dev/testvg/lv3' [688.00 MiB] inherit
ACTIVE '/dev/testvg/lv4' [608.00 MiB] inherit
ACTIVE '/dev/rl/swap' [<2.02 GiB] inherit
ACTIVE '/dev/rl/home' [126.98 GiB] inherit
ACTIVE '/dev/rl/root' [70.00 GiB] inherit
创建挂载目录
[00:39:38 root@leige ~]#mkdir /mount/lvm -p
格式化lv1的文件系统
[00:40:33 root@leige ~]#mkfs.ext4 /dev/testvg/lv1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 409600 4k blocks and 102544 inodes
Filesystem UUID: da485b3c-f9ff-40ea-a6f8-f29819b5bb01
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
挂载lv1到 /mount/lvm/
[00:40:52 root@leige ~]#mount /dev/testvg/lv1 /mount/lvm/
[00:41:11 root@leige ~]#mount | grep lvm
/dev/mapper/testvg-lv1 on /mount/lvm type ext4 (rw,relatime,seclabel)
2.2 扩容实践
扩容前查看VG
[00:54:28 root@leige ~]#vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
testvg 2 4 0 wz--n- <5.97g 2.14g
扩容VG
[00:54:49 root@leige ~]#vgextend testvg /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
Volume group "testvg" successfully extended
[00:55:10 root@leige ~]#vgextend testvg /dev/sdbc2
No device found for /dev/sdbc2.
[00:55:31 root@leige ~]#vgextend testvg /dev/sdc2
Physical volume "/dev/sdc2" successfully created.
Volume group "testvg" successfully extended
[00:55:37 root@leige ~]#vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
testvg 4 4 0 wz--n- <11.94g <8.11g #容量相比之前变大
LV扩容前查看
[00:55:42 root@leige ~]#lvs /dev/testvg/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 testvg -wi-ao---- 1.56g
[00:56:10 root@leige ~]#df -h /mount/lvm/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/testvg-lv1 1.6G 24K 1.5G 1% /mount/lvm
LV扩容
[00:56:36 root@leige ~]#lvextend -L +1G /dev/testvg/lv1
Size of logical volume testvg/lv1 changed from 1.56 GiB (100 extents) to 2.56 GiB (164 extents).
Logical volume testvg/lv1 successfully resized.
文件系统扩容
[00:56:50 root@leige ~]#resize2fs /dev/testvg/lv1
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/testvg/lv1 is mounted on /mount/lvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/lv1 is now 671744 (4k) blocks long.
扩容验证
[00:57:06 root@leige ~]#lvs /dev/testvg/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 testvg -wi-ao---- 2.56g
[00:57:36 root@leige ~]#df -h /mount/lvm/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/testvg-lv1 2.5G 24K 2.4G 1% /mount/lvm
2.3 删除实践
卸载lvm
[00:58:39 root@leige ~]#umount /mount/lvm
删除lv1逻辑卷
[01:08:48 root@leige ~]#lvremove /dev/testvg/lv1
Do you really want to remove active logical volume testvg/lv1? [y/n]: y
Logical volume "lv1" successfully removed.
[01:09:02 root@leige ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home rl -wi-ao---- 126.98g
root rl -wi-ao---- 70.00g
swap rl -wi-ao---- <2.02g
lv2 testvg -wi-a----- 1.00g
lv3 testvg -wi-a----- 688.00m
lv4 testvg -wi-a----- 608.00m
删除VG
[01:09:07 root@leige ~]#vgremove testvg
Do you really want to remove volume group "testvg" containing 3 logical volumes? [y/n]: y
Do you really want to remove active logical volume testvg/lv2? [y/n]: y
Logical volume "lv2" successfully removed.
Do you really want to remove active logical volume testvg/lv3? [y/n]: y
Logical volume "lv3" successfully removed.
Do you really want to remove active logical volume testvg/lv4? [y/n]: y
Logical volume "lv4" successfully removed.
Volume group "testvg" successfully removed
[01:09:29 root@leige ~]#vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
查看PV
[01:09:34 root@leige ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdb3 lvm2 --- 2.00g 2.00g
/dev/sdc1 lvm2 --- 4.00g 4.00g
/dev/sdc2 lvm2 --- 4.00g 4.00g
删除PV
[01:09:50 root@leige ~]#pvremove /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2
Labels on physical volume "/dev/sdb2" successfully wiped.
Labels on physical volume "/dev/sdb3" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
Labels on physical volume "/dev/sdc2" successfully wiped.
[01:10:26 root@leige ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
2.4 快照实践
环境准备
[01:23:29 root@leige ~]#cp /etc/fstab /mount/lvm/
[01:23:32 root@leige ~]#ls /mount/lvm
fstab lost+found
[01:23:43 root@leige ~]#touch /mount/lvm/test.file1
[01:24:14 root@leige ~]#mkdir /mount/lvm_snapshot
[01:24:20 root@leige ~]#ls /mount/lvm
fstab lost+found test.file1
[01:24:35 root@leige ~]#ls -d /mount/lvm*
/mount/lvm /mount/lvm_snapshot
查看lv1逻辑卷
[01:24:36 root@leige ~]#lvs /dev/testvg/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 testvg -wi-ao---- 2.56g
为逻辑卷创建100M的快照 只读
[01:24:50 root@leige ~]#lvcreate -n lv1_snapshot -s -L 100M -p r /dev/testvg/lv1
Rounding up size to full physical extent 112.00 MiB
Logical volume "lv1_snapshot" created.
[01:25:19 root@leige ~]#lvs /dev/testvg/lv1_snapshot
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_snapshot testvg sri-a-s--- 112.00m lv1 0.01
[01:25:28 root@leige ~]#lvdisplay /dev/testvg/lv1_snapshot
--- Logical volume ---
LV Path /dev/testvg/lv1_snapshot
LV Name lv1_snapshot
VG Name testvg
LV UUID GiUn3r-hLud-iW1M-zmkG-0h8F-EVvs-eXFC7c
LV Write Access read only
LV Creation host, time leige.study.org, 2025-05-07 01:25:19 +0800
LV snapshot status active destination for lv1
LV Status available
# open 0
LV Size 2.56 GiB
Current LE 164
COW-table size 112.00 MiB
COW-table LE 7
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:9
挂载快照并与原逻辑卷对比
[01:26:31 root@leige ~]#mount /dev/testvg/lv1_snapshot /mount/lvm_snapshot/
mount: /mount/lvm_snapshot: WARNING: source write-protected, mounted read-only.
[01:26:36 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root 655 May 7 01:23 fstab
11 drwx------. 2 root root 16384 May 7 00:40 lost+found
13 -rw-r--r--. 1 root root 0 May 7 01:24 test.file1
[01:26:47 root@leige ~]#ll -i /mount/lvm_snapshot/
total 20
12 -rw-r--r--. 1 root root 655 May 7 01:23 fstab
11 drwx------. 2 root root 16384 May 7 00:40 lost+found
13 -rw-r--r--. 1 root root 0 May 7 01:24 test.file1
修改原逻辑卷内容并与快照对比
[01:26:55 root@leige ~]#echo test-edit-lvm >> /mount/lvm/fstab
[01:27:23 root@leige ~]#rm -r /mount/lvm/test.file1
[01:27:33 root@leige ~]#ll -i /mount/lvm_snapshot/
total 20
12 -rw-r--r--. 1 root root 655 May 7 01:23 fstab
11 drwx------. 2 root root 16384 May 7 00:40 lost+found
13 -rw-r--r--. 1 root root 0 May 7 01:24 test.file1
[01:27:48 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root 669 May 7 01:27 fstab
11 drwx------. 2 root root 16384 May 7 00:40 lost+found
取消挂载
[01:27:56 root@leige ~]#umount /mount/lvm
[01:28:03 root@leige ~]#umount /mount/lvm_snapshot
从快照中恢复数据
[01:28:07 root@leige ~]#lvconvert --merge /dev/testvg/lv1_snapshot
Merging of volume testvg/lv1_snapshot started.
testvg/lv1: Merged: 100.00%
挂载原逻辑卷并验证
[01:28:29 root@leige ~]#mount /dev/testvg/lv1 /mount/lvm
[01:28:30 root@leige ~]#ll -i /mount/lvm
total 20
12 -rw-r--r--. 1 root root 655 May 7 01:23 fstab
11 drwx------. 2 root root 16384 May 7 00:40 lost+found
13 -rw-r--r--. 1 root root 0 May 7 01:24 test.file1
[01:28:35 root@leige ~]#tail -n2 /mount/lvm/fstab
/dev/mapper/rl-home /home xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
六、总结变量命名规则,不同类型变量。
变量命名规则是在编程中非常重要的,它能够帮助程序员更好地组织和管理代码。不同类型的变量有不同的使用方式:
-
环境变量
:环境变量是在操作系统中设置的全局变量,通常用于存储系统级别的配置信息或运行时环境信息。在Linux系统中,可以使用export命令来声明环境变量,命名一般使用大写字符,例如:PATH、HOME。 -
位置变量
:位置变量是在脚本或程序中根据传入的参数而生成的变量,通常包括$1、$2、$3等,用于接收用户在执行脚本时传入的参数。位置变量的命名通常是按照参数的顺序命名,例如$1代表第一个参数,$2代表第二个参数,以此类推。 -
只读变量
:只读变量是指在声明后不能被修改的变量,通常用readonly命令来申明。只读变量的命名遵循普通变量的命名规则,但通常会使用全大写来表示其只读的特性,例如:PI=3.14。 -
局部变量
:局部变量是指在特定作用域内有效的变量,通常在函数或脚本中声明并使用。局部变量的命名应具有描述性,并尽量避免与全局变量重名,以免造成混淆。 -
状态变量
:状态变量用于记录程序或系统的状态信息,通常用于控制程序的流程或处理特定逻辑。状态变量的命名应具有描述性,清晰表达其所代表的状态,以便程序员更好地理解和维护代码。
总的来说,无论是何种类型的变量,在命名时都应该遵循以下规则:
- 使用有意义的变量名,能够清晰地表达变量的用途和含义。
- 使用驼峰命名法或下划线命名法来命名变量。
- 避免使用特殊字符和保留关键字。
- 在需要时添加注释来说明变量的含义和用法。变量命名规则是在编程中非常重要的,它能够帮助程序员更好地组织和管理代码。不同类型的变量有不同的使用方式:
七、编写一个脚本猜数字,使用判断提示用户比目标数字是大还是小
个人编写逻辑: 当输入数字大于或小于猜想的数字时,打印输出大于或小于的提示,字体为红色
当输入数字等于猜想数字时,打印输出恭喜并提示等于的提示,字体为绿色
[02:05:30 root@leige ~]#cat guess.sh
#!/bin/bash
number=22
read -p "please enter the number you want: " answer
if [ $answer -gt $number ] ;then
echo -e "\e[31myour answer is greater than the number\e[0m"
fi
if [ $answer -eq $number ] ;then
echo -e "\e[32mCongratulations!! your answer is equal to the number\e[0m"
fi
if [ $answer -lt $number ] ;then
echo -e "\e[31myour answer is less than the number\e[0m"
fi
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了磁盘存储基础,MBR\GPT结构、RAID基本原理、LVM基本用法,变量总结,最后编写了一个简单的shell脚本。