跳转到内容

Linux磁盘管理详解

课程说明

接下来主要学习的是Linux磁盘管理的核心操作,包括磁盘信息查看、分区、格式化、挂载/卸载及使用监控。同时补充工作中高频使用的LVM逻辑卷管理基础认知(本节课不涉及命令实操)。磁盘管理是Linux系统管理的基础能力,掌握fdisk(分区)、mkfs(格式化)、mount(挂载)、df(磁盘使用查看)、du(目录大小查看)等核心命令,是存储管理的关键;理解LVM基础则能适配企业级存储管理场景。

安全须知

磁盘操作存在数据丢失风险,所有实验操作请在非生产环境(如VMware虚拟机)中执行:

  1. 操作前务必备份虚拟机快照或重要数据;
  2. 仔细核对操作的磁盘/分区设备名(如/dev/nvme1n1而非系统盘/dev/nvme0n1);
  3. 分区、格式化、卸载等操作执行前,确认目标设备未被挂载或占用。

一、实验环境准备

1. VMware虚拟机添加NVMe硬盘

操作前需关闭Linux虚拟机,按以下步骤添加10GB NVMe实验用硬盘:

  1. 选中目标虚拟机,点击「编辑虚拟机设置」;
  2. 点击「添加」→ 选择「硬盘」→ 下一步;
  3. 选择NVMe控制器(推荐)→ 下一步 → 选择「创建新虚拟磁盘」→ 下一步;
  4. 设置磁盘大小为10GB,保持默认文件名,点击「完成」;
  5. 启动虚拟机,准备后续操作。

2. 验证NVMe硬盘识别状态

启动虚拟机后,执行以下命令确认新增NVMe硬盘(通常为/dev/nvme1n1,系统盘一般为/dev/nvme0n1)被系统识别:

bash
# 方式1:查看所有磁盘设备
fdisk -l
# 方式2:查看块设备信息
lsblk

3. 实验环境配置要求

  • 虚拟机系统:Rocky Linux 9(或CentOS 7/8、Ubuntu 20.04+);
  • 硬件配置:内存≥2GB,CPU≥2核;
  • 存储配置:系统盘≥20GB(NVMe类型),新增实验盘10GB(NVMe类型)。

二、磁盘管理概述

1. 磁盘管理定义

磁盘管理是对Linux存储设备的全生命周期管理,涵盖磁盘分区、格式化、挂载/卸载、性能监控及维护,核心是为系统定义存储设备的使用规则;企业场景中还包含LVM逻辑卷的抽象化管理。

2. 磁盘管理的价值

  • 合理分配存储空间,避免资源浪费;
  • 分离系统文件与用户数据,提升数据安全性和系统稳定性;
  • 按数据类型分区存储,优化系统读写性能;
  • 支撑外部存储设备(如U盘)管理和存储空间扩展;
  • 适配企业级灵活存储需求(如LVM动态扩容)。

3. Linux存储设备基础

(1)常见物理设备

机械硬盘(HDD)、固态硬盘(SSD)、U盘、光盘、网络存储(NFS/Samba)。NVMe SSD是现代服务器主流选择,具备超高读写性能

(2)设备命名规则

Linux对存储设备采用标准化命名,核心规则如下:

设备类型命名格式示例说明
IDE硬盘/dev/hd[a-z]/dev/hda、/dev/hdb老旧接口,几乎不再使用
SATA/SCSI硬盘/dev/sd[a-z]/dev/sda、/dev/sdb传统固态硬盘/机械硬盘命名
NVMe SSD/dev/nvme[0-9]n[1-9]/dev/nvme0n1、/dev/nvme1n1高速固态硬盘专属命名,n前数字为控制器编号,n后为硬盘编号
分区/dev/[设备名]p[数字]/dev/nvme1n1p1、/dev/sda1设备名后加p+数字标识分区(NVMe专属分区命名格式)

(3)命名示例解析

  • /dev/nvme0n1:第1个NVMe控制器下的第1块NVMe硬盘(系统盘);
  • /dev/nvme1n1p1:第2个NVMe控制器下的第1块NVMe硬盘的第1个分区;
  • /dev/nvme1n1:第2个NVMe控制器下的第1块NVMe硬盘(实验盘)。

