Linux服务器数据盘初始化与盘符漂移解决方案:标准分区、LVM逻辑卷、XFS格式化、fstab配置与UUID持久化挂载实战

前言

在服务器交付、系统初始化或数据盘扩容场景中,经常需要对新增硬盘进行分区、格式化并挂载到指定目录。

本文以一块 8TB 数据盘 /dev/sdb 为例,介绍 Linux 服务器中常见的数据盘挂载方式,包括:

  1. Linux 磁盘分区简介
  2. 标准分区方式挂载数据盘
  3. LVM 方式挂载数据盘
  4. UUID 挂载与盘符漂移问题
  5. 标准分区与 LVM 对比
  6. 生产环境建议

本文示例环境:

text 复制代码
系统盘:/dev/sda
数据盘:/dev/sdb
挂载目录:/data
文件系统:xfs

需要注意:以下操作涉及分区和格式化,会清空目标磁盘数据。执行前必须确认 /dev/sdb 是目标数据盘,并确认盘内无重要数据。


一、Linux 磁盘分区简介

Linux 服务器中,常见的磁盘使用方式主要有两种:

text 复制代码
Standard Partition:标准分区
LVM:Logical Volume Manager,逻辑卷管理

一般情况下:

text 复制代码
系统盘常用标准分区
数据盘常用 LVM

当然,这不是绝对要求,而是服务器运维中的常见习惯。


1. Standard Partition 标准分区

标准分区是最传统、最直接的磁盘使用方式。

结构通常如下:

text 复制代码
/dev/sdb
└── /dev/sdb1

也就是:

text 复制代码
物理磁盘 → 普通分区 → 文件系统 → 挂载目录

例如:

text 复制代码
/dev/sdb1 → xfs → /data

标准分区的特点:

text 复制代码
配置简单
结构直观
排障方便
性能开销低
后期扩容不如 LVM 灵活

系统盘通常会使用标准分区,例如:

text 复制代码
/boot
/boot/efi
swap
/

2. LVM 逻辑卷管理

LVM 是 Linux 中常用的逻辑卷管理方式。

结构通常如下:

text 复制代码
/dev/sdb
└── /dev/sdb1
    └── PV
        └── VG
            └── LV

也就是:

text 复制代码
物理磁盘 → 普通分区 → PV → VG → LV → 文件系统 → 挂载目录

例如:

text 复制代码
/dev/sdb1 → PV → datavg → datalv → xfs → /data

其中:

text 复制代码
PV:Physical Volume,物理卷
VG:Volume Group,卷组
LV:Logical Volume,逻辑卷

LVM 的特点:

text 复制代码
支持灵活扩容
支持多块磁盘组成一个卷组
支持逻辑卷管理
适合数据盘
结构比标准分区复杂

在生产环境中,如果数据盘后续可能扩容,通常建议使用 LVM。


二、挂载数据盘 Standard Partition

本部分介绍如何使用标准分区方式将 /dev/sdb 挂载到 /data。

最终结构如下:

text 复制代码
/dev/sdb
└── /dev/sdb1    xfs    /data

1. 查看磁盘

作用:确认当前服务器磁盘情况,找到需要挂载的数据盘。

执行命令:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb

从输出可以看到:

text 复制代码
/dev/sda 是系统盘
/dev/sdb 没有分区
/dev/sdb 没有文件系统
/dev/sdb 没有挂载点

因此可以确认 /dev/sdb 是待配置的数据盘。


2. 创建 GPT 分区表

作用:初始化磁盘分区表,为创建分区做准备。

执行命令:

bash 复制代码
parted -s /dev/sdb mklabel gpt

说明:

text 复制代码
/dev/sdb:目标数据盘
mklabel gpt:创建 GPT 分区表

对于 2TB 以上的大容量磁盘,建议使用 GPT 分区表。


3. 创建标准分区

作用:在 /dev/sdb 上创建一个占用整块磁盘空间的普通分区。

