Linux中存储的基本管理

Linux 存储管理的核心是对块设备(硬盘、分区、逻辑卷等)的识别、分区、格式化、挂载及后续维护,需遵循 “硬件→分区→文件系统→目录树” 的层级逻辑。以下从基础到进阶,系统讲解 Linux 存储基本管理的关键知识点与操作。

一、存储设备的识别

Linux 中所有存储硬件(如硬盘、U 盘、SSD)均以块设备文件形式存在于 /dev 目录下,需先识别设备再进行后续操作。

1. 常见块设备命名规则

不同类型的存储设备,其 /dev 下的命名有固定规律:
设备类型 命名格式 示例 说明
SATA/SAS 硬盘 /dev/sd[a-z] /dev/sda/dev/sdb 第一个硬盘为 sda,依次类推
NVMe 硬盘 /dev/nvme[n]n[p] /dev/nvme0n1 NVMe 控制器 0 的第一个命名空间
分区 /dev/sd[a-z][1-] /dev/sda1/dev/sdb2 硬盘 sda 的第一个分区
逻辑卷(LVM) /dev/mapper/[vg-lv] 或 /dev/[vg]/[lv] /dev/mapper/vg0-lv_root/dev/vg0/lv_home 卷组 vg0 下的逻辑卷 lv_root
软件 RAID /dev/md[0-9] /dev/md0 第一个软件 RAID 设备

2. 识别设备的核心命令

通过以下命令查看系统已识别的存储设备及分区信息:
命令 功能说明 常用选项与示例
lsblk 以树形结构显示块设备(推荐,直观) lsblk -f:显示设备 + 文件系统信息
fdisk -l 查看分区表信息(支持 MBR/GPT,需 root 权限) fdisk -l /dev/sdb:查看指定硬盘 sdb
parted -l 查看分区表(更适合 GPT 分区,支持大硬盘) parted -l:查看所有设备分区
blkid 查看块设备的 UUID(唯一标识,用于永久挂载) blkid /dev/sda1:查看分区 sda1 的 UUID
示例:用 lsblk -f 查看设备信息
[root@localhost ~]# lsblk -f
NAME   FSTYPE  LABEL UUID                                 MOUNTPOINT
sda                                                        
├─sda1 ext4          5f4dcc3b-0000-0000-0000-000000000001 /boot
├─sda2 swap          5f4dcc3b-0000-0000-0000-000000000002 [SWAP]
└─sda3 xfs           5f4dcc3b-0000-0000-0000-000000000003 /
sdb                                                        
└─sdb1 xfs           5f4dcc3b-0000-0000-0000-000000000004 /mnt/data

二、分区管理(MBR vs GPT)

硬盘需先分区(将物理硬盘划分为多个逻辑区域),再格式化文件系统。Linux 支持两种主流分区表格式:MBR 和 GPT。

1. MBR vs GPT 对比

特性 MBR(Master Boot Record) GPT(GUID Partition Table)
支持最大硬盘容量 2TB 18EB(几乎无限制)
最大分区数 4 个主分区 或 3 主 + 1 扩展(扩展分区下可分多个逻辑分区) 128 个主分区(无扩展 / 逻辑分区概念)
分区标识 分区类型 ID(如 83=Linux 分区,82=Swap) GUID(全局唯一标识)
兼容性 支持所有系统(旧主板默认) 需主板支持 UEFI 启动(新主板默认)
数据恢复 无备份(分区表损坏后难恢复) 分区表备份(在硬盘首尾两端)

2. 分区工具:fdisk(MBR)与 parted(GPT)

(1)fdisk:管理 MBR 分区(适合 ≤2TB 硬盘)

