前提条件:两台 Amazon Linux 2 实例,由于误操作导致其中一台EC2实例连接不上,现需要将旧实例的数据导出。因此将该实例根卷卸载,挂载到另外一台新的EC2实例上。挂载EBS卷的时候报错:mount: /data: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.
将旧实例的根卷挂载到新的实例上
[root@ip-10-0-1-131 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 8G 0 disk
└─xvdf1 202:81 0 8G 0 part # 旧卷
mount 挂载卷
[root@ip-10-0-1-131 ~]# mkdir /data
[root@ip-10-0-1-131 ~]# mount /dev/xvdf1 /data
mount: /data: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.
报错:mount: /data: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.
原因:
如果实例是使用相同的 AMI 启动的,则它们的根卷将从同一EBS快照创建,因此问题可能是重复的 XFS UUID。
每个 XFS 文件系统都有一个存储在磁盘上的唯一 ID,这可以防止多次意外挂载同一个文件系统。由于 EBS 快照/还原过程是块级副本,因此从快照创建的任何卷都将具有与源卷相同的UUID,因此一次只能挂载一个卷。
查看卷UUID
[root@ip-10-0-1-131 ~]# blkid
/dev/xvda1: LABEL="/" UUID="5d259081-e60a-4c60-8f74-78ad0ee25652" TYPE="xfs" PARTLABEL="Linux" PARTUUID="f257d0ed-ac68-4b9b-8ee1-1f8cbe74e9e6"
/dev/xvdf1: LABEL="/" UUID="5d259081-e60a-4c60-8f74-78ad0ee25652" TYPE="xfs" PARTLABEL="Linux" PARTUUID="f257d0ed-ac68-4b9b-8ee1-1f8cbe74e9e6"
可以看到 xvda1 与 xvdf1 的 UUID 冲突了
解决
使用xfs_admin永久更改卷上的 UUID
[root@ip-10-0-1-131 ~]# xfs_admin -U generate /dev/xvdf1
Clearing log and setting UUID
writing all SBs
new UUID = 6c151624-256c-4c25-8aed-0857575720d8
重新挂载—成功
[root@ip-10-0-1-131 ~]# mount /dev/xvdf1 /data
[root@ip-10-0-1-131 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
.....
/dev/xvdf1 xfs 8.0G 1.6G 6.5G 20% /data
补充
在挂载的时候也许会报其他错误,比如:
[root@ip-10-0-1-131 ~]# sudo mount /dev/xvdf1 /data
mount : unknown filesystem type '(null)'
这时候第一反应也许是往文件系统的方向排查,比如通过 mkfs 命令进行格式化;当然,这个对新卷(没有数据的)是可以的,但是如果是 有数据的卷,格式化之后会导致数据丢失!这时候需要结合自己的实际情况去进行排错。
技术性分享,转载请注明出处!
欢迎互相交流,共同进步!