执行命令:

bash 复制代码
parted -s /dev/sdb mkpart primary xfs 0% 100%

说明:

text 复制代码
primary:创建主分区
xfs:分区用途标记为 xfs
0% 100%:使用整块磁盘空间

查看分区结果:

bash 复制代码
lsblk

示例输出:

text 复制代码
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 446.6G  0 disk
├─sda1   8:1    0     1G  0 part /boot/efi
├─sda2   8:2    0     1G  0 part /boot
├─sda3   8:3    0 316.6G  0 part /
└─sda4   8:4    0   128G  0 part [SWAP]
sdb      8:16   0     8T  0 disk
└─sdb1   8:17   0     8T  0 part

此时已经生成:

text 复制代码
/dev/sdb1

4. 格式化文件系统

作用:为 /dev/sdb1 创建文件系统,使其可以被 Linux 正常挂载和读写。

本文使用 XFS 文件系统:

bash 复制代码
mkfs.xfs -f /dev/sdb1

说明:

text 复制代码
mkfs.xfs:创建 xfs 文件系统
-f:强制格式化
/dev/sdb1:目标分区

格式化完成后,再次查看:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1 xfs          3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2

此时可以看到 /dev/sdb1 已经是 xfs 文件系统。


5. 创建挂载目录

作用:创建数据盘在系统中的访问路径。

执行命令:

bash 复制代码
mkdir -p /data

说明:

text 复制代码
/data 是后续访问数据盘的目录
-p 表示目录不存在则创建,存在则不报错

6. 立即挂载数据盘

作用:将 /dev/sdb1 挂载到 /data,使数据盘立即可用。

执行命令:

bash 复制代码
mount /dev/sdb1 /data

验证挂载结果:

bash 复制代码
df -h /data

示例输出:

text 复制代码
[root@localhost ~]# df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       8.0T   56G  8.0T   1% /data

也可以使用:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1 xfs          3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2 /data

7. 配置开机自动挂载

作用:将挂载配置写入 /etc/fstab,使服务器重启后自动挂载 /data。

方式一:手动编辑 /etc/fstab。

bash 复制代码
vi /etc/fstab

在文件末尾添加:

text 复制代码
/dev/sdb1    /data    xfs    defaults    0 0

字段说明:

text 复制代码
/dev/sdb1:要挂载的设备
/data:挂载目录
xfs:文件系统类型
defaults:默认挂载参数
0:不进行 dump 备份
0:开机不进行 fsck 检查

方式二:使用 echo 追加配置。

bash 复制代码
echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab

注意:使用 echo 追加前,建议先检查 /etc/fstab,避免重复写入相同挂载项。

查看配置:

bash 复制代码
cat /etc/fstab

8. 测试 fstab 配置

作用:验证 /etc/fstab 配置是否正确,避免服务器重启后挂载失败。

先卸载:

bash 复制代码
umount /data

再重新加载 /etc/fstab:

bash 复制代码
mount -a

检查挂载结果:

bash 复制代码
df -h /data

示例输出:

text 复制代码
[root@localhost ~]# df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       8.0T   56G  8.0T   1% /data

如果可以正常挂载,说明 /etc/fstab 配置正确。


9. 已格式化磁盘快速挂载

如果 /dev/sdb1 已经创建好分区,并且已经格式化为 xfs,只是需要挂载到 /data,可以直接执行以下命令:

bash 复制代码
mkdir -p /data

mount /dev/sdb1 /data

echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab

mount -a

df -h /data

这种方式适合以下场景:

text 复制代码
磁盘已经分区
磁盘已经格式化
只需要重新挂载
需要配置开机自动挂载

三、挂载数据盘 LVM

本部分介绍如何使用 LVM 方式将 /dev/sdb 挂载到 /data。

最终结构如下:

text 复制代码
/dev/sdb
└── /dev/sdb1
    └── datavg-datalv    xfs    /data

