【Linux日新月异(七)】CentOS 7磁盘资源管理深度指南:从分区到性能调优
🌌提供:
1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
📓摘要:
...(有好建议的可以留言哦~~~(●'◡'●))
💾 CentOS 7磁盘资源管理深度指南:从分区到性能调优
磁盘是系统的数据仓库,管理不当要么空间爆炸,要么性能瓶颈!CentOS 7提供了强大的磁盘管理工具链,从传统的
fdisk到现代的lsblk、LVM,掌握这些才能驾驭海量数据!
一、🔍 磁盘信息查看命令
1. lsblk- 块设备树状展示 ⭐
语法:
lsblk [选项] [设备]
核心选项:
-f:显示文件系统类型、UUID、挂载点-p:显示完整设备路径-T:显示设备类型-o:自定义输出列
案例1:查看所有块设备
lsblk
# 输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 30G 0 lvm /└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 100G 0 disk
sr0 11:0 1 1024M 0 rom
输出解析:
- NAME:设备名(
sda=SCSI/SATA磁盘,sr0=光驱) - MAJ:MIN:主设备号:次设备号
- RM:可移动设备(0=不可移动,1=可移动如U盘)
- SIZE:容量
- RO:只读(0=可读写)
- TYPE:类型(disk=磁盘,part=分区,lvm=逻辑卷)
- MOUNTPOINT:挂载点
案例2:查看文件系统和UUID
lsblk -f
# 输出:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 3b5a3e3c-... /boot
└─sda2 LVM2_member 8lKj3e-... ├─centos-root xfs 7c6a1b2a-... /└─centos-swap swap 9d5c4f3b-... [SWAP]
sdb ext4 a1b2c3d4-e5f6-... /data
案例3:自定义输出(监控脚本必备)
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID
# 只显示关键列,脚本解析更方便
⚠️ 注意事项:
- 🔥实时性强:
lsblk直接从内核读取,无需root权限 - 未挂载也显示:即使分区未挂载,lsblk也能看到
- LVM支持:完美展示LVM层次关系
- 对比fdisk:
lsblk查看设备树,fdisk用于分区操作
2. fdisk- 传统分区工具 ⭐
语法:
fdisk [选项] 设备
核心交互命令:
m:帮助菜单p:打印分区表n:新建分区d:删除分区t:修改分区类型w:写入并退出q:不保存退出
案例1:查看分区表
fdisk -l /dev/sda
# 或查看所有磁盘
fdisk -l# 输出:
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b4f7cDevice Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857599 51379200 8e Linux LVM
输出解析:
- Disk:磁盘容量、扇区数
- Units:扇区大小
- Disk label type:分区表类型(dos=MBR,gpt=GPT)
- Device:分区设备名
- Boot:启动分区(
*标记) - Start/End:起始/结束扇区
- Blocks:块数量
- Id:分区类型ID(83=Linux,8e=LVM,82=Swap)
- System:文件系统类型
案例2:新建分区(实战)
# 给新磁盘sdb分区
fdisk /dev/sdb# 交互过程:
Welcome to fdisk (util-linux 2.23.2).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 tableCommand (m for help): n # 新建分区
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p # 主分区
Partition number (1-4, default 1): 1 # 分区号
First sector (2048-209715199, default 2048): # 直接回车(默认)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +50G # 50GBCommand (m for help): p # 查看分区表
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
...Device Boot Start End Blocks Id System
/dev/sdb1 2048 104859647 52428800 83 LinuxCommand (m for help): w # 写入并退出
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.
⚠️ 注意事项:
- 🔥谨慎w操作:
w会立即写入分区表,会破坏数据! - MBR限制:MBR分区表最多4个主分区,需扩展分区
- GPT优势:支持2TB以上磁盘,无4主分区限制
- 分区后:需
partprobe或重启让内核重新读取分区表 - 已有分区:不要对挂载中的分区进行fdisk操作!
3. parted- 现代分区工具(支持GPT)
语法:
parted [选项] 设备 [命令]
核心命令:
print:显示分区表mklabel:创建分区表(msdos/gpt)mkpart:创建分区rm:删除分区resizepart:调整分区大小quit:退出
案例1:创建GPT分区表
# 选择磁盘
parted /dev/sdc# 交互过程:
(parted) print
Error: /dev/sdc: unrecognised disk label(parted) mklabel gpt # 创建GPT分区表(parted) mkpart primary 0% 100GB # 从0到100GB
(parted) mkpart primary 100GB 200GB # 从100GB到200GB(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdc: 214GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 100GB 100GB primary2 100GB 200GB 100GB primary(parted) quit
案例2:非交互式脚本分区(自动化必备)
# 脚本中自动分区
parted -s /dev/sdc mklabel gpt
parted -s /dev/sdc mkpart primary 0% 50GB
parted -s /dev/sdc mkpart primary 50GB 100%# 设置分区名称和文件系统类型
parted -s /dev/sdc name 1 "data1"
parted -s /dev/sdc name 2 "data2"
⚠️ 注意事项:
- 🔥单位问题:parted默认使用MB/GB,不是扇区,更易用
- 对齐问题:加
align-check optimal 1检查分区对齐,提升SSD性能 - 实时生效:parted操作立即生效,无需partprobe
- resize支持:
resizepart可在线调整分区大小(需文件系统支持) - 兼容性:GPT分区在旧系统可能无法识别
4. blkid- 查看块设备UUID和文件系统
语法:
blkid [选项] [设备]
案例1:查看所有设备UUID
blkid
# 输出:
/dev/sda1: UUID="3b5a3e3c-..." TYPE="xfs" PARTUUID="000b4f7c-01"
/dev/mapper/centos-root: UUID="7c6a1b2a-..." TYPE="xfs"
/dev/sdb1: UUID="a1b2c3d4-..." TYPE="ext4" PARTUUID="a1b2c3d4-01"
/dev/sdc1: LABEL="data" UUID="e5f6g7h8-..." TYPE="ext4" PTTYPE="gpt"
案例2:查看特定设备
blkid /dev/sdb1
# 输出:/dev/sdb1: UUID="a1b2c3d4-..." TYPE="ext4"
案例3:只输出UUID(脚本友好)
blkid -s UUID -o value /dev/sdb1
# 输出:a1b2c3d4-e5f6-...
⚠️ 注意事项:
- 🔥
/etc/fstab必备:使用UUID挂载比设备名更可靠(设备名可能变化) - 分区后:新建分区后需
partprobe再blkid才能看到 - LVM:逻辑卷也有UUID,
blkid同样适用 - 性能:
blkid从超级块读取,比lsblk -f更准确
5. df- 查看文件系统磁盘空间 ⭐
语法:
df [选项] [文件/挂载点]
核心选项:
-h:人类可读(自动转换K/M/G)-H:SI单位(1000进制,而非1024)-i:显示inode使用情况-T:显示文件系统类型-t 类型:只显示指定类型(如df -t xfs)
案例1:查看所有挂载点空间
df -h
# 输出:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 30G 15G 16G 48% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sda1 1014M 142M 873M 14% /boot
/dev/sdb1 50G 20G 31G 40% /data
案例2:查看inode使用(排查"空间充足但无法创建文件")
df -i
# 输出:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 15728640 125000 15603640 1% /
/dev/sdb1 3276800 3276800 0 100% /data
# 小文件过多导致inode耗尽,即使空间充足也无法创建新文件!
案例3:查看特定目录所属文件系统
df -h /var/log
# Filesystem Size Used Avail Use% Mounted on
# /dev/mapper/centos-root 30G 15G 16G 48% /
⚠️ 注意事项:
- 🔥可用空间≠总空间-已用:文件系统会保留5%给root(默认)
- tmpfs:内存文件系统,
/dev/shm可用于临时高速存储 - NFS挂载:远程文件系统可能因网络问题显示延迟
- 性能:
df读取/etc/mtab,频繁调用开销小
6. du- 查看目录/文件占用空间 ⭐
语法:
du [选项] [文件/目录]
核心选项:
-h:人类可读-s:汇总(只显示总计,不显示子目录)-a:显示所有文件和目录-c:显示总计--max-depth=N:限制目录深度(最常用!)--time:显示最后修改时间-x:不跨越不同文件系统
案例1:查看当前目录各子目录大小
du -h --max-depth=1 /opt
# 输出:
24K /opt/rh
1.2G /opt/app
15M /opt/scripts
2.5G /opt/data
3.7G /opt
案例2:查看目录总大小(不展开)
du -sh /var/log
# 输出:1.5G /var/log# 查看多个目录并总计
du -shc /var/log /var/spool /tmp
# 1.5G /var/log
# 50M /var/spool
# 100M /tmp
# 1.6G total
案例3:找出占用空间最大的10个目录
du -h /home | sort -hr | head -10
# 或使用ncdu(可视化)
yum install -y ncdu
ncdu /home
案例4:排查日志文件大小
# 查找/var/log下大于100M的文件
find /var/log -type f -size +100M -exec du -h {} \;# 查看最近7天修改的大文件
find /var/log -mtime -7 -type f -exec ls -lh {} \;
⚠️ 注意事项:
- 🔥性能问题:
du会遍历所有文件,大目录执行慢(可加--max-depth限制) - 与df的区别:
df看文件系统,du看目录/tree - 权限:无权限访问的目录显示
du: cannot access - 硬链接:
du会重复计算硬链接(多次引用同一文件) - 缓存:
du结果可能因缓存而不准确,用du --apparent-size查看实际大小
7. partprobe- 重新读取分区表
语法:
partprobe [设备]
案例:
# 分区后使内核重新读取
partprobe /dev/sdb# 查看是否生效
lsblk
⚠️ 注意事项:
- 🔥挂载中的分区:
partprobe对正在使用的分区可能无效,需umount或重启 - LVM:修改LVM物理分区后,需
pvresize而非partprobe - 无输出:成功时静默,失败报错
- udev触发:
partprobe会触发udev规则,可能自动挂载
二、⚙️ 文件系统管理
1. mkfs- 创建文件系统(格式化)
语法:
mkfs.ext4 [选项] 设备
mkfs.xfs [选项] 设备
案例1:格式化ext4
# 确认分区无误(⚠️会清空所有数据!)
lsblk /dev/sdb1# 格式化为ext4
mkfs.ext4 /dev/sdb1# 输出:
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
案例2:格式化xfs(CentOS 7默认)
# 格式化为xfs(性能更好)
mkfs.xfs /dev/sdb1
# 输出:
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=3276800 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=13107200, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=1600, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
案例3:带标签和块大小格式化
# ext4指定卷标和块大小
mkfs.ext4 -L "DataDisk" -b 4096 /dev/sdb1# xfs指定强制格式化(覆盖)
mkfs.xfs -f /dev/sdb1
⚠️ 注意事项:
- 🔥数据毁灭:格式化会不可逆清空所有数据,务必确认设备名!
- 文件系统选择:
- ext4:通用,稳定,支持收缩
- xfs:高性能,适合大文件,不支持收缩(只能扩展)
- 块大小
-b:小文件多用4096,大文件可8192 - SSD优化:ext4加
-O extent,xfs自动优化
2. fsck- 文件系统检查与修复
语法:
fsck [选项] 设备
核心选项:
-a:自动修复(无交互)-y:对所有问题回答yes-n:只检查不修复-t 类型:指定文件系统类型-f:强制检查(即使文件系统标记为clean)
案例1:检查分区(必须umount)
# 1. 先umount
umount /dev/sdb1# 2. 检查
fsck.ext4 /dev/sdb1
# 或
fsck -t ext4 /dev/sdb1# 输出:
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1: clean, 11/3276800 files, 126000/13107200 blocks
案例2:强制检查并自动修复
# ext4检查
fsck.ext4 -fy /dev/sdb1
# -f: 强制检查
# -y: 自动修复
案例3:修复损坏的超级块
# 查找备份超级块
dumpe2fs -h /dev/sdb1 | grep -i superblock# 使用备份超级块修复
fsck.ext4 -b 32768 -y /dev/sdb1
# 32768是备份超级块位置
⚠️ 注意事项:
- 🔥必须umount:在挂载的文件系统上运行
fsck会损坏数据! - 根目录特殊:根目录无法umount,需在单用户模式或救援模式运行
- 自动修复风险:
-a/-y可能修复过度,重要数据先备份 - xfs修复:xfs用
xfs_repair,不是fsck!
xfs_repair /dev/sdb1
3. mount/umount- 挂载/卸载文件系统
mount语法:
mount [选项] 设备 挂载点
核心选项:
-t 类型:指定文件系统类型(xfs/ext4/nfs)-o 选项:挂载选项(rw/ro/noexec/nosuid)-a:挂载/etc/fstab中所有未挂载项-r:只读挂载
常用挂载选项:
defaults:rw, suid, dev, exec, auto, nouser, asyncro:只读rw:读写noexec:禁止执行二进制文件(安全)nosuid:忽略suid位(安全)nodev:不解释字符/块设备sync:同步写入(慢但安全)async:异步写入(默认,快)noatime:不更新访问时间(提升性能)
案例1:临时挂载
# 创建挂载点
mkdir /mnt/data# 挂载ext4分区
mount -t ext4 /dev/sdb1 /mnt/data# 挂载xfs分区
mount -t xfs /dev/sdc1 /mnt/data1# 查看挂载
mount | grep /dev/sdb1
# 输出:/dev/sdb1 on /mnt/data type ext4 (rw,relatime,data=ordered)
案例2:挂载选项实战
# 只读挂载(防止误修改)
mount -o ro /dev/sdb1 /mnt/backup# 安全挂载(禁止执行,忽略suid)
mount -o noexec,nosuid /dev/sdb1 /mnt/data# NFS挂载
mount -t nfs 192.168.1.100:/data /mnt/nfs# CIFS挂载Windows共享
mount -t cifs -o username=admin,password=123456 //192.168.1.200/share /mnt/win
案例3:查看所有挂载
# 方法1:mount命令
mount# 方法2:/etc/mtab
cat /etc/mtab# 方法3:/proc/mounts
cat /proc/mounts# 方法4:findmnt(树状展示,推荐)
findmnt
# 输出:
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/centos-root xfs rw,relatime,attr2,inode64,noquota
├─/boot /dev/sda1 xfs rw,relatime,attr2,inode64,noquota
└─/data /dev/sdb1 ext4 rw,relatime,data=ordered
案例4:卸载文件系统
# 卸载
umount /mnt/data# 或按设备卸载
umount /dev/sdb1# 强制卸载(进程占用时)
umount -f /mnt/data# 懒惰卸载(立即断开,等进程结束再真正卸载)
umount -l /mnt/data
案例5:永久挂载(/etc/fstab)
# 编辑fstab
nano /etc/fstab# 格式:<文件系统> <挂载点> <类型> <选项> <dump> <fsck顺序>
# 示例:
UUID=a1b2c3d4-e5f6-... /data ext4 defaults,noatime 0 2
# 或设备名(不推荐):
/dev/sdb1 /data ext4 defaults 0 2# 测试挂载(不重启)
mount -a# 查看是否成功
df -h /data
⚠️ 注意事项:
- 🔥
/etc/fstab错误导致无法启动:编辑前备份,错误配置需救援模式修复 - UUID vs 设备名:强烈推荐UUID,避免设备名变化导致挂载失败
- fsck顺序:
0=不检查,1=根目录优先检查,2=其他分区检查 - dump备份:
0=不备份,旧时代遗留,几乎不用 - umount失败:
umount: target is busy说明有进程占用,用lsof +D /mnt/data查找 - 网络文件系统:NFS/CIFS挂载需网络就绪,加
_netdev延迟挂载
//192.168.1.200/share /mnt/win cifs defaults,_netdev 0 0
三、💽 LVM逻辑卷管理(强大灵活)
1. 核心概念
- PV(Physical Volume):物理卷(磁盘/分区)
- VG(Volume Group):卷组(PV的集合)
- LV(Logical Volume):逻辑卷(从VG划分,可动态伸缩)
架构:物理磁盘 → PV → VG → LV → 文件系统
2. PV管理命令
pvcreate - 创建物理卷
# 将分区创建为PV
pvcreate /dev/sdb1# 输出:Physical volume "/dev/sdb1" successfully created.# 查看PV
pvdisplay
# 或
pvs
pvremove - 删除物理卷
# 移除PV(需先移出VG)
pvremove /dev/sdb1
案例:扩展现有VG
# 1. 创建新PV
pvcreate /dev/sdc1# 2. 扩展到VG
vgextend centos /dev/sdc1# 3. 查看结果
vgdisplay centos
3. VG管理命令
vgcreate - 创建卷组
# 创建VG,包含两个PV
vgcreate myvg /dev/sdb1 /dev/sdc1# 查看
vgdisplay myvg
# 输出:--- Volume group ---VG Name myvgSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 149.99 GiBPE Size 4.00 MiBTotal PE 38397Alloc PE / Size 0 / 0 Free PE / Size 38397 / 149.99 GiBVG UUID 4kKj3e-...
vgextend / vgreduce - 扩展/收缩卷组
# 扩展VG
vgextend myvg /dev/sdd1# 收缩VG(先pvmove数据)
pvmove /dev/sdb1 # 将sdb1数据移到其他PV
vgreduce myvg /dev/sdb1
vgremove - 删除卷组
# 删除VG(需先删除所有LV)
vgremove myvg
4. LV管理命令
lvcreate - 创建逻辑卷
# 从myvg创建10GB的逻辑卷mylv
lvcreate -L 10G -n mylv myvg# 按PE数创建
lvcreate -l 100%FREE -n mylv2 myvg # 使用所有剩余空间# 查看
lvdisplay
# 或
lvs
lvextend - 扩展逻辑卷(在线扩容核心!)
# 扩展LV到15GB
lvextend -L 15G /dev/myvg/mylv# 扩展LV增加5GB
lvextend -L +5G /dev/myvg/mylv# 使用所有剩余空间
lvextend -l +100%FREE /dev/myvg/mylv# 重要:扩展后需扩展文件系统!
# ext4:
resize2fs /dev/myvg/mylv# xfs:
xfs_growfs /dev/myvg/mylv# 也可一步完成(推荐)
lvextend -r -L +5G /dev/myvg/mylv
# -r: 自动调整文件系统大小
lvreduce - 收缩逻辑卷(⚠️高危)
# 收缩前必须umount
umount /dev/myvg/mylv# 先收缩文件系统(ext4支持,xfs不支持!)
resize2fs /dev/myvg/mylv 10G# 再收缩LV
lvreduce -L 10G /dev/myvg/mylv
lvremove - 删除逻辑卷
# 删除LV(需先umount)
umount /dev/myvg/mylv
lvremove /dev/myvg/mylv
5. LVM完整实战案例
场景:/home目录空间不足,需在线扩容
# 当前状态
df -h /home
# /dev/mapper/centos-home 10G 9.8G 200M 98% /home# 1. 查看VG剩余空间
vgdisplay centos
# Free PE / Size 0 / 0 (无剩余)# 2. 添加新磁盘(假设已添加/dev/sdb)
fdisk /dev/sdb
# 创建分区/dev/sdb1,类型8e(LVM)# 3. 创建PV
pvcreate /dev/sdb1# 4. 扩展到VG
vgextend centos /dev/sdb1# 5. 扩展LV(home逻辑卷)
lvextend -L +50G /dev/mapper/centos-home# 6. 扩展文件系统
# ext4:
resize2fs /dev/mapper/centos-home
# xfs:
xfs_growfs /home# 7. 验证
df -h /home
# /dev/mapper/centos-home 60G 9.8G 50G 17% /home
# ✅ 在线完成,无需重启,服务不中断!
LVM优势总结:
- 动态伸缩:在线扩展/收缩(xfs不支持收缩)
- 快照:可创建LV快照用于备份
- 跨磁盘:VG可跨多个物理磁盘
- 灵活迁移:PV可在线迁移数据
四、🚀 磁盘性能监控
1. iostat- I/O统计(sysstat包)
安装:
yum install -y sysstat
案例:
# 每秒刷新,共5次
iostat -x 1 5# 输出解析:
# Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
# sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
关键指标:
%util:设备利用率(>80%瓶颈)await:I/O平均响应时间(>20ms缓慢)avgqu-sz:平均队列长度(>2排队严重)r/s + w/s:IOPS(每秒I/O次数)
2. iotop- I/O实时监控(类似top)
安装:
yum install -y iotop
案例:
# 查看实时I/O
iotop# 只显示有I/O的进程
iotop -o# 非交互模式,输出到文件
iotop -b -n 5 -d 1 > io.log
3. dd- 磁盘性能测试
案例:
# 测试写入性能(⚠️会覆盖数据!)
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync
# 输出:1073741824 bytes (1.1 GB) copied, 5.234 s, 205 MB/s# 测试读取性能
dd if=/tmp/test of=/dev/null bs=1M# 绕过缓存(直接测磁盘)
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct
⚠️ 注意事项:
- 🔥数据毁灭:
of=目标文件会被覆盖,切勿指定重要分区! - 缓存影响:默认使用系统缓存,测试值偏高,加
conv=fdatasync或oflag=direct - SSD测试:频繁测试会消耗SSD寿命
- 标准测试:
bs=1M count=1024是通用标准
五、🗑️ 磁盘空间清理与维护
1. find查找大文件
# 查找/目录下大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \;# 查找7天前的日志并压缩
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
2. ncdu - 交互式磁盘分析
# 安装
yum install -y ncdu# 分析根目录
ncdu /
# 按Enter进入子目录,d删除,q退出
3. fstrim- SSD Trim(释放未使用块)
# 手动trim
fstrim -v /# 启用定期trim
systemctl enable fstrim.timer
六、📋 综合案例与故障排查
案例1:新磁盘完整上线流程
#!/bin/bash
# 新磁盘/dev/sdb上线到/data目录# 1. 查看磁盘
lsblk /dev/sdb
# 确认大小和状态# 2. 分区
parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb mkpart primary 0% 100%
partprobe /dev/sdb# 3. 等待系统识别
sleep 2# 4. 创建PV(LVM方案,可选)
pvcreate /dev/sdb1# 5. 创建VG(可选)
vgcreate vg_data /dev/sdb1# 6. 创建LV(可选,或直接格式化分区)
lvcreate -l 100%FREE -n lv_data vg_data# 7. 格式化
mkfs.xfs /dev/vg_data/lv_data
# 或不用LVM:
# mkfs.xfs /dev/sdb1# 8. 创建挂载点
mkdir -p /data# 9. 获取UUID
UUID=$(blkid -s UUID -o value /dev/vg_data/lv_data)
# 或 /dev/sdb1# 10. 添加到fstab
echo "UUID=$UUID /data xfs defaults,noatime 0 2" >> /etc/fstab# 11. 挂载
mount -a# 12. 验证
df -h /data
# 输出确认挂载成功
案例2:根目录爆满紧急处理
# 1. 定位占用
df -h /
# /dev/mapper/centos-root 30G 30G 0G 100% /# 2. 查找大文件
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10
# 2.5G /var
# 1.2G /usr
# 0.8G /home# 3. 深入/var
du -h --max-depth=1 /var | sort -hr | head -10
# 1.5G /var/log# 4. 查找具体文件
find /var/log -type f -size +100M
# /var/log/messages-20241101 (1.2G)# 5. 压缩旧日志
gzip /var/log/messages-20241101# 6. 清理yum缓存
yum clean all# 7. 查找并删除大文件
find /tmp -type f -size +500M -delete# 8. 确认释放
df -h /
# 应显示Avail有空间
案例3:LVM快照备份
# 创建LV快照(大小1GB)
lvcreate -L 1G -s -n home_snap /dev/centos/home# 挂载快照
mkdir /mnt/snap
mount /dev/centos/home_snap /mnt/snap# 从快照备份
tar -czf /backup/home_$(date +%Y%m%d).tar.gz /mnt/snap# 卸载并删除快照
umount /mnt/snap
lvremove /dev/centos/home_snap
七、⚠️ 磁盘管理铁律与陷阱
1. 🔥 分区与格式化禁忌
- 绝不格式化挂载中的分区:会导致数据损坏+系统崩溃
- 确认设备名:
/dev/sdb和/dev/sdc插拔后可能互换,用UUID - MBR vs GPT:2TB以上磁盘必须用GPT,MBR只支持2TB
- 备份分区表:
sfdisk -d /dev/sda > sda.partition.bak
2. 🔥 LVM操作规范
- 扩展前备份:即使在线扩展有风险,先
lvcreate -s创建快照 - xfs不支持收缩:规划时留有余地,xfs只能扩不能缩
- PV移除顺序:
pvmove→vgreduce→pvremove - VG命名冲突:导入外部磁盘VG时可能重名,用
vgrename
3. 🔥 /etc/fstab致命错误
# 错误示例1:设备名变化
/dev/sdb1 /data ext4 defaults 0 2
# 插入新磁盘后可能变成/dev/sdc1,启动失败!# 错误示例2:文件系统类型错误
/dev/sdb1 /data xfs defaults 0 2
# 实际是ext4,挂载失败!# 正确做法:使用UUID
UUID=a1b2c3d4-e5f6... /data xfs defaults 0 2# 测试fstab
mount -a
# 无输出=无错误
4. 🔥 性能监控要点
- %util>80%:磁盘饱和,考虑升级SSD或RAID
- await>20ms:响应慢,检查磁盘健康(
smartctl -a /dev/sda) - iowait高:CPU等待I/O,说明磁盘瓶颈
- inode耗尽:
df -i查看,小文件过多导致
5. 🔥 SSD特殊注意事项
- 分区对齐:parted自动对齐,确保性能
- Trim支持:定期
fstrim或启用discard挂载选项 - swap on SSD:可以,但会影响寿命
- 监控寿命:
smartctl -A /dev/sda | grep Wear_Leveling_Count
八、📚 快速命令速查
| 需求 | 命令 | 示例 |
|---|---|---|
| 查看磁盘树 | lsblk | lsblk -f |
| 查看分区表 | fdisk -l | fdisk -l /dev/sda |
| GPT分区 | parted | parted /dev/sdb mklabel gpt |
| 查看UUID | blkid | blkid /dev/sdb1 |
| 查看空间 | df -h | df -h / |
| 目录大小 | du -sh | du -sh /var/log |
| 格式化ext4 | mkfs.ext4 | mkfs.ext4 /dev/sdb1 |
| 格式化xfs | mkfs.xfs | mkfs.xfs /dev/sdb1 |
| 检查修复 | fsck | fsck.ext4 /dev/sdb1 |
| 挂载 | mount | mount /dev/sdb1 /data |
| 卸载 | umount | umount /data |
| 创建PV | pvcreate | pvcreate /dev/sdb1 |
| 创建VG | vgcreate | vgcreate myvg /dev/sdb1 |
| 创建LV | lvcreate | lvcreate -L 10G -n mylv myvg |
| 扩展LV | lvextend | lvextend -r -L +5G /dev/myvg/mylv |
| I/O监控 | iostat | iostat -x 1 |
| 性能测试 | dd | dd if=/dev/zero of=/tmp/test bs=1M count=1024 |
🎓 总结 :磁盘管理是系统稳定性的基石!
- 规划为先:分区前想好用途,LVM比传统分区灵活
- UUID是王道:避免设备名变化导致的灾难
- 监控预警:
df -h每日检查,iostat定期分析 - 备份分区表:灾难恢复的救命稻草
- SSD特护:对齐+Trim延长寿命
磁盘有价,数据无价!谨慎操作,备份第一!
📖原文: 人生和梦不一样,每走一步都会有不一样的结果,即使是遗憾那也是独一无二的。 -- 《凡人修仙传》
⌛怡然: ...
