前言

云服务器买了数据盘,登上去却找不到?新增磁盘从"裸设备"到"能用的目录"要经历三步:分区 → 格式化 → 挂载。这篇把全流程和日常排查一次讲清。

一、看清磁盘现场

# 列出所有块设备(最常用, 一目了然)
lsblk
# NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# vda    252:0    0   40G  0 disk
# └─vda1 252:1    0   40G  0 part /

# 查看磁盘与分区详情
fdisk -l

# 已挂载文件系统的容量与使用率
df -h

# 目录实际占用大小
du -sh /var/log

云主机系统盘一般是 vda(virtio)或 sda;TYPE=disk 是整盘,part 是分区,lvm 是逻辑卷。

二、分区:fdisk 与 parted

小于 2TB 用 fdisk(MBR),大于 2TB 必须 parted(GPT)。

# fdisk 交互式操作(以新盘 /dev/vdb 为例)
fdisk /dev/vdb
# 输入 n (新建) -> p (主分区) -> 回车默认起始 -> 回车默认结束 -> w (写入)

parted 方式(可脚本化,支持大容量):

parted /dev/vdb --script mklabel gpt
parted /dev/vdb --script mkpart primary ext4 0% 100%

# 让内核重读分区表
partprobe
lsblk        # 已能看到 vdb1

三、格式化

# ext4: 兼容性最好
mkfs.ext4 /dev/vdb1

# xfs: RHEL 系默认, 大文件高性能, 但不能缩容
mkfs.xfs /dev/vdb1

# 带卷标
mkfs.ext4 -L data /dev/vdb1

选择建议:通用场景 ext4,大文件/高吞吐场景 xfs。

四、挂载与开机自动挂载

# 临时挂载(重启失效)
mkdir -p /data
mount /dev/vdb1 /data
df -h | grep data

# 卸载(注意不能在挂载点目录内执行)
umount /data

# 查看挂载详情与 UUID
blkid /dev/vdb1

永久挂载写入 /etc/fstab(推荐用 UUID,设备名可能漂移):

# <设备/UUID>            <挂载点>  <类型>  <选项>           <dump> <fsck顺序>
UUID=xxxx-xxxx-xxxx      /data     ext4    defaults,noatime  0     2
# 写完必须验证语法, 错误的 fstab 可能导致重启起不来!
mount -a && echo "fstab OK"

五、LVM:弹性的磁盘管理

固定分区不够用时,LVM(Logical Volume Manager)可以把多块盘"Pool"起来动态扩容。

核心三层结构:

物理盘 PV (Physical Volume)
  ↓ 组成
卷组 VG (Volume Group)      ← 资源池
  ↓ 划分
逻辑卷 LV (Logical Volume)  ← 格式化挂载用这个
# 1. 创建 PV
pvcreate /dev/vdb /dev/vdc
# 2. 创建 VG(名字 data-vg)
vgcreate data-vg /dev/vdb /dev/vdc
# 3. 创建 LV(用掉全部空间)
lvcreate -l 100%FREE -n data-lv data-vg
# 4. 格式化并挂载
mkfs.xfs /dev/data-vg/data-lv
mount /dev/data-vg/data-lv /data

不停机在线扩容(云盘扩容后):

# 假设在云控制台把磁盘从 100G 扩到 200G
echo 1 > /sys/class/block/vdb/device/rescan      # 重读磁盘容量
pvresize /dev/vdb
lvextend -l +100%FREE /dev/data-vg/data-lv
xfs_growfs /data          # xfs 在线扩文件系统
# 若是 ext4: resize2fs /dev/data-vg/data-lv
df -h /data

六、日常排查:磁盘满了怎么办

# 1. 确认哪个分区满
df -h

# 2. 定位大目录(逐层下钻)
du -hx --max-depth=1 / 2>/dev/null | sort -rh | head
du -hx --max-depth=1 /var | sort -rh | head

# 3. 常见"重灾区"
du -sh /var/log/* | sort -rh | head
journalctl --vacuum-size=500M        # 收缩系统日志
find / -size +500M -type f 2>/dev/null | xargs ls -lh

# 4. 注意: 删除了文件但空间没释放?
#    说明文件仍被某进程打开着
lsof +L4 | grep deleted
# 处理: 重启或 reload 对应进程(如 logrotate 后 nginx -s reload)

小结

步骤 命令
查盘 lsblk / fdisk -l
分区 fdisk(<2T)/ parted(>2T, GPT)
格式化 mkfs.ext4 / mkfs.xfs
挂载 mount + /etc/fstab(用 UUID)
弹性管理 pvcreate → vgcreate → lvcreate
空间排查 df -h → du -hx → lsof +L4

本文是「Linux 运维」系列第 1 篇,下篇预告:云计算入门。