三、LVM逻辑卷管理(基础认知)

1. 什么是LVM

LVM(Logical Volume Manager,逻辑卷管理)是Linux下对磁盘分区进行抽象管理的技术,它将多个物理磁盘/分区整合为一个“卷组”,再从卷组中划分出“逻辑卷”供系统使用,而非直接操作物理分区。NVMe SSD搭配LVM是企业高性能存储的主流组合

2. 企业场景中LVM的核心价值

传统分区一旦创建,大小固定且无法跨物理磁盘扩展,而LVM解决了这一痛点,是企业生产环境的主流存储管理方式:

  • 动态扩容/缩容:逻辑卷大小可在线调整,无需卸载、无需重新分区;
  • 跨盘整合:将多块物理硬盘的存储空间合并为一个卷组,统一分配使用;
  • 快照备份:支持逻辑卷快照,可快速备份/恢复数据,适配企业数据安全需求;
  • 灵活管理:逻辑卷可按需拆分、合并,适配业务存储需求的动态变化。

3. LVM与传统分区的核心区别

维度传统分区LVM逻辑卷
大小调整需卸载分区,操作复杂且有风险在线调整,无需卸载,灵活安全
跨物理盘扩展不支持支持(卷组可整合多块物理盘)
存储灵活性低(固定大小)高(按需分配、动态调整)
企业适配性仅适用于固定小容量场景适配绝大多数生产环境需求

4. 本节课说明

LVM涉及物理卷(PV)、卷组(VG)、逻辑卷(LV)三层结构及专属命令集,属于进阶存储管理内容;本节课聚焦NVMe硬盘的基础磁盘管理操作,LVM的命令实操将在后续专项课程中讲解,本节仅做认知层面普及,帮助理解企业实际存储管理场景。

四、磁盘信息查看命令

1. fdisk:查看磁盘分区信息

需管理员权限,可查看磁盘大小、分区表类型、分区布局等核心信息:

bash
sudo fdisk -l

2. df:查看磁盘使用情况

常用参数组合-hT(人类可读格式+显示文件系统类型):

bash
df -hT

输出包含文件系统类型、总容量、已用/可用空间、使用率、挂载点。

3. iostat:查看磁盘I/O性能

需先安装sysstat工具,可监控NVMe硬盘的读写次数、数据量、利用率,体现高性能优势:

bash
# 安装依赖
sudo dnf install -y sysstat
# 查看I/O性能(-x:显示扩展统计信息)
sudo iostat -x

4. lsblk:查看块设备详情

-f参数可显示UUID、文件系统类型、挂载点等关键信息,能清晰识别NVMe硬盘及分区:

bash
# 基础信息
lsblk
# 详细信息(含UUID、文件系统)
lsblk -f

五、磁盘分区

1. 分区表类型

类型最大磁盘支持最大分区数适用场景
MBR2TB4个主分区/3主分区+1扩展分区老旧系统、小容量磁盘
GPT18EB128个大容量NVMe硬盘、UEFI启动、现代系统

2. fdisk创建MBR分区(适用于≤2TB NVMe硬盘)

操作前准备:确认实际设备名

重要:在操作前,必须确认您的实际目标硬盘设备名(如用户的/dev/nvme0n2),避免误操作。

磁盘识别方法与局限性

lsblk 命令(基础方法)

bash
lsblk

输出示例

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   19G  0 part /
nvme0n2     259:3    0   10G  0 disk  # 新添加的10GB NVMe硬盘

局限性

  • 在部分系统中可能无法识别刚添加的磁盘
  • 在虚拟机环境中可能需要重启系统或执行设备重新扫描
  • 输出信息相对简单,缺乏详细的分区表信息

多种磁盘识别方法

  1. fdisk -l 命令(推荐):
bash
sudo fdisk -l

目的:查看详细磁盘信息,包含分区表类型、磁盘容量等 适用场景:确认磁盘存在、区分系统盘与新硬盘

  1. dmesg 命令
bash
dmesg | grep -i nvme

目的:查看内核设备检测日志,确认NVMe设备是否被检测到 适用场景:排查设备识别问题

  1. parted -l 命令
bash
sudo parted -l

目的:查看分区信息,支持GPT分区表 适用场景:需要详细分区信息时

  1. lsscsi 命令(如果可用):
