在将带有 AWS 市场代码的 CentOS 根卷附加到其他 CentOS EC2 实例时,另一个实例使用附加的根卷启动

On attaching CentOS root volume with AWS marketplace code to other CentOS EC2 instance, the other instance boots up using the attached root volume

我在 ec2 实例中搞砸了我系统的根卷,所以我将实例的根卷附加到其他 ec2 实例,以便我可以访问坏的根卷并纠正我的错误。当我启动另一个实例时,搞砸的根卷变成了实例的根卷。我将卷附加为 /dev/sdb (内核将其更改为 /dev/xvdf )并且实例原始根卷位于 /dev/sda (内核将其更改为 /dev/xvde )。所以内核应该加载 /dev/xvde 作为根文件系统,但它的加载会破坏根卷 (/dev/xvdf) .

系统的系统日志片段如下:

dracut:启动普利茅斯守护进程

xlblk_init: register_blkdev 专业: 202

blkfront:xvdf:禁用障碍

xvdf: 未知分区 table

blkfront:xvde:禁用障碍

xvde: 未知分区 table

EXT4-fs (xvdf):以有序数据模式挂载的文件系统。选项:

dracut:已挂载根文件系统/dev/xvdf

从另一个 ec2 实例中分离 "screwed up" 卷

正常启动另一个实例

将 EBS 附加到 运行 实例请参阅 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html

以 root 身份执行 fdisk -l 并找到新实例的设备名称

创建一个"mount point"(一个目录)并在上面挂载所需的磁盘分区

修复后,在挂载点上使用 umount 命令,然后解除附加 音量

如果 AMI 有市场代码,请尝试此答案中给出的步骤 https://serverfault.com/questions/522173/aws-vol-xxxxxxx-with-marketplace-codes-may-not-be-attached-as-as-secondary-dev

由于搞砸的根卷和原始实例根卷在卷分区上附加了相同的标签(在我的例子中,我的 OS 是 centos6.5,标签是 centos_root ) ,因此我们必须更改实例的标签,以便下次启动时不会查找标签 centos_root,而是查找我们更改后的标签。

首先,通过命令更改根卷分区标签 前任。 e2label /dev/xvde your_label , 这里/dev/xvde是根分区

其次,将“/etc/fstab and /boot/grub/grub.conf”中的标签更改为your_label.

三、停止实例

第四,将搞砸的根卷附加到实例

五、启动实例

第六,现在你可以看到搞砸了的根卷分区并将其挂载到某个挂载点以解决你的问题。

简单的方法是将 Centos 根卷附加到亚马逊 linux 机器上并解决问题。不要将 Centos 根卷附加到另一个 ec2 实例 运行 Centos。 AWS 市场中的 Centos 将 "centos" 作为根卷的标签。因此,当我们将 centos root volume 附加到另一台 centos 机器时,AWS 会混淆要挂载哪个 root volume 并发生异常。

PSA:不要在 AWS 中使用 CentOS。

您不能再将 CentOS 实例的根卷附加到另一个实例。这是设计使然,以防止人们规避许可协议。尽管 CentOS 在技术上是免费的,但因为它是一个市场 AMI,所以规则适用。总的来说,这是一个很好的规则,但它使得无法恢复失败的配置。

使用亚马逊 Linux。无论如何,它基本上是 CentOS。