1. 背景信息

在 Linux 系统中,我们可以通过配置 fstab 文件让主机启动时会自动挂载数据盘的文件系统。但是如果 fstab 文件配置不当,那么硬盘挂载顺序变更后,可能会导致主机重启后不能正常运行。本文介绍如何在 fstab 文件中配置 UUID 方式自动挂载数据盘的文件系统,可以解决此类重启异常问题。

fstab 支持使用硬盘分区名(例如/dev/vdb1)或 UUID 标识文件系统,两者的差异如下所示:

  • 在 fstab 中使用分区名标识文件系统,如果硬盘的挂载顺序变更,分区可能不会被正确的挂载(mount)到原来的挂载点。这种情况下可能会影响主机上运行的应用。
  • 在 fstab 中使用 UUID 标识文件系统,如果硬盘的挂载顺序变更,分区仍然可以正确的挂载(mount)到原来的挂载点。因此建议使用 UUID 标识文件系统。

2. 前提条件

硬盘已经进行分区格式化.

3. 操作步骤

3.1 查看硬盘信息

运行以下命令查看主机的硬盘信息:

fdisk -lu
Disk /dev/sda: 599.6 GB, 599584145408 bytes, 1171062784 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disk label type: dos
Disk identifier: 0x0004f49a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200  1050675199   524288000   83  Linux
/dev/sda3      1050675200  1171062783    60193792   82  Linux swap / Solaris

Disk /dev/sdb: 1799.8 GB, 1799792623616 bytes, 3515219968 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disk label type: dos
Disk identifier: 0x2d775180

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   419432447   209715200   83  Linux
/dev/sdb2       419432448  1468008447   524288000   83  Linux
/dev/sdb3      1468008448  1677723647   104857600   83  Linux
/dev/sdb4      1677723648  3515219967   918748160   83  Linux
....

运行以下命令查询硬盘盘的 UUID 信息:

blkid
/dev/sda1: UUID="63c9ad21-0310-48cf-b0d7-203ee3a5d261" TYPE="xfs"
/dev/sda2: UUID="63048acb-74ad-4cd0-a6f8-c7be247a81d8" TYPE="xfs"
/dev/sda3: UUID="de9f7e24-08bf-4bb9-a3c6-080d98a5ff44" TYPE="swap"
/dev/sdb1: UUID="dac4da80-40d1-46ef-89b5-d2ee24a316de" TYPE="xfs"
/dev/sdb2: UUID="cc39d05d-4bfc-48fb-8b08-257073c7b8b4" TYPE="xfs"
/dev/sdb3: UUID="de5c9c24-5b11-46ae-ae91-1ae384a46e99" TYPE="ext4"
/dev/sdb4: UUID="40bf6bc7-ab36-40b6-855c-b7456e57b48f" TYPE="xfs"
/dev/sdc1: UUID="f19af473-626e-4850-9303-8cca0111fd01" TYPE="xfs"

3.2 添加挂载信息

运行以下命令分别创建数据盘的挂载点(示例):

# 创建/dev/vdb1的挂载点/test01:
mkdir /test01
# 创建/dev/vdc1的挂载点/test02:
mkdir /test02

在 fstab 文件中添加挂载信息:

vi /etc/fstab
#按 i键进入编辑模式
#新增以下挂载信息
UUID=59f23670-94c1-42d1-8bb0-209d7854****(0)   /test01(1)     ext4(2)    defaults(3)     0(4)   0(5)
UUID=88619b1a-d971-41c2-91d0-3a440fc0****   /test02     xfs     defaults     0   0
...
#修改完成后,按 Esc 键退出编辑模式
#输入:wq后,按 Enter 键保存并退出

字段说明

序号 字段 说明
0 \ 要挂载分区的文件系统。此处建议使用UUID,可以使用 blkid命令查询分区文件系统的UUID。
1 \ 文件系统的挂载位置。可以自己创建新的挂载位置,例如本文中的/test01和/test02。
2 \ 要挂载分区的文件系统类型。可以使用 blkid命令查询分区的文件系统类型。
3 \ 挂载时使用的参数,一般情况下使用defaults参数。如果需要使用多个参数,通过英文逗号(,)分隔,例如defaults,noatime。对于\参数的更多信息,请参见fstab说明。
4 \ dump工具是否对这个文件系统进行备份。0:表示忽略。1:表示进行备份。一般情况下没有使用dump工具,可以设置为0。
5 \ fsck检查文件系统的优先级。0:表示不检查文件系统。1:如果需要检查,根目录(/)对应的文件系统设置为1。2:如果需要检查,非根目录对应的其它文件系统设置为2。一般情况下,可以设置为0。

3.3 挂载分区

运行以下命令让/etc/fstab中定义的挂载点生效:

mount -a

3.4 查看分区

执行如下命令查看分区:

df -h
Filesystem                                                                        Size  Used Avail Use% Mounted on
devtmpfs                                                                          126G     0  126G   0% /dev
tmpfs                                                                             126G     0  126G   0% /dev/shm
tmpfs                                                                             126G   12M  126G   1% /run
tmpfs                                                                             126G     0  126G   0% /sys/fs/cgroup
/dev/sda2                                                                         500G  439G   62G  88% /
/dev/sdc1                                                                         500G  125G  375G  25% /var/log
/dev/sdb2                                                                         500G   37G  464G   8% /registry-data
/dev/sdb3                                                                          99G  758M   93G   1% /opt/kubernetes/data
/dev/sda1                                                                        1014M  164M  851M  17% /boot
/dev/sdb4                                                                         876G   86G  791G  10% /tdc-installer
/dev/sdb1                                                                         200G   86G  115G  43% /var/lib/docker
...

4. 总结

配置完成后,您后续如果重启主机,系统将自动挂载数据盘。

5. 自动化脚本

#!/bin/bash

function print_red() {
    echo -e "\e[31;1m$1\e[0m"
}

function print_green() {
    echo -e "\e[32m$1\e[0m"
}

function print_bold() {
    echo -e "\033[1;m$1\033[0m"
}

# 读取 /etc/fstab 文件
while IFS= read -r line; do
  # 所有非注释、非 UUID 且以 /dev/ 开头的设备
  if [[ ! $line =~ ^\s*# && ! $line =~ UUID= && $line =~ /dev/ ]]; then
    # 获取 device
    device=$(echo "$line" | awk '{print $1}')
    # 查找 UUID
    uuid=$(blkid -o value -s UUID "$device")
    # 如果 uuid 没有找到,说明 /etc/fstab 存在问题,先修正错误
    if [[ ! -n $uuid ]]; then
      print_red "无法获取设备:$device 的 UUID!"
      exit 1
    fi
    # 使用 UUID 替换
    new_line=$(echo "$line" | sed "s|$device|UUID=$uuid|")
    # 打印转换后的行
    echo "$new_line"
  else
    # 其它行原样输出
    echo "$line"
  fi
done < /etc/fstab
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2024-02-29 14:49:19

results matching ""

    No results matching ""