bash
lsscsi

目的:查看SCSI设备信息 适用场景:识别SATA/SCSI类型的存储设备

虚拟机环境特殊处理

VMware虚拟机

  • 添加硬盘后,系统可能需要重启才能识别新设备
  • 或执行以下命令重新扫描设备:
bash
# 重新扫描SCSI总线(适用于SATA设备)
echo "- - -" > /sys/class/scsi_host/host0/scan
# 重启udev服务
sudo systemctl restart udev
# 或重启系统(最可靠)
sudo reboot

磁盘识别流程指南

  1. 第一步:使用 lsblk 查看基本块设备信息
  2. 第二步:使用 sudo fdisk -l 确认详细磁盘信息
  3. 第三步:使用 dmesg | grep -i nvme 检查内核检测日志
  4. 第四步:如仍无法识别,尝试执行设备重新扫描或重启系统
  5. 第五步:确认目标设备未被挂载:
bash
mount | grep <target_device>  # 替换为实际设备名

安全提示

  • 系统盘识别:通常为 /dev/nvme0n1,包含启动分区(有 * 标记)
  • 新硬盘识别:通常为 /dev/nvme0n2 或类似名称,无分区信息
  • 操作前确认:再三核对目标设备名,避免误操作系统盘
  • 多方法验证:使用多种命令确认设备存在,确保操作的正确性

操作步骤

  1. 进入fdisk交互模式
bash
sudo fdisk <target_device>  # 替换为实际设备名
  1. 交互模式核心命令解读
  • n:new partition(创建新分区)
  • p:print partition table(查看分区表)
  • d:delete partition(删除分区)
  • t:toggle partition type(修改分区类型)
  • w:write changes(保存并退出)
  • q:quit without saving(放弃修改并退出)
  • m:查看帮助
  1. 创建1GB主分区示例
bash
# 进入交互模式(替换为实际设备名)
sudo fdisk /dev/nvme0n2
# 执行以下交互指令
Command (m for help): n          # 创建新分区
Select (default p): p            # 选择主分区
Partition number (1-4, default 1): 1  # 分区号
First sector (2048-20971519, default 2048):  # 回车使用默认起始扇区
Last sector, +sectors or +size{K,M,G,T,P}: +1G  # 设置分区大小
Command (m for help): p          # 查看分区表(验证)
Command (m for help): w          # 保存退出

参数解读

  • First sector:分区起始扇区,默认2048(跳过前4KB引导区)
  • Last sector:分区结束扇区,可使用+1G表示大小(K=KB, M=MB, G=GB等)
  1. 验证分区创建结果
bash
# 方式1:查看分区详细信息
sudo fdisk -l <target_device>
# 方式2:查看块设备信息
lsblk | grep <target_device>

常见问题处理

  • 提示「Device or resource busy」:确认磁盘未挂载(umount <target_device>)后重试;
  • 分区创建后不显示:执行sudo partprobe <target_device>强制内核重新读取分区表。

3. parted创建GPT分区(适用于>2TB NVMe硬盘)

操作前准备:确认实际设备名

  1. 确认目标NVMe硬盘状态
bash
lsblk | grep <target_device>  # 替换为实际设备名
  1. 确认设备未被挂载
bash
mount | grep <target_device>

操作步骤

  1. 进入parted交互模式
bash
sudo parted <target_device>  # 替换为实际设备名
  1. 交互模式核心命令解读
  • print:查看分区表
  • mklabel gpt:创建GPT分区表
  • mkpart:创建分区
  • rm:删除分区
  • quit:退出
  1. 创建50%容量GPT分区示例
bash
# 进入交互模式(替换为实际设备名)
sudo parted /dev/nvme0n2
# 执行以下交互指令
(parted) mklabel gpt            # 设置分区表类型为GPT
(parted) mkpart                 # 创建分区
Partition name?  []? data1      # 分区名称
File system type?  [ext2]? ext4 # 文件系统类型
Start? 0%                       # 分区起始位置(百分比表示)
End? 50%                        # 分区结束位置(百分比表示)
(parted) print                  # 查看分区表(验证)
(parted) quit                   # 退出

