Linux 入门指南:从零基础到玩转命令行 12
Linux 硬盘分区管理
主要分为 MBR 和 GPT 分区
主引导扇区由三个部分组成:
MBR-Master Boot Record
在 linux 中,管理员可以创建最多15个分区
每个分区最大不超过 2T
GPT分区方案最多可提供128个分区。
- LBA0(保护性MBR),分为两个部分:
- 第一部分是与MBR中446字节相似的区块,用于存放第一阶段的启动引导程序。
- 第二部分是与MBR分区表记录区对应,该区域存储一个特殊标识符0xEE,用于表示该磁盘为GPT格式。若磁盘管理程序(比较老的软件)无法识别该磁盘,不能修改这个分区信息,进一步保护磁盘。
- LBA1(GPT表头记录),记录了分区表自身的位置和大小,同时也记录了前面提到备份用的GPT分区所在位置(最后34个LBA),还放置了分区表的校验码(CRC32),校验码的作用是让操作系统判断GPT的正确与否,倘若发现错误则可以从备份的GPT中恢复正常运行。
- LBA2-33,记录分区信息,每个LBA可以提供4组的分区记录,默认情况下可以有4×32=128组分区记录。因为每个LBA都有512字节,所以每组分区记录所占128字节,除去每组记录需要的标识符和相关记录信息外,GPT在每组记录中提供了64位记载分区的扇区总数。
- 虽然GPT最大支持128个分区,但是实际使用过程中分区超过第120个会出现无法格式化使用的情况。
MBR 分区 使用 fdisk 命令
| 命令 | 作用 |
|---|---|
| fdisk -l | 罗列全部硬盘 + 分区详情 |
| fdisk -s /dev/sda1 | 查看分区总大小 |
| fdisk /dev/sdb | 进入交互式分区界面 |
进入交互式界面后
| 按键 | 功能 |
|---|---|
| m | 查看所有帮助菜单(命令列表) |
| p | 打印当前硬盘已有分区 |
| n | 新建分区(主分区 / 扩展分区 / 逻辑分区) |
| d | 删除已有分区 |
| t | 修改分区系统类型(比如 swap 交换分区) |
| w | 保存分区表,退出(最重要) |
| q | 不保存任何修改,直接退出 |
以上完成后,进行重启,格式化,最后挂载使用
# 重启partprobe# 格式化mkfs.xfs /dev/某个硬盘# 挂载mount/dev/某个硬盘 /某个目录GPT 分区 使用 gdisk
其系统默认没有 gdisk 需要安装
操作内容基本和 fdisk 一样
交互式操作如下:gdisk /dev/sdb
| 指令 | 功能说明 |
|---|---|
| ? | 查看全部帮助菜单 |
| p | 列出硬盘现有所有分区 |
| n | 新建 GPT 分区 |
| d | 删除指定分区 |
| t | 修改分区类型(swap、Linux 文件系统等) |
| x | 高级功能(备份分区表、修复分区) |
| w | 写入分区表,保存修改并退出 |
| q | 不保存改动,直接退出 |
最后也是需要重启,格式化,挂载验证
wipefs 用来查看和清除磁盘信息
# 查看磁盘管理信息[root@centos7 ~]# wipefs /dev/sdb# 清除未挂载磁盘的分区表[root@centos7 ~]# wipefs -a /dev/sdb# 禁止使用 -f 强制清除分区表[root@centos7 ~]# wipefs -fa /dev/sdb# 彻底擦除ddif=/dev/zeroof=/dev/sdbparted 可用 MBR GPT
基础指令一样 都是 -l
交互式界面操作
| 命令 | 功能 |
|---|---|
| print / p | 查看磁盘分区详情 |
| mklabel gpt | 将磁盘改成 GPT 分区表(推荐大容量盘) |
| mklabel msdos | 改成老式 MBR 分区表 |
| mkpart | 创建新分区 |
| rm 分区号 | 删除分区 |
| resizepart | 扩容 / 缩小分区大小(fdisk/gdisk 做不到) |
| quit | 退出(parted 修改即时生效,无需 w 保存) |
注:parted 所操作的命令立即生效
fdisk gdisk parted 区别
| 对比维度 | fdisk | gdisk | parted |
|---|---|---|---|
| 支持分区表 | 仅 MBR | 仅 GPT | MBR、GPT 全都支持 |
| 最大磁盘容量 | ≤2TB | >2TB | >2TB 无限大 |
| 分区数量 | 最多 4 主分区 | 128 个主分区 | 不限(GPT 下 128) |
| 修改生效方式 | 保存 w 后需重启 /partprobe | 需要刷新分区表 | 改动立即生效 |
| 分区扩容缩容 | 不支持 | 不支持 | 原生支持 resize 调整分区大小 |
| 使用难度 | 简单 | 适中 | 功能最全,略微复杂 |
| 适用场景 | 老旧小硬盘练习 | 单纯 GPT 分区 | 生产环境大容量硬盘、分区扩容 |
持久化挂载
要想持久化挂载 只需要通过vim /etc/fstab文件中添加一个条目
# 首先查看硬盘的详细信息[root@centos7 ~]# blkid /dev/sdb1/dev/sdb1:UUID="f5c35f10-0274-45af-b044-73694989fe01"TYPE="xfs"PARTLABEL="data01"PARTUUID="432d7d79-1a08-4429-bf38-7ab1444a0ab9"# 创建挂载的目录[root@centos7 ~]# mkdir /data01# 添加条目[root@centos7 ~]# vim /etc/fstab # 最后一行增加一个条目UUID="f5c35f10-0274-45af-b044-73694989fe01"/data01 xfs defaults00# 进行挂载[root@centos7 ~]# mount /dev/sdb1 /data01# 取消持久挂载只需删除条目即可- **第一个字段指定设备。**可以使用UUID或device来指定设备。
- **第二个字段是目录挂载点。**通过它可以访问目录结构中的块设备。挂载点必须存在;如果不存在,请使用mkdir命令进行创建。
- 第三个字段包含文件系统类型,如xfs或ext4 。
- 第四个字段是挂载选项,以逗号分隔的。 defaults是一组常用选项。详细信息参考mount(8) 。
- 第五个字段指定dump命令是否备份设备。
- 第六个字段指定fsck顺序字段,决定了在系统启动吋是否应运行fsck命令,以验证文件系统是否干净。 该字段中的值指示了 fsck的运行顺序。 对于XFS文件系统, 请将该字段设为0 ,因为XFS并不使用fsck来检查自己的文件系统状态。 对于ext4 文件系统,如果是根文件系统, 请将该字段设 为 1 ; 如果是其他ext4 文件系统, 则将该字段设为2。 这样, fsck就会先处理根文件系统,然后同步检查不同磁盘上的文件系统,并按顺序检查同一磁盘上的文件系统。
Linux RAID 存储技术
磁盘冗余阵列:把多块物理硬盘合并成一个逻辑盘
两大核心目的:
- 提升读写速度(多块硬盘同时干活)
- 数据冗余备份(坏一块硬盘,数据不丢失)
| RAID 级别 | 硬盘数量要求 | 容量总大小 | 读写性能 | 容错能力(最多坏几块盘) | 核心特点 | 适用场景 |
|---|---|---|---|---|---|---|
| RAID0 | ≥2 块 | 所有硬盘容量相加 | 速度最快 | 0 块,任意一块损坏全部数据丢失 | 只提速、无备份,极度不安全 | 临时缓存、不重要临时文件(生产禁止存放重要数据) |
| RAID1(镜像) | 只能 2 块 | 总容量 = 单块硬盘大小(一半空间存备份) | 读快,写入一般 | 最多坏 1 块盘 | 两块硬盘内容完全一模一样,安全性高 | 系统盘、存放重要小数据 |
| RAID5 | ≥3 块 | 总容量 =(盘数 - 1)× 单盘容量 | 读写均衡 | 最多坏任意 1 块盘 | 奇偶校验分散在所有硬盘,兼顾容量、速度、安全 | 普通文件服务器、企业常规存储(最经典通用) |
| RAID6 | ≥4 块 | 总容量 =(盘数 - 2)× 单盘容量 | 写入略慢于 RAID5 | 可同时坏 2 块硬盘 | 双重校验,容错更高 | 大容量硬盘、对数据安全要求高的存储 |
| RAID10(1+0) | ≥4 块 偶数硬盘 | 总容量 = 总硬盘容量 ÷2 | 读写速度顶尖 | 每组镜像最多坏 1 块 | 先两两镜像(RAID1),再做条带(RAID0),速度 + 安全拉满 | 数据库、网站业务、高并发读写场景(生产首选高性能方案) |
只求速度不要数据:RAID0
两块硬盘存系统稳妥:RAID1
性价比兼顾容量安全:RAID5
大容量硬盘怕双盘损坏:RAID6
数据库高并发读写最优:RAID10
现阶段常用的
| RAID 级别 | 现如今使用场景 | 推荐程度 |
|---|---|---|
| RAID1 | 服务器系统盘 | ⭐⭐⭐⭐⭐ 必选 |
| RAID10 | 数据库、核心业务盘 | ⭐⭐⭐⭐⭐ 生产首选 |
| RAID6 | 大容量归档存储、冷数据 | ⭐⭐⭐⭐ |
| RAID5 | 老旧机房存量设备、小容量低速硬盘 | ⭐ 不建议新部署 |
| RAID0 | 测试、临时缓存 | ⭐ 禁止正式业务使用 |
管理 raid 存储技术的 mdadm 命令
| 参数 | 作用 |
|---|---|
| -C / --create | 创建 RAID 阵列 |
| -v | 显示详细过程 |
| -l | 指定 RAID 级别(0/1/5/6/10) |
| -n | 指定使用几块硬盘组成阵列 |
| -x | 热备盘数量(硬盘坏了自动顶替) |
| -D / --detail | 查看 RAID 阵列详细状态 |
| -S | 停止阵列 |
| -A | 组装、唤醒阵列 |
| -r | 移除故障硬盘 |
| -a | 添加新硬盘进阵列 |
| -G | 扩容 |
以 raid1 为例
[root@server-node1 ~21:47:50]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:00200G0disk ├─sda18:101G0part /boot └─sda28:20199G0part ├─centos-root253:0050G0lvm / ├─centos-swap253:103.9G0lvm[SWAP]└─centos-home253:20145.1G0lvm /home sdb8:16020G0disk sdc8:32020G0disk sdd8:48020G0disk sde8:64020G0disk sdf8:80020G0disk sdg8:96020G0disk sr011:014.4G0rom[root@server-node1 ~22:07:02]# mdadm -C /dev/md1 --level 1 --raid-device 2 /dev/sd{b,c}mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store'/boot'on this device please ensure that your boot-loader understands md/v1.x metadata, or use--metadata=0.90Continue creating array?yesmdadm: Defaulting to version1.2metadata mdadm: array /dev/md1 started.[root@server-node1 ~22:08:13]# mdadm -D /dev/md1/dev/md1: Version:1.2Creation Time:Sun Aug222:08:132026Raid Level:raid1 Array Size:20954112(19.98GiB21.46GB)Used Dev Size:20954112(19.98GiB21.46GB)Raid Devices:2Total Devices:2Persistence:Superblock is persistent Update Time:Sun Aug222:08:462026State:clean, resyncing Active Devices:2Working Devices:2Failed Devices:0Spare Devices:0Consistency Policy:resync Resync Status:31% complete Name:server-node1:1(local tohostserver-node1)UUID:a27a6b5f:22900728:6dd0de65:79f197ae Events:5Number Major Minor RaidDevice State08160activesync/dev/sdb18321activesync/dev/sdc[root@server-node1 ~22:08:46]# mdadm -D /dev/md1/dev/md1: Version:1.2Creation Time:Sun Aug222:08:132026Raid Level:raid1 Array Size:20954112(19.98GiB21.46GB)Used Dev Size:20954112(19.98GiB21.46GB)Raid Devices:2Total Devices:2Persistence:Superblock is persistent Update Time:Sun Aug222:09:592026State:clean Active Devices:2Working Devices:2Failed Devices:0Spare Devices:0Consistency Policy:resync Name:server-node1:1(local tohostserver-node1)UUID:a27a6b5f:22900728:6dd0de65:79f197ae Events:17Number Major Minor RaidDevice State08160activesync/dev/sdb18321activesync/dev/sdc[root@server-node1 ~22:11:03]# lsblk /dev/md1NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md19:1020G0raid1[root@server-node1 ~22:11:22]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:00200G0disk ├─sda18:101G0part /boot └─sda28:20199G0part ├─centos-root253:0050G0lvm / ├─centos-swap253:103.9G0lvm[SWAP]└─centos-home253:20145.1G0lvm /home sdb8:16020G0disk └─md19:1020G0raid1 sdc8:32020G0disk └─md19:1020G0raid1 sdd8:48020G0disk sde8:64020G0disk sdf8:80020G0disk sdg8:96020G0disk sr011:014.4G0rom[root@server-node1 ~22:11:52]# lsblk /dev/sdb /dev/sdcNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk └─md19:1020G0raid1 sdc8:32020G0disk └─md19:1020G0raid1[root@server-node1 ~22:12:34]# mkfs.xfs /dev/md1mkfs.xfs: /dev/md1 appears to contain an existing filesystem(xfs). mkfs.xfs: Use the-foption to force overwrite.[root@server-node1 ~22:12:40]# mkfs.xfs -f /dev/md1meta-data=/dev/md1isize=512agcount=4,agsize=1309632blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0,sparse=0data=bsize=4096blocks=5238528,imaxpct=25=sunit=0swidth=0blks naming=version2bsize=4096ascii-ci=0ftype=1log=internal logbsize=4096blocks=2560,version=2=sectsz=512sunit=0blks, lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0Linux 逻辑卷管理 LVM
物理设备 → PV 物理卷 → VG 卷组 → LV 逻辑卷(最终挂载使用)
| 层级 | 全称 | 大白话解释 |
|---|---|---|
| PV | Physical Volume 物理卷 | 被 LVM 识别的硬盘 / 分区(/dev/sdb、/dev/sdb1),加入资源池的最小单元 |
| VG | Volume Group 卷组 | 多个 PV 拼凑在一起的大空间资源池,一个服务器可以建多个 VG |
| LV | Logical Volume 逻辑卷 | 从 VG 池子中划出一部分空间,就是我们最终挂载使用的分区 |
| FS | 文件系统 | xfs/ext4,格式化 LV 后存放文件 |
PV = 一块块积木硬盘
VG = 积木拼成的大箱子(总存储空间)
LV = 从箱子里隔出来一个个储物格子,格子大小可以随时放大缩小
常用命令
| 功能 | 简洁命令 | 详细查看 |
|---|---|---|
| 物理卷 PV | pvs | pvdisplay |
| 卷组 VG | vgs | vgdisplay |
| 逻辑卷 LV | lvs | lvdisplay |
| 创建 PV | pvcreate 磁盘 | - |
| 创建 VG | vgcreate 组名 磁盘 | - |
| 创建 LV | lvcreate -L 大小 -n lv 名 组名 | - |
| 卸载 PV VG LV | remove | |
| 扩容 LV | lvextend + 空间 /dev/xxx | - |
| 扩容 VG | vgextend 组名 新磁盘 | - |
| 缩减 PV VG LV 文件 | reduce | |
| 数据移动 | pvmove |
逻辑卷设备名支持以下三种格式:
- /dev/vname/lvame
- /dev/mapper/vname-lvame
- /dev/dm-N
他们的空间扩容和缩减都有固定的顺序
一、LV 空间扩容(日常最常用,无需卸载、不停业务)
固定顺序(从上到下执行)
查看 VG 剩余空间:
vgs- 有空闲空间:直接扩容 LV
- 无空闲:先加硬盘 → 创建 PV →
vgextend把 PV 加入 VG
扩充逻辑卷大小:
lvextend给 LV 增加容量刷新文件系统,让系统识别新增空间
- XFS(CentOS7 + 默认):
xfs_growfs 挂载目录 - EXT4:
resize2fs /dev/vg名/lv名
- XFS(CentOS7 + 默认):
顺序口诀:先扩 LV → 再扩文件系统
⚠️ 绝对不能反过来:先刷文件系统再扩 LV 会损坏数据
二、LV 缩减空间(仅 EXT4 支持;XFS 不支持缩减)
缩减必须离线,全程顺序不可逆,错一步丢数据
完整步骤:
- 卸载逻辑卷(必须卸载,无法在线缩容):
umount 挂载点 - 磁盘完整性检测(必做):
e2fsck -f /dev/vg/lv - 先缩小文件系统容量(目标最终大小):
resize2fs /dev/vg/lv 目标容量 - 再缩减 LV 逻辑卷容量:
lvreduce -L 目标容量 /dev/vg/lv - 重新挂载使用:
mount /dev/vg/lv 挂载目录
| 操作类型 | 执行先后顺序 | 注意事项 |
|---|---|---|
| 扩容 LV | lvextend → xfs_growfs/resize2fs | 在线执行,不用卸载 |
| 缩容 LV | 卸载→e2fsck→resize2fs→lvreduce→挂载 | XFS 禁止缩容 |
| 临时卸载 | 关掉占用进程 → umount | - |
| 整套删除 | 卸载 → lvremove → vgremove → pvremove | 和创建顺序完全相反 |
四、彻底删除整套 LVM(销毁 LV→VG→PV,清空所有数据)
逆着创建的顺序删除:
创建顺序:PV → VG → LV → 格式化 → 挂载
删除顺序:
- umount 卸载挂载目录
- 删除逻辑卷:
lvremove - 删除卷组:
vgremove - 清除磁盘 LVM 标记、删除 PV:
pvremove
XFS 文件
XFS 文件支持扩展不支持缩减
扩展:扩展逻辑卷 LV --扩展文件系统
EXT4 文件
EXT4 文件支持扩展和缩减
扩展:扩展逻辑卷 LV --扩展文件系统
XFS 禁止缩容 |
| 临时卸载 | 关掉占用进程 → umount | - |
| 整套删除 | 卸载 → lvremove → vgremove → pvremove | 和创建顺序完全相反 |
四、彻底删除整套 LVM(销毁 LV→VG→PV,清空所有数据)
逆着创建的顺序删除:
创建顺序:PV → VG → LV → 格式化 → 挂载
删除顺序:
- umount 卸载挂载目录
- 删除逻辑卷:
lvremove - 删除卷组:
vgremove - 清除磁盘 LVM 标记、删除 PV:
pvremove
XFS 文件
XFS 文件支持扩展不支持缩减
扩展:扩展逻辑卷 LV --扩展文件系统
EXT4 文件
EXT4 文件支持扩展和缩减
扩展:扩展逻辑卷 LV --扩展文件系统
