【Linux运维极简教程】07-磁盘管理与LVM
07 - 磁盘管理与 LVM一、磁盘管理基础1.1 磁盘识别# 查看所有磁盘lsblk# 最直观fdisk-l# 详细信息ls-l/dev/sd*# 设备文件# 查看磁盘使用情况df-h# 文件系统使用情况df-Th# 显示文件系统类型df-i# 查看 inode 使用情况# 查看目录/文件占用空间du-sh/var/log# 查看目录总大小du-sh/*|sort-rh# 根目录下各目录大小排序du-h--max-depth1/var# 查看一级子目录大小1.2 磁盘命名规则设备名说明/dev/sda第一块 SCSI/SATA/USB 磁盘/dev/sdb第二块磁盘/dev/nvme0n1第一块 NVMe SSD/dev/vda虚拟磁盘KVM/dev/sda1第一块磁盘的第一个分区二、磁盘分区2.1 分区表类型类型最大磁盘最大分区数说明MBR (msdos)2TB4 主分区或 3 主 1 扩展传统方案GPT18EB128 分区现代推荐2.2 fdisk 分区MBR 2TB# 对 /dev/sdb 进行分区fdisk/dev/sdb# 交互操作# n - 新建分区# p - 主分区 / e - 扩展分区# 分区号、起始扇区、大小# t - 修改分区类型如 8e 为 LVM# p - 打印分区表# w - 保存并退出# q - 不保存退出2.3 parted 分区GPT 2TB 推荐# 交互模式parted/dev/sdb# 设置分区表类型为 GPT(parted)mklabel gpt# 创建分区(parted)mkpart primary0%100%# 使用全部空间(parted)mkpart primary ext4 0GB 500GB# 指定大小# 打印分区表(parted)print# 退出(parted)quit# 命令行一键操作parted/dev/sdb mklabel gptparted/dev/sdb mkpart primary0%100%2.4 分区对齐检查# 查看分区对齐情况parted/dev/sdb align-check optimal1三、文件系统3.1 创建文件系统格式化# 格式化为 ext4mkfs.ext4 /dev/sdb1# 格式化为 xfsmkfs.xfs /dev/sdb1# 格式化时指定参数mkfs.ext4-b4096-Ldata_disk /dev/sdb1# -b 块大小 -L 卷标# 格式化为 swapmkswap/dev/sdb23.2 挂载与卸载# 临时挂载mount/dev/sdb1 /data# 指定文件系统类型挂载mount-text4 /dev/sdb1 /data# 查看挂载情况mount|grepsdb1df-h/data# 卸载umount/dataumount/dev/sdb1# 强制卸载设备忙时umount-l/data# 懒卸载等不忙时自动卸载fuser-km/data# 杀掉占用目录的进程后再卸载3.3 开机自动挂载 - /etc/fstab# 编辑 /etc/fstab# 格式设备 挂载点 文件系统类型 挂载选项 dump fsck顺序/dev/sdb1 /data ext4 defaults00# 推荐使用 UUID 代替设备名# 获取 UUIDblkid /dev/sdb1# UUIDa1b2c3d4-... /data ext4 defaults 0 0# 测试 fstab 配置是否正确重要重启前必须验证mount-afstab 挂载选项选项说明defaultsrw, suid, dev, exec, auto, nouser, asyncnoexec不允许执行二进制文件nosuid不允许 setuid/setgidnoatime不更新访问时间提升性能nodiratime不更新目录访问时间datawritebackext4 写回模式性能优先数据安全降低3.4 swap 交换分区管理# 查看 swap 使用情况free-hswapon-s# 创建 swap 分区mkswap/dev/sdb2swapon/dev/sdb2# 创建 swap 文件不需要额外分区ddif/dev/zeroof/swapfilebs1Mcount2048# 创建 2GB 文件chmod600/swapfilemkswap/swapfileswapon/swapfile# 永久生效echo/swapfile swap swap defaults 0 0/etc/fstab# 调整 swappiness0-100值越低越倾向于使用物理内存sysctlvm.swappiness10# 临时echovm.swappiness10/etc/sysctl.conf# 永久# 关闭 swapswapoff /swapfile四、LVM 逻辑卷管理LVMLogical Volume Manager是 Linux 的高级磁盘管理方案支持动态扩容、快照等功能。4.1 LVM 架构物理磁盘 (PV) └── 卷组 (VG) └── 逻辑卷 (LV) └── 文件系统PV (Physical Volume) 物理卷磁盘或分区 VG (Volume Group) 卷组PV 的集合 LV (Logical Volume) 逻辑卷从 VG 中分配空间 PE (Physical Extent) 最小分配单元默认 4MB4.2 创建 LVM# 1. 将分区/磁盘创建为 PV物理卷pvcreate /dev/sdb1 /dev/sdc1# 查看 PVpvdisplay pvs# 2. 创建 VG卷组vgcreate vg_data /dev/sdb1 /dev/sdc1# 指定 PE 大小vgcreate-s16M vg_data /dev/sdb1# 查看 VGvgdisplay vgs# 3. 创建 LV逻辑卷# 创建 50GB 的逻辑卷lvcreate-L50G-nlv_data vg_data# 使用全部剩余空间lvcreate-l100%FREE-nlv_data vg_data# 创建占 VG 50% 的逻辑卷lvcreate-l50%VG-nlv_data vg_data# 查看 LVlvdisplay lvs# 4. 格式化逻辑卷mkfs.xfs /dev/vg_data/lv_data# 5. 挂载mkdir/datamount/dev/vg_data/lv_data /data# 6. 开机自动挂载echo/dev/vg_data/lv_data /data xfs defaults 0 0/etc/fstab4.3 LVM 扩容场景一VG 有剩余空间直接扩容 LV# 扩容 LV20Glvextend-L20G /dev/vg_data/lv_data# 扩容到指定大小lvextend-L100G /dev/vg_data/lv_data# 使用全部剩余空间lvextend-l100%FREE /dev/vg_data/lv_data# 扩展文件系统必须否则操作系统看不到新空间# xfs 文件系统xfs_growfs /data# ext4 文件系统resize2fs /dev/vg_data/lv_data场景二VG 没有剩余空间先扩容 VG# 1. 新增磁盘创建 PVpvcreate /dev/sdd# 2. 将 PV 加入 VGvgextend vg_data /dev/sdd# 3. 扩容 LVlvextend-L50G /dev/vg_data/lv_data# 4. 扩展文件系统xfs_growfs /data# xfsresize2fs /dev/vg_data/lv_data# ext44.4 LVM 缩容注意xfs 文件系统不支持缩容只有 ext4 支持。# 1. 卸载文件系统umount/data# 2. 检查文件系统e2fsck-f/dev/vg_data/lv_data# 3. 缩小文件系统resize2fs /dev/vg_data/lv_data 30G# 4. 缩小 LVlvreduce-L30G /dev/vg_data/lv_data# 5. 重新挂载mount/dev/vg_data/lv_data /data4.5 LVM 快照LVM 快照可以创建文件系统的一致性副本常用于备份。# 创建快照大小一般为源 LV 的 10%~20%lvcreate-L5G-s-nlv_data_snap /dev/vg_data/lv_data# 挂载快照mkdir/mnt/snapmount/dev/vg_data/lv_data_snap /mnt/snap# 从快照中备份数据tar-czf/backup/data_snapshot.tar.gz-C/mnt/snap.# 备份完成后删除快照umount/mnt/snap lvremove-f/dev/vg_data/lv_data_snap五、实战场景场景一新增加磁盘并挂载#!/bin/bash# mount_new_disk.sh - 挂载新磁盘DISK/dev/sdbMOUNT_POINT/data# 1. 确认磁盘存在lsblk$DISK# 2. 分区parted$DISKmklabel gptparted$DISKmkpart primary xfs0%100%# 3. 格式化mkfs.xfs${DISK}1# 4. 创建挂载点mkdir-p$MOUNT_POINT# 5. 获取 UUIDUUID$(blkid-sUUID-ovalue ${DISK}1)# 6. 写入 fstabechoUUID$UUID$MOUNT_POINTxfs defaults,noatime 0 0/etc/fstab# 7. 挂载并验证mount-adf-h$MOUNT_POINTecho磁盘$DISK已挂载到$MOUNT_POINT场景二根分区满了通过 LVM 扩容# 1. 查看当前情况df-h/ lsblk lvs# 2. 云服务器通常可以直接添加磁盘或扩容现有磁盘# 假设新增了 /dev/sdb# 3. 创建 PV 并加入根分区所在的 VGpvcreate /dev/sdb vgextend centos /dev/sdb# 假设 VG 名为 centos# 4. 扩容根 LVlvextend-l100%FREE /dev/centos/root# 5. 扩展文件系统xfs_growfs /# CentOS 默认 xfs# 6. 验证df-h/场景三排查磁盘空间满# 1. 查看哪个分区满了df-h# 2. 查看大文件find/-typef-size1G2/dev/nulldu-ah/|sort-rh|head-20# 3. 常见空间杀手日志文件du-sh/var/log/* journalctl --disk-usage# 4. 清理 journal 日志journalctl --vacuum-time7d journalctl --vacuum-size500M# 5. 查找已删除但未释放空间的文件lsof|grepdeleted# 需要 kill 占用该文件的进程才能释放空间六、小结本篇介绍了磁盘分区fdisk/parted、文件系统创建与挂载、swap 管理以及 LVM 逻辑卷管理。LVM 是生产环境磁盘管理的推荐方案其动态扩容能力可以避免停机加盘的麻烦。上一篇06 - 网络配置与管理下一篇08 - Shell 脚本编程入门