그래서 며칠이 지났지만 여전히 Ubuntu 16을 실행하는 EC2를 사용하여 새 HVM 인스턴스에 연결할 수 없습니다. 참고로 Ubuntu 16을 실행하는 m3 인스턴스에서 Ubuntu 16을 실행하는 C5 인스턴스로 서버를 업그레이드하려고 합니다. 제가 시도한 거의 모든 방법을 통해 새 C5 인스턴스를 중지하고 모든 볼륨을 분리하고 새로 업데이트된 소스 볼륨을 로 연결할 수 있었지만 /dev/sda1
인스턴스에 연결하려고 하면 항상 결국 시간이 초과되었습니다. Amazon의 상태 확인도 실패합니다. 인스턴스에 연결할 수 없다는 메시지가 표시되기 때문입니다. 그러나 시스템 로그에는 시작할 때 아무런 문제도 표시되지 않습니다.
나는 모든 것을 시도해 보았습니다.이 게시물. 난 노력 했어이 게시물또한. 다른 사이트도 보고 추천도 해줬는데이것그리고이것시도. ec2 명령줄 도구 방법과 ec2 콘솔(온라인)에서 AMI 변환을 모두 시도했지만 변환된 AMI로 C5 인스턴스를 시작할 수 없거나 인스턴스가 중지되고 실패합니다(예: 명령줄을 통한 변환).
제가 실제로 이 문제를 일으킬 수 있다고 생각하는 유일한 것은 C5 인스턴스의 파티션에 대한 명명 규칙입니다. 내가 본 모든 가이드는 xvda/xvdf/xvdg
. 제가 틀렸을 수도 있지만 이러한 파티션이나 디스크가 없고 대신 nvme0n1
, nvme0n1p1
, (새 HVM 루트), nvme1n1
및 가 있습니다 nvme1n1p1
. HVM/소스/대상 디스크 방법을 시도했을 때 nvme0n1/nvme0n1p1
, nvme1n1
(대상 – 모든 것이 끝나야 하는 곳) 및 nvme2n1/nvme2n1p1
(소스 – 모든 것이 있는 곳, m3)이 있었습니다 . 나는 찾았다nvme에 관한 이 Amazon 게시물/mnt/
따라서 를 사용할 때 올바른 디스크/파티션을 사용하고 있기 때문에 이것이 문제가 될 것이라고 생각하지 않습니다 . mkdir -p /mnt/target && mount /dev/nvme1n1 /mnt/target
대신에 전화했지만 mkdir -p /mnt/target && mount /dev/xvdf /mnt/target
지금까지 아무것도 작동하지 않았습니다. target
as 를 연결하는 순간 내 인스턴스에 연결할 수 없게 됩니다 /dev/sda1
.
그렇다면 이름이 디스크로 이 작업을 수행할 때 누락된 것이 있습니까 nvme*
? 문제를 이해하는 데 도움이 되도록 제공할 수 있는 다른 정보나 디버그 내용이 있습니까?
답변1
나는 이 질문이 많이 보이지 않았다는 것을 알고 있지만 혹시라도 내 결과가 미래에 누군가에게 도움이 될 수 있기를 바랍니다. 인스턴스를 마이그레이션하는 데 도움을 준 Amazon 지원팀의 Steve E.에게 감사를 전하고 싶습니다. <3
어쨌든 Ubuntu 16.04 M3(PV) 인스턴스를 Ubuntu 16.04 C5(HVM) 인스턴스로 마이그레이션할 때 두 가지 문제가 있었습니다. 첫 번째 문제는 새로운 C5 인스턴스가 새로운 명명 규칙을 사용하므로 PV를 HVM으로 마이그레이션하는 방법에 대한 다른 자습서가 동일한 방식으로 작동하지 않는다는 것입니다. 다른 문제는 내 M3(PV) 인스턴스가 Ubuntu로 업그레이드되었다는 것입니다. 저는 실제로 작년에 Ubuntu 12 -> Ubuntu 14 -> Ubuntu 16을 사용했습니다. 이로 인해 클라우드 네트워크 파일이 생성되지 않아 내 인스턴스에 연결할 수 없는 문제가 발생했습니다.
어쨌든 새로운 nvme 명명 규칙을 사용하여 Ubuntu 16.04 PV 인스턴스를 HVM 인스턴스로 마이그레이션하려면 다음을 수행하십시오.
사전 요구 사항 요약:
시작하기 전에 PV 인스턴스에 다음을 설치해야 합니다.
$ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists $ sudo apt-get install linux-aws
- PV 인스턴스 중지 &스냅샷 만들기루트 볼륨의이 스냅샷을 복원하세요소스와 동일한 가용 영역에 새 EBS 볼륨으로 생성(스냅샷 생성 직후 PV 인스턴스 시작)
- 새로운 C5 HVM 인스턴스 실행(대상) 원본 인스턴스의 동일한 가용성 영역에서 Ubuntu Server 16.04 LTS(HVM) 선택(이 루트 볼륨은 일시적으로만 사용되므로 이 새 인스턴스 EBS 루트 볼륨 크기를 8GB로 유지)
- 인스턴스가 시작된 후,볼륨을 연결하다1단계(PV 인스턴스의 루트 볼륨)에서
/dev/sdf
(Ubuntu 시스템의 경우 이름은nvme1n1
)로 복원했습니다. - 새(빈) EBS 볼륨 생성('소스' PV 루트 볼륨과 동일한 크기) HVM 인스턴스에 다음과 같이 연결합니다
/dev/sdg
(Ubuntu 시스템에서는 이름은nvme2n1
).
이주:
인스턴스에 로그인한 후 sudo su
루트 사용자로 모든 명령을 실행하는 데 사용합니다.
볼륨 표시
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 8G 0 disk └─nvme0n1p1 259:1 0 8G 0 part / nvme1n1 259:2 0 100G 0 disk nvme2n1 259:3 0 100G 0 disk
nvme0n1
방금 생성한 HVM 루트(이번에 부팅하기 위해)nvme1n1
복원된 PV 루트(HVM으로 변환됨)nvme2n1
빈 볼륨(PV 루트에서 변환을 다음과 같이 수신함nvme1n1
)nvme2n1
(nvme2n1p1
생성됩니다) 에 새 파티션을 만듭니다.# parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit' # partprobe /dev/nvme2n1 # udevadm settle
프로세스 속도를 높이려면 '소스' 볼륨을 확인하고 원본 파일 시스템의 크기를 최소화하십시오. 다음 단계에서는 여유 디스크 공간을 복사하고 싶지 않습니다.
# e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
'소스'를 '대상' 볼륨에 복제
# dd if=/dev/nvme1n1 of=/dev/nvme2n1p1 bs=$(blockdev --getbsz /dev/nvme1n1) conv=sparse count=$(dumpe2fs /dev/nvme1n1 | grep "Block count:" | cut -d : -f2 | tr -d "\\ ")
'대상' 볼륨 크기를 최대로 조정합니다.
# e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
대상 볼륨을 준비합니다.
# mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
chroot
새 볼륨으로# chroot /mnt/
그럽 다시 설치chroot된 볼륨에서:
# grub-install --recheck /dev/nvme2n1 # update-grub
종료
chroot
# exit
인스턴스 종료
# shutdown -h now
변환 후 이제 다음을 수행해야 합니다.
이전에 HVM 인스턴스에 있던 3개의 볼륨을 분리합니다. 콘솔에서 생성한 마지막 볼륨(비어 있음)을 HVM 인스턴스에 연결합니다
/dev/sda1
(이전에는 로 연결됨 )./dev/nvme2n1
HVM 인스턴스를 시작합니다.
이제 새 HVM 인스턴스가 성공적으로 부팅되어야 하며 이전 소스 PV 인스턴스의 정확한 복사본이 됩니다(올바른 소스 볼륨을 사용한 경우). 모든 것이 작동하고 있음을 확인한 후에는 소스 인스턴스를 종료할 수 있습니다.
네트워크 구성 업데이트(선택사항)
이제 위의 단계는 여기 있는 대부분의 사람들에게 효과적일 것입니다. 그러나 내 인스턴스 상태는 여전히 도달되지 않았습니다. 그 이유는 새로운 이미지에서 시작하는 대신 인스턴스에서 Ubuntu를 업그레이드했기 때문입니다. 이로 인해 구성 파일 eth0
이 활성화되지 않고 구성이 활성화 되었습니다 50-cloud-init.cfg
.
파일이 이미 있는 경우 /etc/network/interfaces.d/50-cloud-init.cfg
새 파일을 만드는 대신 파일을 따라 업데이트할 수 있습니다. 또한 모든 명령이 를 통해 실행된다고 가정합니다 sudo su
.
인스턴스를 종료하고 볼륨을 분리한 후 이전과 동일한 구성을 입력합니다. 8GB 볼륨을 로 연결
/dev/sda1/
하고 최종 대상 볼륨을 으로 연결합니다/dev/sdf/
. 인스턴스를 시작하고 로그인합니다.Mount 이제 다음을 수행
/dev/sdf
해야 합니다 .nvme1n1p1
# mount /dev/nvme1n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
파일을 생성하거나 업데이트합니다.
/etc/network/interfaces.d/50-cloud-init.cfg
다음과 같습니다:
# This file is generated from information provided by # the datasource. Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} auto lo iface lo inet loopback auto ens5 iface ens5 inet dhcp
종료
chroot
(exit
)하고 인스턴스를 종료합니다(shutdown -h now
).이전의 9단계를 따르세요!
당신은 끝났어야합니다!
답변2
감사합니다. 업그레이드 사례(Ubuntu 14.04 PV에서 Ubuntu 18.04 PV로)에서 네트워크 구성에 대한 힌트가 작동했습니다. 네트워크 구성을 약간 조정하여 업그레이드된 Ubuntu 18.04 PV를 Ubuntu 18.04 HVM으로 변환했습니다. 다음 구성으로 새로운 /etc/netplan/50-cloud-init.config를 생성했습니다.
network:
version: 2
ethernets:
all-en:
match:
name: "en*"
dhcp4: true
all-eth:
match:
name: "eth*"
dhcp4: true