参数解读

  • Start? 0%:分区从磁盘开始位置开始
  • End? 50%:分区到磁盘50%位置结束(使用百分比更直观)
  1. 验证分区创建结果
bash
# 方式1
sudo fdisk -l <target_device>
# 方式2
sudo parted <target_device> print

六、磁盘格式化

格式化的核心是为分区创建文件系统,需管理员权限,操作前确认分区未被挂载。

1. Linux常用文件系统

文件系统核心特点适用场景
ext4稳定可靠、支持大文件Rocky Linux 9默认文件系统
xfs高性能、适配高并发/大文件现代Linux服务器主流选择(NVMe硬盘+LVM逻辑卷常用)
btrfs支持快照、动态扩容需高级存储功能的场景
vfat跨平台兼容U盘、移动硬盘等便携设备
ntfsWindows默认文件系统需与Windows共享的存储设备

2. mkfs格式化操作

前置检查

bash
# 确认分区存在
lsblk | grep <target_partition>  # 替换为实际分区名,如 /dev/nvme0n2p1
# 确认分区未被挂载
mount | grep <target_partition>

核心命令示例与参数解读

bash
# 格式化为ext4(最常用)
sudo mkfs.ext4 <target_partition>
# 格式化为xfs(NVMe硬盘+LVM逻辑卷主流选择)
sudo mkfs.xfs <target_partition>
# 格式化为vfat
sudo mkfs.vfat <target_partition>
# 扩展:ext4格式化并添加标签、设置预留空间
sudo mkfs.ext4 -L data_partition <target_partition> -m 2

参数解读

  • mkfs.ext4:创建ext4文件系统
    • -L:label(设置卷标,方便识别分区)
    • -m:reserved blocks percentage(预留空间百分比,默认5%,可减少至2%提高空间利用率)
  • mkfs.xfs:创建xfs文件系统
    • 适合大文件和高并发场景,是NVMe硬盘的推荐选择
  • mkfs.vfat:创建FAT32文件系统(兼容Windows)

验证格式化结果

bash
# 方式1:查看文件系统类型和UUID
lsblk -f | grep <target_partition>
# 方式2:查看UUID和文件系统详情
sudo blkid <target_partition>

七、磁盘挂载与卸载

1. 临时挂载(重启后失效)

操作步骤

  1. 创建挂载点目录(以/mnt/data为例):
bash
sudo mkdir -p /mnt/data
  1. 执行挂载操作
bash
# 基础挂载(按设备名)
sudo mount <target_partition> /mnt/data  # 替换为实际分区名
# 指定文件系统类型挂载
sudo mount -t ext4 <target_partition> /mnt/data
# 按UUID挂载(推荐,避免设备名变动)
sudo mount UUID="分区实际UUID" /mnt/data

参数解读

  • -t:file system type(指定文件系统类型,如ext4、xfs等)
  • UUID=:使用分区的唯一标识符挂载,避免设备名变动导致挂载失败
  1. 验证挂载结果
bash
# 方式1:查看挂载状态
mount | grep <target_partition>
# 方式2:查看文件系统信息
df -hT | grep /mnt/data
# 方式3:测试写入
sudo touch /mnt/data/test.txt
ls -la /mnt/data/test.txt
  1. 卸载磁盘
bash
# 按设备名卸载
sudo umount <target_partition>
# 按挂载点卸载
sudo umount /mnt/data
# 强制卸载(仅紧急情况使用)
sudo umount -f /mnt/data

注意:强制卸载可能导致数据损坏,仅在常规卸载失败时使用。

  1. 验证卸载结果
bash
mount | grep <target_partition>

2. 永久挂载(重启后生效)

通过编辑/etc/fstab文件实现,核心是写入分区UUID、挂载点、文件系统类型等信息;LVM逻辑卷的永久挂载逻辑与传统分区一致,仅设备名变为逻辑卷路径(如/dev/mapper/vg_data-lv_data)。

操作步骤

  1. 获取分区UUID和文件系统类型
bash
# 方式1:查看所有块设备信息
lsblk -f
# 方式2:查看指定分区详情
sudo blkid <target_partition>
  1. 编辑/etc/fstab文件
bash
sudo vim /etc/fstab

添加以下内容(替换为实际UUID):