操作步骤示例:给 /dev/sdb 硬盘创建 1 个 100GB 的 Linux 分区
  1. 进入 fdisk 交互模式(需 root):
    fdisk /dev/sdb
  2. 输入命令操作(交互提示见 m 帮助):
    • n:新建分区 → 选择 p(主分区)→ 分区号(默认 1)→ 起始扇区(默认)→ 结束扇区(输入 +100G 表示 100GB)
    • t:修改分区类型 → 输入 83(Linux 分区,默认即 83)
    • w:保存分区表(此步执行后分区才生效,不可逆!
  3. 刷新分区表(无需重启):
    partprobe /dev/sdb
    

(2)parted:管理 GPT 分区(适合 ≥2TB 硬盘)

操作步骤示例:给 /dev/sdc 硬盘创建 GPT 分区表并新建 200GB 分区
  1. 进入 parted 交互模式:
    parted /dev/sdc
  2. 输入命令操作:
    • mklabel gpt:创建 GPT 分区表(会清除硬盘所有数据!
    • mkpart primary xfs 0% 200GB:新建主分区(文件系统类型暂填 xfs,起始位置 0%,结束位置 200GB)
    • print:查看分区结果
    • quit:退出(自动保存)

三、文件系统创建与维护

分区后需格式化(创建文件系统),才能被 Linux 识别并存储文件。Linux 支持多种文件系统,需根据场景选择。

1. 主流文件系统对比

文件系统 特点 适用场景 缺点
ext4 成熟稳定、支持日志(防数据丢失)、兼容所有 Linux 发行版 系统分区(/、/boot)、普通数据分区 单个文件最大 16TB,不支持快照、动态扩容(需离线)
XFS 高性能(大文件读写快)、支持在线扩容、最大单个文件 8EB 大文件存储(视频、数据库)、CentOS 7+ 默认根分区 不支持在线缩容,删除大量小文件时性能较差
Btrfs 支持快照、在线扩缩容、RAID 功能、数据校验 需灵活管理的场景(如虚拟机存储) 稳定性略逊于 ext4/XFS,部分发行版默认不支持
Swap 虚拟内存分区(无实际文件系统,用于内存溢出时暂存数据) Swap 分区(内存不足时使用) 不能挂载为目录,仅作虚拟内存

2. 创建文件系统:mkfs 命令

mkfs 是创建文件系统的通用命令,需指定文件系统类型(通过子命令或 -t 选项)。
命令格式 功能说明 示例
mkfs.ext4 /dev/[分区] 创建 ext4 文件系统 mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/[分区] 创建 XFS 文件系统 mkfs.xfs /dev/sdc1
mkswap /dev/[分区] 创建 Swap 分区(特殊文件系统) mkswap /dev/sdd1
mkfs -t btrfs /dev/[分区] 用 -t 指定文件系统类型创建 mkfs -t btrfs /dev/sde1

3. 文件系统维护:检查与修复

当文件系统损坏(如突然断电)时,需通过工具检查修复(修复前建议备份数据!)。
工具 支持文件系统 功能说明 示例
e2fsck ext2/ext3/ext4 检查并修复 ext 系列文件系统(不可挂载时用) e2fsck -f /dev/sdb1-f 强制检查)
xfs_repair XFS 检查并修复 XFS 文件系统(不可挂载时用) xfs_repair /dev/sdc1
fsck 通用 自动识别文件系统并调用对应工具检查(不推荐主动用) fsck /dev/sdb1

四、挂载管理(将文件系统关联到目录树)

Linux 中,文件系统必须挂载到某个目录(挂载点),才能通过目录树访问其中的文件。挂载分为「临时挂载」和「永久挂载」。

1. 核心概念

  • 挂载点:一个空目录(若目录非空,挂载后原内容会被隐藏,卸载后恢复)。
  • UUID:块设备的唯一标识(即使设备名变化,UUID 不变,适合永久挂载)。
  • /etc/fstab:系统启动时自动挂载文件系统的配置文件(永久挂载需编辑此文件)。

2. 临时挂载:mount 命令

临时挂载仅当前会话生效,重启后失效。

命令格式

mount /dev/[文件系统] /[挂载点目录]

示例

  1. 创建挂载点(必须是空目录):
    mkdir -p /mnt/data  # -p 确保父目录存在
  2. 挂载 ext4 分区 /dev/sdb1 到 /mnt/data
    mount /dev/sdb1 /mnt/data
    
  3. 挂载 Swap 分区(特殊挂载,用 swapon):
    swapon /dev/sdd1  # 启用 Swap;关闭用 swapoff /dev/sdd1
  4. 查看已挂载的文件系统:
    mount  # 查看所有挂载
    df -h  # 查看挂载点、已用/剩余空间(-h 人性化显示)
    

3. 永久挂载:编辑 /etc/fstab

通过 /etc/fstab 配置,实现系统开机自动挂载(编辑前务必备份文件!)。

/etc/fstab 格式

每行对应一个挂载配置,字段用空格 / 制表符分隔:
<设备标识>  <挂载点>  <文件系统类型>  <挂载选项>  <dump>  <pass>
  • 设备标识:可填 /dev/sdb1(设备名)或 UUID=xxx(推荐,更稳定)。
  • 挂载选项:常用 defaults(包含 rw, suid, dev, exec, auto, nouser, async),特殊需求可加 noexec(禁止执行文件)、ro(只读)等。
  • dump:0(不备份)、1(备份,通常根分区设 1)。
  • pass:0(不检查)、1(优先检查,根分区设 1)、2(次优先检查,其他分区设 2)。

配置示例(永久挂载 /dev/sdb1)

  1. 获取 /dev/sdb1 的 UUID:
    blkid /dev/sdb1  # 输出类似:/dev/sdb1: UUID="5f4dcc3b-1234-5678-90ab-cdef00000001" TYPE="ext4"
  2. 编辑 /etc/fstab(用 vim 或 nano):
    vim /etc/fstab
    

    添加一行:

    UUID=5f4dcc3b-1234-5678-90ab-cdef00000001  /mnt/data  ext4  defaults  0  2
    
  3. 验证配置(避免开机挂载失败):
    mount -a  # 加载 /etc/fstab 所有配置,无报错则正常
    

风险提示

若 /etc/fstab 配置错误(如 UUID 输错、挂载点不存在),系统可能无法开机。此时需进入救援模式,注释错误行并重新挂载。

五、进阶:逻辑卷管理(LVM)

传统分区的大小固定,无法动态调整(需卸载后扩容 / 缩容)。LVM(Logical Volume Manager) 通过 “物理卷→卷组→逻辑卷” 的层级,实现存储的动态扩容 / 缩容,适合需要灵活管理的场景(如服务器数据分区)。

1. LVM 核心组件

组件 英文 作用说明 示例
物理卷 PV(Physical Volume) 将分区 / 硬盘封装为 LVM 可识别的 “物理块” /dev/sdb1/dev/sdc1
卷组 VG(Volume Group) 将多个 PV 合并为一个 “存储池”(资源池) vg_data(卷组名)
逻辑卷 LV(Logical Volume) 从 VG 中划分出的 “虚拟分区”(可动态调整) lv_doc(逻辑卷名)

2. LVM 基本操作流程

以 “创建 LVM 并挂载” 为例,步骤如下:

步骤 1:安装 LVM 工具(部分系统默认已装)

# CentOS/RHEL
yum install -y lvm2
# Ubuntu/Debian
apt install -y lvm2

步骤 2:创建物理卷(PV)

pvcreate /dev/sdb1 /dev/sdc1  # 将两个分区封装为 PV
pvs  # 查看 PV 状态(简短)
pvdisplay  # 查看 PV 详细信息

步骤 3:创建卷组(VG)

vgcreate vg_data /dev/sdb1 /dev/sdc1  # 用两个 PV 创建卷组 vg_data
vgs  # 查看 VG 状态
vgdisplay  # 查看 VG 详细信息(含剩余空间)

步骤 4:创建逻辑卷(LV)

从 vg_data 中划分 200GB 逻辑卷 lv_doc
lvcreate -L 200G -n lv_doc vg_data  # -L 指定大小,-n 指定名称
lvs  # 查看 LV 状态
lvdisplay  # 查看 LV 详细信息(含路径:/dev/vg_data/lv_doc)

步骤 5:格式化 LV 并挂载

# 格式化 LV 为 XFS 文件系统
mkfs.xfs /dev/vg_data/lv_doc
# 创建挂载点
mkdir -p /mnt/doc
# 永久挂载(编辑 /etc/fstab)
echo "/dev/vg_data/lv_doc  /mnt/doc  xfs  defaults  0  2" >> /etc/fstab
# 加载配置
mount -a

步骤 6:动态扩容 LV(示例:给 lv_doc 增加 100GB)

  1. 先确保 VG 有剩余空间(vgs 查看),若不足需先添加新 PV 到 VG:
    # 新增 PV /dev/sdd1 并加入 vg_data
    pvcreate /dev/sdd1
    vgextend vg_data /dev/sdd1
    
  2. 扩容 LV:
    lvextend -L +100G /dev/vg_data/lv_doc  # +100G 表示增加 100GB(直接写 300G 表示总大小)
  3. 扩容文件系统(必须执行,否则 LV 扩容后文件系统不识别新增空间):
    # XFS 文件系统用 xfs_growfs
    xfs_growfs /mnt/doc
    # ext4 文件系统用 resize2fs
    # resize2fs /dev/vg_data/lv_doc
    

六、存储监控与日常维护

1. 查看磁盘使用情况

  • df -h:查看已挂载文件系统的空间使用(-h 人性化显示,-i 查看 inode 使用)。
  • du -sh [目录]:查看目录 / 文件的大小(-s 汇总,-h 人性化,-d 1 显示一级子目录)。
    du -sh /home  # 查看 /home 总大小
    du -hd 1 /var  # 查看 /var 下一级子目录的大小
    

2. 监控磁盘 I/O 性能

  • iostat:查看磁盘读写速率(需安装 sysstat 包):
    iostat -x 2  # 每 2 秒输出一次磁盘 I/O 详细信息(-x 显示扩展统计)
  • iotop:实时查看进程的磁盘 I/O 占用(类似 top,需安装 iotop 包)。

3. 常见问题处理

  • 磁盘满了:用 df -h 定位满的分区,再用 du -sh * 找到大文件 / 目录,删除无用数据(注意:不要删除系统关键文件,如 /var/log 下的日志可清理旧文件)。
  • 挂载点无法卸载:提示 “device is busy”,表示有进程正在使用该挂载点,用 fuser -m /mnt/data 找到占用进程,杀死后再卸载(umount /mnt/data)。

总结

Linux 存储管理的核心流程可概括为:
识别设备(lsblk/fdisk)→ 分区(fdisk/parted)→ 格式化(mkfs)→ 挂载(mount/fstab)→ 维护(LVM / 监控)
需重点掌握:
  • 设备命名规则与识别命令;
  • /etc/fstab 永久挂载配置(避免开机失败);
  • LVM 动态管理(扩容 / 缩容);
  • 日常监控与故障排查(df/du/iostat)。
实际操作中,务必先备份数据,尤其是分区、格式化、LVM 调整等破坏性操作,避免数据丢失。
阅读剩余
THE END