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 超级块。
正确顺序:lvcreatemkfs.xfsfstabmount
[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报错九成是磁盘残留签名

 

 

 

 

 

image

posted @ 2026-08-23 19:31  HOUHUILIN  阅读(10)  评论(0)    收藏  举报