主题
磁盘管理
Linux 磁盘管理常用操作速查。
磁盘信息查看
查看磁盘使用情况
bash
df -TH # 查看所有挂载文件系统的信息(-T 显示类型,-H 人类可读)
df -h / # 只看根分区查看磁盘设备
bash
lsblk # 树状显示所有块设备
lsblk -f # 同时显示文件系统类型和 UUID
lsblk -d -o NAME,ROTA,SIZE,MODEL # 只看磁盘(不含分区),含 ROTA/大小/型号区分 SSD 和机械硬盘(HDD)
使用 lsblk 的 ROTA(rotational)字段判断:
bash
lsblk -d -o NAME,ROTA,SIZE,MODEL| ROTA 值 | 含义 |
|---|---|
| 0 | SSD(固态硬盘,非旋转设备) |
| 1 | HDD(机械硬盘,旋转设备) |
bash
# 示例输出
NAME ROTA SIZE MODEL
sda 0 500G Samsung SSD 870 # SSD(ROTA=0)
sdb 1 2T WDC WD20EZRX # 机械硬盘(ROTA=1)ROTA 的含义
ROTA(rotational)字面意思是"是否旋转"。SSD 没有机械旋转部件所以是 0,机械硬盘有转轴所以是 1。这是最通用的判断方法。
其他判断方式:
bash
# 直接读取内核属性(0 = SSD,1 = HDD)
cat /sys/block/sda/queue/rotational磁盘分区
查看分区表
bash
fdisk -l # 列出所有磁盘的分区信息
fdisk -l /dev/sdb # 查看指定磁盘使用 fdisk 分区(MBR)
交互式操作,适合 2TB 以下的磁盘:
bash
fdisk /dev/sdb| 操作 | 说明 |
|---|---|
n | 新建分区 |
p | 选择主分区(primary) |
e | 选择扩展分区(extended) |
t | 修改分区类型 |
L | 列出所有分区类型代码 |
8e | Linux LVM 类型 |
83 | Linux 默认类型 |
d | 删除分区 |
p | 打印当前分区表 |
w | 保存并退出 |
q | 不保存退出 |
使用 parted 分区(GPT)
适合 2TB 以上的磁盘:
bash
parted /dev/sdbbash
# 常用命令
(parted) mklabel gpt # 创建 GPT 分区表
(parted) mkpart primary 0% 100% # 创建一个占满整盘的分区
(parted) print # 查看分区表
(parted) quit # 退出一键分区(非交互)
bash
# GPT 分区表,创建一个占满整盘的分区
parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb mkpart primary 0% 100%格式化
bash
# XFS(CentOS/RHEL 默认,适合大文件)
mkfs.xfs /dev/sdb1
# ext4(Ubuntu 默认,兼容性好)
mkfs.ext4 /dev/sdb1
# 指定标签
mkfs.xfs -L data /dev/sdb1
mkfs.ext4 -L data /dev/sdb1XFS vs ext4 怎么选?
- XFS:大文件性能好,支持在线扩容(不能缩容),CentOS/RHEL 默认
- ext4:兼容性最好,支持扩容和缩容,Ubuntu 默认
- 一般选 XFS 即可,除非有缩容需求
挂载与卸载
临时挂载
bash
mount /dev/sdb1 /mnt/data # 挂载
umount /mnt/data # 卸载(用挂载点)
umount /dev/sdb1 # 卸载(用设备名)
# 指定文件系统类型
mount -t xfs /dev/sdb1 /mnt/data开机自动挂载
编辑 /etc/fstab:
bash
# 设备路径 挂载点 文件系统 选项 dump fsck
/dev/sdb1 /mnt/data xfs defaults 0 0更推荐用 UUID(设备名可能变化,UUID 不会):
bash
# 先查看 UUID
blkid /dev/sdb1
# /dev/sdb1: UUID="a1b2c3d4-xxxx" TYPE="xfs"
# 写入 fstab
UUID=a1b2c3d4-xxxx /mnt/data xfs defaults 0 0修改 fstab 前先验证
bash
# 检查语法是否正确(不实际挂载,只做 dry-run)
mount -a -o nofail写错 fstab 可能导致开机无法启动,务必先验证。
LVM 逻辑卷管理
LVM 提供灵活的磁盘管理,支持动态扩容。
基本概念
物理磁盘 (PV) → 卷组 (VG) → 逻辑卷 (LV) → 文件系统常用操作
bash
# === PV(物理卷)===
pvcreate /dev/sdb1 # 创建物理卷
pvdisplay # 查看物理卷
pvremove /dev/sdb1 # 删除物理卷
# === VG(卷组)===
vgcreate vg_data /dev/sdb1 # 创建卷组
vgdisplay # 查看卷组
vgextend vg_data /dev/sdc1 # 扩展卷组(加入新磁盘)
vgreduce vg_data /dev/sdc1 # 缩减卷组(移除磁盘)
# === LV(逻辑卷)===
lvcreate -L 50G -n lv_data vg_data # 创建 50G 逻辑卷
lvcreate -l 100%FREE -n lv_data vg_data # 创建占满剩余空间的逻辑卷
lvdisplay # 查看逻辑卷
lvextend -L +10G /dev/vg_data/lv_data # 扩容 10G
lvreduce -L -5G /dev/vg_data/lv_data # 缩容 5G(谨慎操作)
# === 扩容后需要扩展文件系统 ===
xfs_growfs /mnt/data # XFS 扩容(只能扩不能缩)
resize2fs /dev/vg_data/lv_data # ext4 扩容完整示例:服务器添加新硬盘
方式一:直接分区挂载
bash
# 1. 查看新磁盘
fdisk -l
# 2. 分区
fdisk /dev/sdb
# n → p → 回车 → 回车 → w
# 3. 格式化
mkfs.xfs /dev/sdb1
# 4. 创建挂载点并挂载
mkdir -p /mnt/data
mount /dev/sdb1 /mnt/data
# 5. 设置开机自动挂载
blkid /dev/sdb1 # 获取 UUID
echo 'UUID=your-uuid /mnt/data xfs defaults 0 0' >> /etc/fstab
mount -a -o nofail # 验证 fstab方式二:使用 LVM(推荐)
bash
# 1. 分区并设为 LVM 类型
fdisk /dev/sdb
# n → p → 回车 → 回车 → t → 8e → w
# 2. 创建物理卷
pvcreate /dev/sdb1
# 3. 创建卷组
vgcreate vg_data /dev/sdb1
# 4. 创建逻辑卷(占满全部空间)
lvcreate -l 100%FREE -n lv_data vg_data
# 5. 格式化
mkfs.xfs /dev/vg_data/lv_data
# 6. 挂载
mkdir -p /mnt/data
mount /dev/vg_data/lv_data /mnt/data
# 7. 设置开机自动挂载
blkid /dev/vg_data/lv_data
echo 'UUID=your-uuid /mnt/data xfs defaults 0 0' >> /etc/fstab
mount -a -o nofail常见问题
卸载时提示 device is busy
bash
# 查看谁在占用
lsof /mnt/data
fuser -mv /mnt/data
# 强制卸载(确保无人使用后)
umount -f /mnt/data磁盘空间满了但 du 显示没满
可能是已删除文件仍被进程占用:
bash
# 查看已删除但仍被占用的文件
lsof | grep deleted
# 重启占用进程即可释放空间