# 格式:UUID=分区UUID 挂载点 文件系统类型 挂载选项 0 0
UUID=12345678-1234-1234-1234-1234567890ab /mnt/data ext4 defaults 0 0
  1. 验证配置(关键步骤,避免重启后系统异常):
bash
# 加载fstab配置
sudo mount -a
# 检查错误
dmesg | tail
# 确认挂载成功
mount | grep /mnt/data

核心挂载选项详解

选项含义适用场景
defaults默认选项(rw、suid、dev、exec、auto、nouser、async)一般使用场景
rw/ro可读写/只读rw用于需要写入的分区,ro用于系统恢复或数据保护
auto/noauto开机自动挂载/不自动挂载auto用于固定存储,noauto用于移动设备
exec/noexec允许/禁止执行文件exec用于可执行文件分区,noexec用于数据分区提高安全性
sync/async同步/异步写入sync安全性高但性能低,async性能高但可能丢失数据
nosuid禁止setuid位提高安全性,防止权限提升攻击
nodev禁止特殊设备文件提高安全性,适用于非系统分区

八、磁盘使用情况监控

1. 磁盘空间与inode监控

bash
# 磁盘空间(人类可读+文件系统类型)
df -hT
# inode使用情况(文件系统索引节点)
df -iT

2. 目录大小分析

bash
# 查看当前目录下所有子目录/文件总大小
du -hs *
# 查看指定目录总大小
du -hs /home
# 查看目录下一级子目录大小
du -h --max-depth=1 /home

3. 大文件查找

bash
# 查找系统中大于100MB的文件(屏蔽错误输出)
find / -type f -size +100M 2>/dev/null
# 查找并按大小排序(显示前10个)
find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -rh -k5 | head -10

4. 实时磁盘I/O监控

bash
# 安装iotop工具
sudo dnf install -y iotop
# 实时监控NVMe硬盘的I/O性能
sudo iotop

九、常见问题与解决方案

1. 设备识别问题

  • 症状:添加新硬盘后系统未识别、设备名与预期不符;
  • 排查
    bash
    # 查看所有块设备
    lsblk
    # 查看详细磁盘信息
    sudo fdisk -l
    # 检查内核日志
    dmesg | grep -i nvme
  • 解决
    • 重启系统让内核重新扫描设备
    • 检查VMware虚拟机设置是否正确添加硬盘
    • 确认硬盘连接状态

2. 磁盘空间不足

  • 症状:提示「No space left on device」、无法创建文件;
  • 排查df -hT(空间)、df -iT(inode);
  • 解决:清理大文件/日志、扩展磁盘空间(传统分区需重新分区,LVM可直接扩容)、优化inode分配(新分区)。

3. 文件系统损坏

  • 症状:挂载失败、系统提示文件系统错误;
  • 解决:卸载分区后执行修复命令:
    bash
    # 修复ext4
    sudo fsck.ext4 <target_partition>
    # 修复xfs(NVMe硬盘+LVM逻辑卷常用)
    sudo xfs_repair <target_partition>

4. 磁盘I/O性能下降

  • 症状:系统响应慢、读写速度降低;
  • 解决:检查磁盘坏道、清理碎片(ext系列)、优化挂载选项、更换更高性能NVMe硬盘;LVM场景可通过调整逻辑卷条带化策略优化I/O。

5. 挂载失败

  • 症状:执行mount命令失败,提示各种错误;
  • 排查
    • 确认分区存在且未被挂载
    • 检查文件系统是否损坏
    • 确认挂载点目录存在
  • 解决
    • 修复文件系统
    • 创建挂载点目录
    • 检查/etc/fstab配置

6. 设备名变动

  • 症状:重启后设备名从/dev/nvme1n1变为/dev/nvme0n2等;
  • 解决:使用UUID挂载方式,避免设备名变动影响:
    bash
    # 获取UUID
    sudo blkid <target_partition>
    # 在/etc/fstab中使用UUID
    UUID=xxx /mnt/data ext4 defaults 0 0

十、命令速查

