Linux 文件系统与 LVM 命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑮族:文件系统与 LVM,约 30 个命令。上一族 磁盘与存储 讲的是"看磁盘、挂分区",这一族解决更进一步的问题——磁盘不够了怎么在线扩、坏了怎么修、怎么限制某个用户能用多少。核心是 LVM(Logical Volume Manager,逻辑卷管理器)这套把物理盘抽象成可伸缩逻辑卷的机制。分区与挂载基础见 磁盘与存储。
一、LVM 的三层结构
LVM 在物理磁盘和文件系统之间插了三层抽象,理解它就理解了一半命令:PV(Physical Volume,物理卷)是被 LVM 接管的磁盘或分区;VG(Volume Group,卷组)把多个 PV 拼成一个大的存储池;LV(Logical Volume,逻辑卷)从这个池子里划出来,格式化和挂载都在 LV 上进行。
这么绕一圈换来的最大好处是:LV 的大小可以在线调整,而且不受单块物理盘大小的限制——池子不够了加块新盘进去就行,不用迁移数据、不用停机。
| 命令 | 作用 | 常用示例 |
|---|---|---|
pvcreate | 把磁盘/分区初始化为物理卷,打上 LVM 元数据标签 | pvcreate /dev/sdb;pvcreate /dev/sdb /dev/sdc(多块一起) |
pvs / pvdisplay | 查看物理卷摘要/详情 | pvs;pvdisplay /dev/sdb |
pvscan | 扫描系统里所有 PV,新接磁盘后用它确认是否被识别 | pvscan;pvscan --cache |
pvremove | 擦除 PV 上的 LVM 元数据,让磁盘退回普通状态 | pvremove /dev/sdb |
vgcreate | 创建卷组,把若干 PV 聚合成一个存储池 | vgcreate vg_data /dev/sdb /dev/sdc;vgcreate -s 32M vg_data /dev/sdb(指定 PE 大小) |
vgs / vgdisplay | 查看卷组摘要/详情,含总容量与剩余空间 | vgs;vgdisplay vg_data |
vgextend | 往卷组里加新的物理卷,这是"池子扩容"的动作 | vgextend vg_data /dev/sdd |
vgreduce | 从卷组里移除物理卷,通常先要 pvmove 迁走数据 | vgreduce vg_data /dev/sdd |
pvmove | 把某块 PV 上的数据在线迁移到其他 PV,换盘/下线坏盘时用 | pvmove /dev/sdb(清空这块 PV);pvmove /dev/sdb /dev/sdc(指定目标) |
二、逻辑卷管理
LV 是最终被格式化和挂载的那层。它可以跨越多块物理盘,也可以只占一块盘的一部分——这些对上层文件系统完全透明,文件系统只知道"我有一个多大的块设备"。
| 命令 | 作用 | 常用示例 |
|---|---|---|
lvcreate | 从卷组里划出逻辑卷,可按大小或按剩余百分比分配 | lvcreate -L 100G -n lv_data vg_data;lvcreate -l 100%FREE -n lv_data vg_data(用掉全部剩余);lvcreate -L 10G -s -n snap /dev/vg_data/lv_data(创建快照) |
lvs / lvdisplay | 查看逻辑卷摘要/详情,含路径、大小、所属卷组 | lvs;lvdisplay /dev/vg_data/lv_data |
lvextend | 扩展逻辑卷容量,在线可用,扩完还要扩文件系统 | lvextend -L +50G /dev/vg_data/lv_data;lvextend -l +100%FREE /dev/vg_data/lv_data;lvextend -r -L +50G ...(-r 同时扩文件系统) |
lvreduce | 缩小逻辑卷,有数据丢失风险,必须先缩文件系统 | lvreduce -L 50G /dev/vg_data/lv_data(前先 resize2fs 缩小) |
lvremove | 删除逻辑卷,卷上的数据一并消失 | lvremove /dev/vg_data/lv_data;lvremove -f(不确认) |
lvrename | 重命名逻辑卷 | lvrename vg_data old_name new_name |
lvm | LVM 的交互式 shell,不确定命令名时可进去用 Tab 补全 | lvm;lvm lvs |
扩容的正确顺序是先扩 LV,再扩文件系统;缩容则反过来,先缩文件系统,再缩 LV。顺序搞反就是数据损坏。缩容对 XFS 根本不可行(XFS 不支持缩小),所以规划时宁可先给小一点,后面加。
三、ext2/3/4 文件系统工具
ext4 是过去十几年 Linux 的默认文件系统,稳定、工具链完整。它的核心概念是 inode(索引节点,存储文件元数据的数据结构,每个文件对应一个)——"磁盘还有空间却写不进去",八成是 inode 用光了,而不是块用光了。
| 命令 | 作用 | 常用示例 |
|---|---|---|
dumpe2fs | 导出 ext 文件系统的超级块与块组信息,查 inode 总数/已用、块大小、挂载次数 | dumpe2fs -h /dev/sda1(只看超级块) |
e2label | 设置或查看 ext 文件系统的卷标,挂载时可用 LABEL= 引用 | e2label /dev/sda1 DATA;e2label /dev/sda1(查看) |
resize2fs | 调整 ext 文件系统大小,lvextend 之后必须跑它,文件系统才会认新空间 | resize2fs /dev/vg_data/lv_data(自动扩到最大) |
e2fsck | 检查并修复 ext 文件系统,必须卸载后执行,否则可能损坏数据 | e2fsck -f /dev/sda1(强制检查);e2fsck -y /dev/sda1(自动修复) |
tune2fs | 调整 ext 文件系统参数:自检周期、预留空间比例、错误行为等 | tune2fs -l /dev/sda1(查看参数);tune2fs -m 1 /dev/sda1(预留空间改 1%);tune2fs -c 0 -i 0 /dev/sda1(关闭定时自检) |
四、XFS 文件系统工具
XFS 是 RedHat 系(CentOS/RHEL/Rocky)现在的默认文件系统,擅长大文件和大容量,元数据操作比 ext4 快。它和 ext4 有两个关键差异要记住:不支持缩小容量,也没有 fsck(xfs_repair 是离线修复工具,且 xfs 靠日志保证一致性,一般不需要检查)。
| 命令 | 作用 | 常用示例 |
|---|---|---|
xfs_info | 显示 XFS 文件系统信息:块大小、AG 数量、是否支持扩展属性 | xfs_info /mount/point(注意要传挂载点而非设备) |
xfs_growfs | 扩展 XFS 文件系统,配合 lvextend 使用,同样要传挂载点 | xfs_growfs /data |
xfs_repair | 修复 XFS 文件系统,需卸载;严重损坏时可先 -L 清日志(会丢未落盘数据) | xfs_repair /dev/sda1;xfs_repair -L /dev/sda1(强制清日志,最后手段) |
xfsdump / xfsrestore | XFS 的备份与恢复工具,支持断点与增量备份 | xfsdump -l 0 -f /backup/data.dump /data;xfsrestore -f /backup/data.dump /data |
xfs_fsr | XFS 碎片整理工具 | xfs_fsr /data(整理);xfs_fsr -t 3600(限时 1 小时) |
扩 XFS 的完整动作是两条:
lvextend -L +50G /dev/vg/lv然后xfs_growfs /data。注意xfs_growfs接的是挂载点,而resize2fs接的是设备路径——这个差异常常让人卡住。XFS 一旦扩了就缩不回去,规划时留点余量。
五、btrfs
btrfs(B-tree 文件系统)是新一代写时复制(CoW,Copy-on-Write)文件系统,内建快照、压缩、RAID、子卷等能力——这些在 LVM + ext4 的组合下要靠多个工具拼出来。它的子卷(subvolume)和快照是最实用的特性:快照几乎瞬时且初始不占空间。
| 命令 | 作用 | 常用示例 |
|---|---|---|
btrfs | btrfs 的主命令,子卷管理、快照、压缩、配额、平衡等全部通过它的子命令完成 | btrfs filesystem df /mnt(空间使用);btrfs filesystem show(查看文件系统);btrfs subvolume create /mnt/sub(建子卷);btrfs subvolume snapshot /mnt /mnt/snap_$(date +%F)(建快照);btrfs subvolume list /mnt(列出子卷);btrfs subvolume delete /mnt/snap(删快照) |
btrfs scrub | 校验并修复数据校验和错误,定期跑能提前发现静默损坏 | btrfs scrub start /mnt;btrfs scrub status /mnt |
btrfs balance | 重新平衡数据在设备间的分布,加盘或空间分配不均后需要 | btrfs balance start /mnt;btrfs balance status /mnt |
btrfs filesystem | 文件系统级操作:查看使用、在线扩缩容、同步 | btrfs filesystem usage /mnt;btrfs filesystem resize +10G /mnt |
btrfs 快照不是备份——它和原卷在同一个文件系统上,盘坏了两个都没了。真正的备份要用
btrfs send把快照增量发到另一台机器:btrfs send -p snap1 snap2 | ssh host btrfs receive /backup。
六、磁盘配额
多用户或多服务共用一台机器时,配额用来防止某一个人把磁盘写满——磁盘写满不是"某个人用不了",而是整台机器上的数据库、日志、定时任务全都会挂。这是典型的"一个人犯错、所有人遭殃"场景。
| 命令 | 作用 | 常用示例 |
|---|---|---|
quota | 查看当前用户/组的配额使用情况 | quota -s(人类可读);quota -u username |
edquota | 编辑配额限制,会打开编辑器让你改软限制、硬限制与宽限期 | edquota -u username;edquota -g groupname(组配额);edquota -t(改宽限期) |
setquota | 命令行直接设置配额,适合脚本批量操作(不用开编辑器) | setquota -u user 10G 12G 0 0 /data(软 10G 硬 12G) |
quotacheck | 扫描文件系统建立配额数据库,启用配额前必须先跑一次 | quotacheck -cug /data(创建);quotacheck -avug(检查所有) |
repquota | 汇总报告所有用户/组的配额使用情况 | repquota -a;repquota -s /data |
quotaon / quotaoff | 启用/关闭配额功能 | quotaon -avug;quotaoff /data |
启用配额的完整流程:挂载选项加
usrquota,grpquota→ 重新挂载 →quotacheck -cug建库 →quotaon启用 →edquota设限制。现代 XFS 用 project quota(项目配额)更灵活,能按目录而非用户限制,适合容器和虚拟机的存储限额场景。
七、其他文件系统工具
| 命令 | 作用 | 常用示例 |
|---|---|---|
wipefs | 擦除磁盘上的文件系统/分区表签名,让磁盘回到"空白"状态,避免旧元数据干扰 | wipefs -a /dev/sdb(擦所有签名);wipefs -n /dev/sdb(只预览不真删) |
fallocate | 快速预分配文件空间,不实际写数据因此瞬间完成,测磁盘性能或预留空间用 | fallocate -l 10G testfile;fallocate -d file(释放空洞,回收空间) |
truncate | 把文件截断或扩展到指定大小,扩展部分形成空洞(稀疏文件,不占实际磁盘块) | truncate -s 0 log(清空日志,> 的替代);truncate -s +1G file(扩展) |
sgdisk | GPT 分区表的命令行管理工具,适合脚本化分区(替代交互式的 parted) | sgdisk -n 1:0:0 /dev/sdb(建一个占满的分区);sgdisk -p /dev/sdb(打印);sgdisk --zap-all /dev/sdb(清空分区表) |
sfdisk | 另一个脚本化分区工具,支持从文件读入分区布局批量应用 | sfdisk -d /dev/sda > layout.txt(备份布局);sfdisk /dev/sdb < layout.txt(复刻布局) |
fallocate与truncate都能造大文件,但性质不同:fallocate真的占住磁盘块,用df能看到可用空间变少;truncate造的是稀疏文件,ls -lh显示很大但du显示接近 0。想测真实写入性能必须用fallocate,用truncate造的文件测出来会快得离谱,那是假象。
一句话总结
文件系统与 LVM 速查:扩容走 pvcreate→vgextend→lvextend→resize2fs/xfs_growfs 这条链(记住 XFS 传挂载点、ext4 传设备,且 XFS 不能缩);换盘用 pvmove 在线迁数据;修 fs 用 e2fsck/xfs_repair(都需卸载);快照用 btrfs subvolume snapshot;防写满靠 edquota/setquota——30 个命令覆盖从容量规划到故障恢复的完整生命周期。