LVM 的完整链路为:

text 复制代码
/dev/sdb1 → PV → VG(datavg) → LV(datalv) → xfs → /data

1. 查看磁盘

作用:确认当前服务器磁盘情况,找到需要配置为 LVM 的数据盘。

执行命令:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb

从输出可以看到:

text 复制代码
/dev/sda 是系统盘
/dev/sdb 没有分区
/dev/sdb 没有文件系统
/dev/sdb 没有挂载点

因此可以确认 /dev/sdb 是待配置的数据盘。


2. 创建 GPT 分区表

作用:初始化磁盘分区表,为创建 LVM 分区做准备。

执行命令:

bash 复制代码
parted -s /dev/sdb mklabel gpt

说明:

text 复制代码
/dev/sdb:目标数据盘
mklabel gpt:创建 GPT 分区表

对于 2TB 以上的大容量磁盘,建议使用 GPT 分区表。


3. 创建数据分区

作用:在 /dev/sdb 上创建一个占用整块磁盘空间的分区,后续作为 LVM 的 PV 使用。

执行命令:

bash 复制代码
parted -s /dev/sdb mkpart primary 0% 100%

查看分区结果:

bash 复制代码
lsblk

示例输出:

text 复制代码
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 446.6G  0 disk
├─sda1   8:1    0     1G  0 part /boot/efi
├─sda2   8:2    0     1G  0 part /boot
├─sda3   8:3    0 316.6G  0 part /
└─sda4   8:4    0   128G  0 part [SWAP]
sdb      8:16   0     8T  0 disk
└─sdb1   8:17   0     8T  0 part

此时已经生成:

text 复制代码
/dev/sdb1

4. 创建 PV 物理卷

作用:将 /dev/sdb1 初始化为 LVM 可以识别和管理的物理卷。

执行命令:

bash 复制代码
pvcreate /dev/sdb1

查看 PV:

bash 复制代码
pvs

示例输出:

text 复制代码
[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb1    lvm2 ---  8.00t 8.00t

此时 /dev/sdb1 已经成为 LVM 物理卷。


5. 创建 VG 卷组

作用:创建一个卷组,用来统一管理一个或多个 PV 的空间。

执行命令:

bash 复制代码
vgcreate datavg /dev/sdb1

说明:

text 复制代码
datavg:卷组名称
/dev/sdb1:加入该卷组的物理卷

查看 VG:

bash 复制代码
vgs

示例输出:

text 复制代码
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize VFree
  datavg   1   0   0 wz--n- 8.00t 8.00t

此时已经创建卷组:

text 复制代码
datavg

6. 创建 LV 逻辑卷

作用:从卷组 datavg 中划分一个逻辑卷,作为最终要格式化和挂载的设备。

执行命令:

bash 复制代码
lvcreate -l 100%FREE -n datalv datavg

说明:

text 复制代码
-l 100%FREE:使用卷组中全部剩余空间
-n datalv:逻辑卷名称为 datalv
datavg:从 datavg 卷组中创建

查看 LV:

bash 复制代码
lvs

示例输出:

text 复制代码
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  datalv datavg -wi-a----- 8.00t

逻辑卷路径为:

text 复制代码
/dev/datavg/datalv

也可以看到映射路径:

text 复制代码
/dev/mapper/datavg-datalv

这两个路径通常都可以使用。


7. 格式化文件系统

作用:为 LVM 逻辑卷创建文件系统,使其可以被 Linux 正常挂载和读写。

本文使用 XFS 文件系统:

bash 复制代码
mkfs.xfs -f /dev/datavg/datalv

说明:

text 复制代码
mkfs.xfs:创建 xfs 文件系统
-f:强制格式化
/dev/datavg/datalv:目标逻辑卷

格式化完成后,查看磁盘结构:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL UUID                                 MOUNTPOINT
sda
├─sda1            vfat              B054-FD9E                            /boot/efi
├─sda2            ext4              9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3            ext4              d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4            swap              74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1            LVM2_member       h2U2wb-nLwJ-qeM9-pFO4-xbSO-NuQo-5Cx2Fp
  └─datavg-datalv xfs               8bde6b73-25db-41fa-a73b-91f989a6d7c9

从输出可以看到:

text 复制代码
/dev/sdb1 是 LVM2_member
/dev/datavg/datalv 是 xfs

8. 创建挂载目录

作用:创建数据盘在系统中的访问路径。

执行命令:

bash 复制代码
mkdir -p /data

说明:

text 复制代码
/data 是后续访问数据盘的目录
-p 表示目录不存在则创建,存在则不报错

9. 立即挂载数据盘

作用:将 LVM 逻辑卷 /dev/datavg/datalv 挂载到 /data,使数据盘立即可用。

执行命令:

bash 复制代码
mount /dev/datavg/datalv /data

验证挂载结果:

bash 复制代码
df -h /data

示例输出:

text 复制代码
[root@localhost ~]# df -h /data
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/datavg-datalv  8.0T   56G  8.0T   1% /data

也可以使用:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL UUID                                 MOUNTPOINT
sda
├─sda1            vfat              B054-FD9E                            /boot/efi
├─sda2            ext4              9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3            ext4              d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4            swap              74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1            LVM2_member       h2U2wb-nLwJ-qeM9-pFO4-xbSO-NuQo-5Cx2Fp
  └─datavg-datalv xfs               8bde6b73-25db-41fa-a73b-91f989a6d7c9 /data

10. 配置开机自动挂载

作用:将挂载配置写入 /etc/fstab,使服务器重启后自动挂载 /data。

方式一:手动编辑 /etc/fstab。

bash 复制代码
vi /etc/fstab

在文件末尾添加:

text 复制代码
/dev/datavg/datalv    /data    xfs    defaults    0 0

字段说明:

text 复制代码
/dev/datavg/datalv:要挂载的逻辑卷
/data:挂载目录
xfs:文件系统类型
defaults:默认挂载参数
0:不进行 dump 备份
0:开机不进行 fsck 检查

方式二:使用 echo 追加配置。

bash 复制代码
echo "/dev/datavg/datalv /data xfs defaults 0 0" >> /etc/fstab

也可以使用 mapper 路径:

bash 复制代码
echo "/dev/mapper/datavg-datalv /data xfs defaults 0 0" >> /etc/fstab

注意:使用 echo 追加前,建议先检查 /etc/fstab,避免重复写入相同挂载项。

查看配置:

bash 复制代码
cat /etc/fstab

11. 测试 fstab 配置

作用:验证 /etc/fstab 配置是否正确,避免服务器重启后挂载失败。

先卸载:

bash 复制代码
umount /data

再重新加载 /etc/fstab:

bash 复制代码
mount -a

检查挂载结果:

bash 复制代码
df -h /data

示例输出:

text 复制代码
[root@localhost ~]# df -h /data
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/datavg-datalv  8.0T   56G  8.0T   1% /data

如果可以正常挂载,说明 /etc/fstab 配置正确。


12. 已格式化磁盘快速挂载

如果 LVM 已经创建完成,并且 /dev/datavg/datalv 已经格式化为 xfs,只是需要挂载到 /data,可以直接执行以下命令:

bash 复制代码
mkdir -p /data

mount /dev/datavg/datalv /data

echo "/dev/datavg/datalv /data xfs defaults 0 0" >> /etc/fstab

mount -a

df -h /data

这种方式适合以下场景:

text 复制代码
PV 已经存在
VG 已经存在
LV 已经存在
逻辑卷已经格式化
只需要重新挂载
需要配置开机自动挂载

四、UUID 挂载与盘符漂移问题

前面两种方式中,/etc/fstab 使用的是设备名挂载,例如:

text 复制代码
/dev/sdb1 /data xfs defaults 0 0

或者:

text 复制代码
/dev/datavg/datalv /data xfs defaults 0 0

在普通测试环境中,这种写法比较直观,也方便理解。

但在生产服务器中,尤其是带 RAID 卡、HBA 卡、多块硬盘、多控制器的服务器中,更推荐使用 UUID 进行挂载。


1. 什么是盘符漂移

盘符漂移指的是 Linux 系统启动后,磁盘设备名发生变化。

例如第一次安装系统时:

text 复制代码
/dev/sda    系统盘
/dev/sdb    数据盘

重启后可能变成:

text 复制代码
/dev/sda    数据盘
/dev/sdb    系统盘

或者:

text 复制代码
/dev/sda    系统盘
/dev/sdc    数据盘

也就是说,/dev/sda、/dev/sdb、/dev/sdc 这类设备名,并不一定永久固定。

如果 /etc/fstab 中写的是:

text 复制代码
/dev/sdb1 /data xfs defaults 0 0

一旦数据盘从 /dev/sdb 变成 /dev/sdc,系统启动时就可能无法正确挂载 /data。


2. 为什么会发生盘符漂移

Linux 启动时会扫描存储设备,并按照发现顺序生成设备名。

在以下场景中,磁盘发现顺序可能发生变化:

text 复制代码
服务器存在 RAID 卡
服务器存在 HBA 直通盘
服务器有多个存储控制器
服务器同时存在 SATA、SAS、NVMe 设备
RAID 组和直通盘同时存在
BIOS 或 RAID 卡启动顺序变化
系统内核扫描顺序变化

因此,/dev/sdb 这种名称更适合作为临时识别方式,不适合作为长期稳定的挂载依据。


3. RAID 卡和 BIOS 层面的解决方式

如果服务器使用 RAID 卡,可以先在 RAID 卡 BIOS 或服务器 BIOS 中确认系统盘启动顺序。

常见做法包括:

text 复制代码
在 RAID 卡中设置系统盘 VD 为 Boot Drive
在 BIOS 中设置系统盘为第一启动项
确认 RAID1 系统盘优先于数据盘
确认 HBA 直通盘不在系统盘之前启动

不同 RAID 卡界面名称可能不同,常见选项包括:

text 复制代码
Set Boot Drive
Boot Virtual Drive
Select Boot VD
Controller Boot Order
BIOS Boot Device

在 BIOS Boot中设置系统盘先启动

在RAID卡中设置 Fireware Device Order 为 Enable

在RAID中确认是系统从RAID 1的VD中启动

这样做的作用是:

text 复制代码
保证服务器优先从系统盘启动
降低系统盘和数据盘顺序变化的概率
减少因启动设备变化导致的系统异常

但是需要注意:

text 复制代码
RAID 卡和 BIOS 设置只能优化启动顺序
不能完全保证 Linux 中 /dev/sdX 名称永远不变

因此,生产环境中更稳妥的方式,仍然是使用 UUID 挂载。


4. UUID 挂载的作用

UUID 是文件系统的唯一标识。

相比 /dev/sdb1,UUID 更稳定。

即使磁盘设备名发生变化:

text 复制代码
/dev/sdb1 变成 /dev/sdc1

只要文件系统没有重新格式化,它的 UUID 一般不会变化。

因此,把 /etc/fstab 从设备名挂载改成 UUID 挂载,可以避免盘符漂移导致的挂载失败。


5. 查看标准分区 UUID

如果是标准分区方式,查看命令如下:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1 xfs          3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2 /data

其中 /dev/sdb1 的 UUID 是:

text 复制代码
3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2

也可以使用:

bash 复制代码
blkid /dev/sdb1

示例输出:

text 复制代码
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2" TYPE="xfs"

6. 修改标准分区 fstab 为 UUID 挂载

原来的配置是:

text 复制代码
/dev/sdb1 /data xfs defaults 0 0

修改为:

text 复制代码
UUID=3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2 /data xfs defaults 0 0

可以手动编辑:

bash 复制代码
vi /etc/fstab

也可以先备份:

bash 复制代码
cp /etc/fstab /etc/fstab.bak

然后修改 /etc/fstab 中 /data 对应的挂载行。

修改完成后测试:

bash 复制代码
umount /data

mount -a

df -h /data

验证:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 vfat         B054-FD9E                            /boot/efi
├─sda2 ext4         9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3 ext4         d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4 swap         74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1 xfs          3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2 /data

7. 查看 LVM 逻辑卷 UUID

如果是 LVM 方式,需要查看最终文件系统所在的逻辑卷 UUID,而不是 PV 的 UUID。

执行命令:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL UUID                                 MOUNTPOINT
sda
├─sda1            vfat              B054-FD9E                            /boot/efi
├─sda2            ext4              9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3            ext4              d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4            swap              74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1            LVM2_member       h2U2wb-nLwJ-qeM9-pFO4-xbSO-NuQo-5Cx2Fp
  └─datavg-datalv xfs               8bde6b73-25db-41fa-a73b-91f989a6d7c9 /data

这里要使用的是:

text 复制代码
datavg-datalv 这一行的 UUID

也就是:

text 复制代码
8bde6b73-25db-41fa-a73b-91f989a6d7c9

不要使用 /dev/sdb1 这一行的 LVM2_member UUID。

也可以执行:

bash 复制代码
blkid /dev/datavg/datalv

示例输出:

text 复制代码
[root@localhost ~]# blkid /dev/datavg/datalv
/dev/datavg/datalv: UUID="8bde6b73-25db-41fa-a73b-91f989a6d7c9" TYPE="xfs"

8. 修改 LVM fstab 为 UUID 挂载

原来的配置是:

text 复制代码
/dev/datavg/datalv /data xfs defaults 0 0

修改为:

text 复制代码
UUID=8bde6b73-25db-41fa-a73b-91f989a6d7c9 /data xfs defaults 0 0

建议先备份:

bash 复制代码
cp /etc/fstab /etc/fstab.bak

编辑配置:

bash 复制代码
vi /etc/fstab

修改完成后测试:

bash 复制代码
umount /data

mount -a

df -h /data

验证:

bash 复制代码
lsblk -f

示例输出:

text 复制代码
[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL UUID                                 MOUNTPOINT
sda
├─sda1            vfat              B054-FD9E                            /boot/efi
├─sda2            ext4              9776d1fe-9f2c-4513-902e-1f42ca233fdd /boot
├─sda3            ext4              d3037b53-210d-4590-bd5d-f87360a35efd /
└─sda4            swap              74dfddcb-7819-46dc-899f-8baf442f9280 [SWAP]
sdb
└─sdb1            LVM2_member       h2U2wb-nLwJ-qeM9-pFO4-xbSO-NuQo-5Cx2Fp
  └─datavg-datalv xfs               8bde6b73-25db-41fa-a73b-91f989a6d7c9 /data

9. UUID 挂载配置总结

标准分区:

text 复制代码
UUID=3f60b2df-6a2d-4f21-b9de-4d750ad7b7a2 /data xfs defaults 0 0

LVM 逻辑卷:

text 复制代码
UUID=8bde6b73-25db-41fa-a73b-91f989a6d7c9 /data xfs defaults 0 0

生产环境建议优先使用 UUID 挂载,而不是直接使用:

text 复制代码
/dev/sdb1
/dev/sdc1

五、标准分区与 LVM 对比

对比项 标准分区 LVM
结构 简单 较复杂
配置难度 低 中等
排障难度 较低 较高
扩容能力 一般 强
多盘合并 不方便 支持
在线扩容 不如 LVM 灵活 支持
快照能力 不支持 支持
适合系统盘 适合 一般
适合数据盘 可以使用 更推荐
生产环境灵活性 一般 较高

简单理解:

text 复制代码
标准分区:简单、直接、适合系统盘或固定容量磁盘
LVM:灵活、方便扩容、适合数据盘和生产环境

六、生产环境建议

在服务器交付和运维场景中,建议遵循以下原则。


1. 系统盘建议使用标准分区

系统盘通常包含:

text 复制代码
/boot
/boot/efi
swap
/

建议结构简单,方便启动和排障。

例如:

text 复制代码
/dev/sda1    /boot/efi
/dev/sda2    /boot
/dev/sda3    /
/dev/sda4    swap

如果系统盘使用 RAID1,可以先在 RAID 卡中创建 RAID1 逻辑盘,然后安装系统时再进行标准分区。


2. 数据盘建议使用 LVM

数据盘通常用于:

text 复制代码
业务数据
日志数据
数据库文件
备份文件
应用目录

这类磁盘后续可能存在扩容需求,因此更推荐使用 LVM。

推荐结构:

text 复制代码
/dev/sdb1 → PV → VG → LV → xfs → /data

3. 文件系统建议使用 XFS

在服务器数据盘场景中,XFS 是比较常见的选择。

特点:

text 复制代码
适合大容量磁盘
适合大文件场景
性能稳定
在线扩容方便

如果使用 LVM + XFS,后续扩容也比较方便。


4. fstab 建议使用 UUID

不建议生产环境长期使用:

text 复制代码
/dev/sdb1 /data xfs defaults 0 0

更建议使用:

text 复制代码
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults 0 0

原因是:

text 复制代码
/dev/sdb 可能变化
UUID 更稳定
可以避免盘符漂移导致挂载失败

5. 修改 fstab 后必须测试

每次修改 /etc/fstab 后,都建议执行:

bash 复制代码
mount -a

如果没有报错,再检查:

bash 复制代码
df -h /data
lsblk -f

不要只修改 /etc/fstab 后直接重启。

如果 /etc/fstab 配置错误,严重时可能导致系统启动异常或进入紧急模式。


6. 操作前必须确认目标磁盘

执行以下危险操作前:

bash 复制代码
parted -s /dev/sdb mklabel gpt
mkfs.xfs -f /dev/sdb1
pvcreate /dev/sdb1

一定要确认 /dev/sdb 是目标数据盘。

建议至少执行:

bash 复制代码
lsblk -f
fdisk -l

确认磁盘容量、分区情况和挂载情况。


七、常用命令汇总

查看磁盘和文件系统:

bash 复制代码
lsblk -f

查看磁盘结构:

bash 复制代码
lsblk

查看 UUID:

bash 复制代码
blkid

查看挂载情况:

bash 复制代码
df -h

查看 /data 挂载情况:

bash 复制代码
df -h /data

创建挂载目录:

bash 复制代码
mkdir -p /data

挂载标准分区:

bash 复制代码
mount /dev/sdb1 /data

挂载 LVM 逻辑卷:

bash 复制代码
mount /dev/datavg/datalv /data

测试 /etc/fstab:

bash 复制代码
mount -a

卸载 /data:

bash 复制代码
umount /data

查看 PV:

bash 复制代码
pvs

查看 VG:

bash 复制代码
vgs

查看 LV:

bash 复制代码
lvs

八、总结

Linux 服务器挂载数据盘时,常见方式有两种:

text 复制代码
标准分区
LVM

标准分区适合结构简单、容量固定的场景:

text 复制代码
/dev/sdb1 → xfs → /data

LVM 适合生产环境和后续可能扩容的场景:

text 复制代码
/dev/sdb1 → PV → VG → LV → xfs → /data

在实际服务器环境中,还需要注意盘符漂移问题。

因此,最终生产建议是:

text 复制代码
系统盘使用标准分区
数据盘使用 LVM
文件系统使用 XFS
/etc/fstab 使用 UUID 挂载
修改 fstab 后执行 mount -a 测试

这样可以兼顾配置清晰度、后期扩容能力和系统稳定性。


说明

免责声明与版权声明

本文内容由个人发布,仅用于学习、技术研究与经验交流。

文中涉及的软件(包括正版及第三方版本)仅供测试与学习用途,不构成任何形式的分发、破解、商业使用或侵权行为的鼓励。若您需要长期使用或商业部署,请前往官方网站购买或获取正版授权。

作者不对任何软件的使用、修改、传播及由此产生的后果承担法律责任。读者应自行判断、下载与使用软件,并遵守所在地法律法规及相关许可协议。

部分内容参考或摘录自公开资料、官方文档或其他技术文章,均已尽可能注明原作者及来源链接。若原作者或版权方认为本文存在不当引用或侵权内容,请联系作者处理,作者将在核实后及时修改或删除相关内容。


知识共享许可声明

除特别说明外,本文中的原创文字、图片、图表及资料均依据:

CC BY-NC-SA 4.0(署名-非商业性使用-相同方式共享)

许可协议发布。

您可以在遵守本协议的前提下:

  • 复制、转载和分享本文内容;
  • 对本文内容进行修改、改编和二次创作;
  • 将本文内容用于个人学习、研究和非商业用途。

同时必须满足以下条件:

  • 保留原作者署名及原文链接;
  • 明确标注内容来源;
  • 不得将本文及其衍生作品用于任何商业用途;
  • 基于本文进行修改、改编或再创作的作品,必须继续采用相同协议进行发布。

特别声明

未经作者书面授权,禁止以下行为:

  • 将本文原创内容用于商业培训、付费课程、付费社群、收费咨询等商业活动;
  • 将本文原创内容转载至以盈利为目的的网站、平台、出版物或知识付费平台;
  • 将本文原创内容批量采集、镜像、聚合或作为数据库内容进行商业运营;
  • 将本文原创内容用于人工智能模型训练、知识库构建、数据集整理或其他商业化用途;
  • 删除、修改或隐藏原作者署名、原文链接及版权声明。

对于违反上述声明的行为,作者保留依法追究相关责任的权利。


AI 辅助生成声明

本文部分内容在撰写、整理、润色或结构优化过程中使用了 AI 工具进行辅助生成。

AI 生成内容仅作为写作辅助参考,最终内容已由作者进行人工审阅、修改、校对与确认。本文观点、技术步骤、命令示例及相关说明均以作者最终发布版本为准。

读者在参考本文内容进行实际操作前,应结合自身环境进行验证,作者不因 AI 辅助生成内容可能存在的遗漏、错误或不适用情况承担额外责任。

相关推荐
xixiaoyunya4 分钟前
虚拟机备份怎么做:镜像级与文件级搭配的完整实操方案
linux·运维·网络
墨家句子6 分钟前
服务器被反复尝试登录之后:fail2ban 加密钥登录的五道加固
linux·后端
阿明610 分钟前
进程替换【Linux】
linux·运维·服务器
sunoo-22914 分钟前
【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础
linux·运维·驱动开发·笔记·学习·阿里云·恩智浦
YonyouHRSaaS1 小时前
从安全、信创、运维三方面看,人力资源管理系统哪种部署方式更适合企业HR?
运维·安全·hr系统·人力资源管理系统·hr saas·人事管理系统
啦啦啦啦啦zzzz1 小时前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储
倔强的石头1061 小时前
【Linux指南】动静态库系列(十二):库工程发布与错误排查:从能跑到可维护
linux·运维·服务器
wdfk_prog1 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
掉进电商坑三年没爬出来的东叔1 小时前
云服务器搭建个人网站实战:从零到公网访问,含域名HTTPS
运维·服务器·https
xiaoye-duck1 小时前
《Linux 网络编程》深入理解 epoll(上):从接口到底层内核工作机制剖析
linux·网络