命令功能示例参数说明
fdisk -l查看磁盘分区信息sudo fdisk -l-l:列出所有磁盘详细信息
df -hT查看磁盘空间使用情况df -hT-h:人类可读格式,-T:显示文件系统类型
df -iT查看inode使用情况df -iT-i:显示inode信息
lsblk -f查看块设备详情lsblk -f-f:显示文件系统类型和UUID
mkfs.ext4格式化为ext4文件系统sudo mkfs.ext4 <target_partition>-L:设置卷标,-m:预留空间百分比
mkfs.xfs格式化为xfs文件系统(NVMe+LVM常用)sudo mkfs.xfs <target_partition>适合大文件和高并发场景
mount挂载磁盘sudo mount <target_partition> /mnt/data-t:指定文件系统类型,UUID=:使用UUID挂载
umount卸载磁盘sudo umount <target_partition>-f:强制卸载(紧急情况使用)
blkid查看设备UUIDsudo blkid <target_partition>显示设备UUID和文件系统信息
du -hs查看目录大小du -hs /home-h:人类可读格式,-s:仅显示总和
find / -type f -size +100M查找大文件find / -type f -size +100M 2>/dev/null-type f:仅查找文件,-size +100M:大于100MB
fsck.ext4修复ext4文件系统sudo fsck.ext4 <target_partition>修复ext4文件系统错误
xfs_repair修复xfs文件系统(NVMe+LVM常用)sudo xfs_repair <target_partition>修复xfs文件系统错误
partprobe强制内核重新读取分区表sudo partprobe <target_device>分区后执行,使分区立即可见
iostat -x查看磁盘I/O性能sudo iostat -x-x:显示扩展统计信息

课程总结

Linux磁盘管理核心流程为「识别磁盘→分区→格式化→挂载」,结合企业实际场景补充核心认知:

  1. 基础操作fdisk -l(分区)、df -hT(空间)、lsblk -f(设备详情)、mkfs(格式化)、mount(挂载)是核心基础;
  2. 分区选型:MBR(≤2TB)、GPT(>2TB)按需选择,NVMe硬盘优先选GPT分区表,企业场景中LVM逻辑卷可突破传统分区的大小限制;
  3. 文件系统:ext4通用,xfs是NVMe硬盘+LVM逻辑卷的主流选择
  4. 挂载策略:临时挂载用mount,永久挂载配置/etc/fstab(推荐UUID方式,避免设备名变动);
  5. 企业延伸:LVM是生产环境主流存储管理方式,核心优势是动态扩容、跨盘整合,搭配NVMe硬盘可实现高性能灵活存储,本节课仅做基础认知,请继续学习 LVM逻辑卷管理详解 掌握进阶实操

核心原则:操作前确认设备名、备份数据,避免误操作系统盘导致数据丢失;理解基础磁盘操作是掌握LVM的前提。

重要提示:本教程中的<target_device><target_partition>为占位符,请根据实际情况替换为您的设备名(如/dev/nvme0n2/dev/nvme0n2p1等)。

课后练习

基础练习(必做):分区、格式化、临时挂载

  1. 确认设备存在:用lsblk确认新增的NVMe硬盘已识别(如用户的/dev/nvme0n2);
  2. 创建分区:用fdisk在目标硬盘上创建1个2GB的MBR主分区;
  3. 格式化分区:将创建的分区(如/dev/nvme0n2p1)格式化为ext4(或xfs,NVMe+LVM常用)文件系统;
  4. 挂载分区:创建/mnt/test挂载点,挂载该分区;
  5. 验证操作:验证挂载状态,并在挂载点创建测试文件。

进阶练习(选做):永久挂载配置

  1. 获取UUID:用blkid获取创建的分区UUID;
  2. 配置fstab:编辑/etc/fstab,添加该分区的永久挂载配置;
  3. 验证配置:执行mount -a验证配置无错误;
  4. 测试重启:重启系统,确认分区自动挂载。

实战练习(选做):磁盘监控与分析

  1. 查看磁盘使用:用df -hT查看系统所有分区的使用情况;
  2. 查找大文件:查找系统中大于500MB的文件并按大小排序;
  3. 分析目录大小:分析/home目录下各子目录的空间占用;
  4. 监控I/O性能:安装iotop并实时监控NVMe硬盘的I/O性能;
  5. 思考练习:如果该NVMe分区是LVM逻辑卷,当空间不足时,相比传统分区有哪些更便捷的处理方式?

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径