Linux - 服务器全新磁盘LVM挂载、容器磁盘规划、最干净的回退排坑流程
一、前言
很多人做服务器磁盘 LVM 挂载只会新建,不会彻底回退、不懂残留文件系统签名、踩爆 containerd /run 挂载深坑、fstab 拼写错误导致 mount 超级块报错。
本文从 新机裸盘 -> PV/VG/LV 创建 -> 格式化挂载 -> 排错 -> 彻底干净回退 -> 最终成功落地 完整记录,适配 TDC/星环 K8s 容器节点磁盘规范。
环境:CentOS / Rocky Linux 、两块 600G 裸盘 vdb、vdc,用于 Worker 节点 containerd 磁盘独立挂载。
二、业务需求
Worker 节点不需要 etcd、registry 等 master 专属目录,只需要:
- /var/lib/containerd 200G+:容器镜像、容器层真正存储(必须磁盘挂载)
- /var/lib/docker 100G+:TDC 预检查强制兼容目录(必须独立磁盘)
- /run/containerd:禁止磁盘挂载!!!
重点科普大坑:
/run 是系统 tmpfs 内存文件系统,文档写「>100G」是指内存临时空间,不是让你挂磁盘!强行磁盘挂载会导致:kubelet 异常、容器创建失败、节点 NotReady、CRI 通信报错。
三、常规LVM新建流程(标准正确流程)
>>> 查看裸盘
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 600G 0 disk
├─vda1 252:1 0 4G 0 part /boot
└─vda2 252:2 0 354G 0 part
├─klas-root 253:0 0 200G 0 lvm /
├─klas-swap 253:1 0 4G 0 lvm [SWAP]
└─klas-var_log 253:2 0 150G 0 lvm /var/log
vdb 252:16 0 600G 0 disk
vdc 252:32 0 600G 0 disk
>>> 创建PV(物理卷)
[root@localhost ~]# pvcreate /dev/vdb /dev/vdc
Physical volume "/dev/vdb" successfully created.
Physical volume "/dev/vdc" successfully created.
>>> 创建VG(卷组)
[root@localhost ~]# vgcreate klas-worker /dev/vdb /dev/vdc
Volume group "klas-worker" successfully created
[root@localhost ~]#
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
klas 1 3 0 wz--n- 354.00g 4.00m
klas-worker 2 0 0 wz--n- 1.17t 1.17t
>>> 创建LV(逻辑卷)
CMD
lvcreate -L 200G -n lv_containerd_lib klas-worker
lvcreate -L 100G -n lv_docker klas-worker
lvcreate -L 100G -n lv_containerd_run klas-worker
OUT
[root@localhost ~]# lvcreate -L 200G -n lv_containerd_lib klas-worker
Logical volume "lv_containerd_lib" created.
[root@localhost ~]# lvcreate -L 100G -n lv_docker klas-worker
Logical volume "lv_docker" created.
[root@localhost ~]# lvcreate -L 100G -n lv_containerd_run klas-worker
Logical volume "lv_containerd_run" created.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root klas -wi-ao---- 200.00g
swap klas -wi-ao---- 4.00g
var_log klas -wi-ao---- 150.00g
lv_containerd_lib klas-worker -wi-a----- 200.00g
lv_docker klas-worker -wi-a----- 100.00g
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 600G 0 disk
├─vda1 252:1 0 4G 0 part /boot
└─vda2 252:2 0 354G 0 part
├─klas-root 253:0 0 200G 0 lvm /
├─klas-swap 253:1 0 4G 0 lvm [SWAP]
└─klas-var_log 253:2 0 150G 0 lvm /var/log
vdb 252:16 0 600G 0 disk
├─klas--worker-lv_containerd_lib 253:3 0 200G 0 lvm
├─klas--worker-lv_docker 253:4 0 100G 0 lvm
└─klas--worker-lv_containerd_run 253:5 0 100G 0 lvm
vdc 252:32 0 600G 0 disk
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root klas -wi-ao---- 200.00g
swap klas -wi-ao---- 4.00g
var_log klas -wi-ao---- 150.00g
lv_containerd_lib klas-worker -wi-a----- 200.00g
lv_containerd_run klas-worker -wi-a----- 100.00g
lv_docker klas-worker -wi-a----- 100.00g
>>> 格式化XFS(TDC强制文件系统)
CMD
mkfs.xfs /dev/klas-worker/lv_containerd_lib
mkfs.xfs /dev/klas-worker/lv_docker
mkfs.xfs /dev/klas-worker/lv_containerd_run
OUT
[root@localhost ~]# mkfs.xfs /dev/klas-worker/lv_containerd_lib
meta-data=/dev/klas-worker/lv_containerd_lib isize=512 agcount=4, agsize=13107200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=52428800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=25600, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]#
[root@localhost ~]# mkfs.xfs /dev/klas-worker/lv_docker
meta-data=/dev/klas-worker/lv_docker isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkfs.xfs /dev/klas-worker/lv_containerd_run
meta-data=/dev/klas-worker/lv_containerd_run isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
>>> 获取UUID写入fstab
CMD
blkid /dev/klas-worker/lv_containerd_lib
blkid /dev/klas-worker/lv_docker
blkid /dev/klas-worker/lv_containerd_run
OUT
[root@localhost ~]# blkid /dev/klas-worker/lv_containerd_lib
/dev/klas-worker/lv_containerd_lib: UUID="2aa50d36-fc4d-44ef-96cb-74b60a9a5212" BLOCK_SIZE="512" TYPE="xfs"
[root@localhost ~]#
[root@localhost ~]# blkid /dev/klas-worker/lv_docker
/dev/klas-worker/lv_docker: UUID="9cc7c125-1059-4009-8f06-4108f42877b6" BLOCK_SIZE="512" TYPE="xfs"
[root@localhost ~]# blkid /dev/klas-worker/lv_containerd_run
/dev/klas-worker/lv_containerd_run: UUID="1a53972f-1833-4777-b7d2-83b4455c4c6d" BLOCK_SIZE="512" TYPE="xfs"
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Dec 8 12:12:40 2025
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/klas-root / xfs defaults 0 0
UUID=f6b88fca-5ad0-4465-af60-70df4f5285a7 /boot xfs defaults 0 0
/dev/mapper/klas-var_log /var/log xfs defaults 0 0
/dev/mapper/klas-swap none swap defaults 0 0
UUID="2aa50d36-fc4d-44ef-96cb-74b60a9a5212" /var/lib/containerd xfs defaults,uquota,pquota 0 0
UUID="1a53972f-1833-4777-b7d2-83b4455c4c6d" /run/containerd xfs defaults,uquota,pquota 0 0
UUID="9cc7c125-1059-4009-8f06-4108f42877b6" /var/lib/docker xfs defaults,uquota,pquota 0 0
>>> 挂载生效
[root@localhost ~]# mount -a
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 600G 0 disk
├─vda1 252:1 0 4G 0 part /boot
└─vda2 252:2 0 354G 0 part
├─klas-root 253:0 0 200G 0 lvm /
├─klas-swap 253:1 0 4G 0 lvm [SWAP]
└─klas-var_log 253:2 0 150G 0 lvm /var/log
vdb 252:16 0 600G 0 disk
├─klas--worker-lv_containerd_lib 253:3 0 200G 0 lvm /var/lib/containerd
├─klas--worker-lv_docker 253:4 0 100G 0 lvm /var/lib/docker
└─klas--worker-lv_containerd_run 253:5 0 100G 0 lvm /run/containerd
vdc 252:32 0 600G 0 disk
四、LVM彻底回退方案(关键!!!)
>>> 卸载所有挂载
umount /var/lib/containerd
umount /var/lib/docker
umount /run/containerd
>>> 删除所有LV
lvremove -f /dev/klas-worker/*
>>> 删除VG(回退vgcreate)
vgremove -f klas-worker
>>> 删除PV(回退pvcreate)
pvremove -f /dev/vdb /dev/vdc
>>> 彻底清除磁盘残留文件系统签名
wipefs -a /dev/vdb
wipefs -a /dev/vdc
>>> 校验彻底归零
blkid /dev/vdb /dev/vdc
pvs
vgs
lvs
全部为空 = 完全回到新机裸盘状态
五、Q & A
问题1:mount 报:坏超级块、文件系统类型错误
fstab 写错:
default(单数非法),正确是 defaults(复数)问题2:每次 lvcreate 都提示 Wipe xfs signature
你之前删过 LV/VG,但是 磁盘头部残留旧 XFS 签名
lvremove/vgremove/pvremove 不会清理文件系统残留,只会删除 LVM 元数据。
[root@localhost ~]# lvremove /dev/klas-worker/lv_containerd_run
Do you really want to remove active logical volume klas-worker/lv_containerd_run? [y/n]: y
Logical volume "lv_containerd_run" successfully removed
问题3:误创建 lv_containerd_run 挂载 /run/containerd
属于生产致命错误,会导致 K8s 节点彻底异常。
问题4:先 mkfs 再 lvcreate,格式化白做
lvcreate 检测到旧文件系统,询问
wipe=y,直接清空你刚格式化的 xfs 超级块。正确顺序:
lvcreate → mkfs.xfs → fstab → mount[root@localhost ~]# lvcreate -L 100G -n lv_containerd_run klas-worker
WARNING: xfs signature detected on /dev/klas-worker/lv_containerd_run at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/klas-worker/lv_containerd_run.
Logical volume "lv_containerd_run" created.
六、终极总结
>>> 绝对禁止操作
- 禁止给
/run/containerd挂载磁盘LV - fstab禁止写default单数
- 禁止先格式化再建LV
>>> 干净回退公式
umount -> lvremove -> vgremove -> pvremove -> wipefs -a
>>> 新建标准公式
pvcreate -> vgcreate -> lvcreate -> mkfs.xfs -> fstab -> mount -a
>>> 报错核心公式
超级块报错九成是fstab拼写错,lvcreate wipe报错九成是磁盘残留签名


浙公网安备 33010602011771号