一名初级工程师在 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 ~]$