疑难点拨 | AWS EC2 Linux 实例无法挂载 EBS 卷


  故障描述

一名初级工程师在 AWS EC2 Linux 实例上,执行 EBS 卷的挂载操作,命令执行后,系统提示发生了错误导致无法顺利挂载。挂载的 EBS 卷为,其它AWS EC2 Linux 实例上分离卸载下来的根卷。

[ec2-user@ip-172-31-23-124 ~]$ sudo lsblk 
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0   8G  0 disk
├─xvda1   202:1    0   8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi
xvdb      202:16   0   8G  0 disk 
├─xvdb1   202:17   0   8G  0 part 
├─xvdb127 259:2    0   1M  0 part 
└─xvdb128 259:3    0  10M  0 part 
[ec2-user@ip-172-31-23-124 ~]$ sudo file -s /dev/xvdb1 /dev/xvda1
/dev/xvdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
/dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[ec2-user@ip-172-31-23-124 ~]$ ls /mnt
[ec2-user@ip-172-31-23-124 ~]$ sudo mount /dev/xvdb1 /mnt/
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/xvdb1, missing codepage or helper program, or other error.

  故障排查

使用相同的 AMI 创建实例的时候,启动过程中生成的系统根卷,有可能使用了相同的EBS 快照,在这种情形下,该根卷的 UUID 可能是重复的。背后的机制是,每个 XFS 文件系统都有一个存储在磁盘上的唯一 ID,用来防止意外地多次挂载同一个文件系统。由于 EBS 快照创建和还原过程是数据块级副本,因此从快照创建的任何卷都将具有与源卷相同的 UUID。但是挂载具有重复UUID 的 EBS 卷的时候,系统仅仅会提示笼统的错误信息。该错误信息过于笼统且极具迷惑性,从字面意思无法判断真正的故障原因。
推荐的排故障除方法是,查看已经附加的EBS 卷的 UUID 是否重复。

[ec2-user@ip-172-31-23-124 ~]$ sudo blkid /dev/xvd?1
/dev/xvda1: LABEL="/" UUID="eca962cd-6efb-4fe6-b16d-ffa610003b09" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux" PARTUUID="47020413-624c-4243-968f-3d65e0381ac5"
/dev/xvdb1: LABEL="/" UUID="eca962cd-6efb-4fe6-b16d-ffa610003b09" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux" PARTUUID="47020413-624c-4243-968f-3d65e0381ac5"

  解决对策

对策1:忽略重复的 UUID 以进行临时挂载
使用选项 -o nouuid 可以忽略重复的 UUID,直接进行挂载。

[ec2-user@ip-172-31-23-124 ~]$ sudo mount -o nouuid /dev/xvdb1 /mnt/
[ec2-user@ip-172-31-23-124 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs          tmpfs     475M     0  475M   0% /dev/shm
tmpfs          tmpfs     190M  472K  190M   1% /run
/dev/xvda1     xfs       8.0G  1.6G  6.4G  20% /
tmpfs          tmpfs     475M     0  475M   0% /tmp
/dev/xvda128   vfat       10M  1.3M  8.7M  13% /boot/efi
tmpfs          tmpfs      95M     0   95M   0% /run/user/1000 [ec2-user@ip-172-31-23-124 ~]$ sudo umount /mnt
[ec2-user@ip-172-31-23-124 ~]$

对策2:分配新的 UUID 以进行永久挂载

[ec2-user@ip-172-31-23-124 ~]$ sudo xfs_admin -U generate /dev/xvdb1
Clearing log and setting UUID
writing all SBs
new UUID = 9df9f786-b6af-4533-9a5a-c78ebc96205e
[ec2-user@ip-172-31-23-124 ~]$ sudo mount /dev/xvdb1 /mnt/
[ec2-user@ip-172-31-23-124 ~]$ ls /mnt/
bin  boot  dev  etc  home  lib  lib64  local  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[ec2-user@ip-172-31-23-124 ~]$