잘못된 볼륨에서 부팅 - Amazon Elastic Compute Cloud

잘못된 볼륨에서 부팅

/dev/xvda 또는 /dev/sda에 연결된 볼륨이 아닌 다른 볼륨이 인스턴스의 루트 볼륨이 되는 경우가 있을 수 있습니다. 이 상황은 다른 인스턴스의 루트 볼륨이나 루트 볼륨의 스냅샷에서 생성된 볼륨을 기존 루트 볼륨의 인스턴스에 연결한 경우에 발생할 수 있습니다.

이 문제는 Linux의 첫 번째 ramdisk의 작동 방식 때문에 야기됩니다. 보통 /에서 /etc/fstab 로 정의된 볼륨을 선택하게 되는데, 일부 배포에서는 이를 볼륨 파티션에 연결된 레이블로 확인합니다. 특히 /etc/fstab의 내용이 다음과 같을 수 있습니다.

LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0

이때 두 볼륨의 레이블을 확인한 경우 두 볼륨 모두 / 레이블을 포함하는 것을 볼 수 있습니다.

[ec2-user ~]$ sudo e2label /dev/xvda1 / [ec2-user ~]$ sudo e2label /dev/xvdf1 /

이 예에서, 처음에 부팅 대상으로 의도했던 /dev/xvdf1 볼륨 대신에 /dev/xvda1이 ramdisk 실행 후 인스턴스가 부팅되는 루트 디바이스가 될 수 있습니다. 이 문제를 해결하려면 동일한 e2label 명령을 사용하여 부팅 볼륨이 되게 하지 않으려는 볼륨의 레이블을 변경합니다.

경우에 따라 /etc/fstab에서 UUID를 지정하면 이 문제를 해결할 수 있습니다. 하지만 두 볼륨 모두 동일한 스냅샷에서 생성된 경우 또는 두 번째 스냅샷이 기본 볼륨에서 생성된 경우에는 두 볼륨이 UUID를 공유합니다.

[ec2-user ~]$ sudo blkid /dev/xvda1: LABEL="/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334 /dev/xvdf1: LABEL="old/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334
연결된 ext4 볼륨의 레이블을 변경하려면
  1. e2label 명령을 사용하여 볼륨의 레이블을 /가 아닌 다른 레이블로 변경합니다.

    [ec2-user ~]$ sudo e2label /dev/xvdf1 old/
  2. 볼륨에 새 레이블이 지정되었는지 확인합니다.

    [ec2-user ~]$ sudo e2label /dev/xvdf1 old/
연결된 xfs 볼륨의 레이블을 변경하려면
  • xfs_admin 명령을 사용하여 볼륨의 레이블을 /가 아닌 다른 레이블로 변경합니다.

    [ec2-user ~]$ sudo xfs_admin -L old/ /dev/xvdf1 writing all SBs new label = "old/"

그림과 같이 볼륨 라벨을 변경한 후 인스턴스를 재부팅하면 인스턴스 부팅 시 첫 번째 ramdisk에서 올바른 볼륨을 선택하게 할 수 있습니다.

중요

볼륨에 연결한 새 레이블을 분리한 후 다른 인스턴스에 연결하여 루트 볼륨으로 사용하려면 위의 절차를 다시 수행하고 볼륨 레이블을 다시 원래 값으로 돌려야 합니다. 이렇게 하지 않으면 ramdisk가 / 레이블을 가진 볼륨을 찾을 수 없기 때문에 다른 인스턴스가 부팅되지 않습니다.