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