나는 EBS 볼륨 증가에 대한이 답변을 보았지만 하나를 축소하고 싶습니다.
기본 우분투 서버 이미지는 15GB이지만 최대 2GB 만 필요합니다 (데이터에 다른 볼륨을 사용합니다). 볼륨 크기를 줄이는 방법이 있습니까?
나는 EBS 볼륨 증가에 대한이 답변을 보았지만 하나를 축소하고 싶습니다.
기본 우분투 서버 이미지는 15GB이지만 최대 2GB 만 필요합니다 (데이터에 다른 볼륨을 사용합니다). 볼륨 크기를 줄이는 방법이 있습니까?
답변:
나는 당신과 같은 질문을 가지고 있었으므로 그것을하는 방법을 연구했습니다.
먼저 미국 동부 지역의 Ubuntu 32 비트 EBS 지원 ami에서이 작업을 수행했습니다. 다른 OS 또는 이미지는 다르게 작동 할 수 있습니다. 그러나 ext * 파일 시스템을 사용하는 한 괜찮을 것이라고 생각합니다. 다른 파일 시스템에서 작동 할 수도 있지만, 스스로 파일 크기를 조정하는 방법을 찾아야합니다.
단계는 기본적으로 다음과 같습니다.
두 개의 볼륨을 실행중인 인스턴스에 연결합니다. 첫 번째는 축소하려는 스냅 샷을 기반으로하고 두 번째는 축소하려는 새 크기의 빈 볼륨을 나타냅니다.
첫 번째 볼륨의 파일 시스템을 확인하고 오류를 수정하십시오.
첫 번째 볼륨에서 파일 시스템을 축소하여 데이터를 보유하는 데 필요한만큼만 크기를 줄이십시오.
첫 번째 볼륨에서 두 번째 볼륨으로 파일 시스템을 복사하십시오.
두 번째 볼륨의 파일 시스템을 최대 크기로 확장하십시오.
두 번째 볼륨에 오류가 있는지 확인하여 모든 것이 좋아 보이는지 확인하십시오.
두 번째 볼륨의 스냅 샷을 만듭니다.
방금 촬영 한 두 번째 볼륨의 스냅 샷을 기반으로 머신 이미지를 생성하십시오.
먼저 축소하려는 ami에서 일부 정보를 가져와야합니다. 특히 커널 ID와 램 디스크 ID가 필요합니다 (내가 축소 한 이미지에 램 디스크가없는 경우). 이 모든 정보는 AMI 창의 aws 관리 콘솔에서 사용할 수 있어야합니다.
커널 ID는 kia-xxxxxxxx와 같고 스냅 샷 ID는 snap-xxxxxxxx와 같고 램 디스크 ID는 RIA-xxxxxxxx와 같습니다.
다음으로 Linux 인스턴스를 시작하십시오. 우분투 인스턴스를 시작했습니다. 원하는 경우 t1.micro 인스턴스를 사용할 수 있습니다. 다음 단계를 수행하는 데 많은 힘이 필요하지 않습니다.
머신이 실행 된 후 첫 번째 단계에서 기록한 스냅 샷을 첨부하십시오. 내 경우에는 / dev / sdf에 첨부했습니다.
그런 다음 원하는 크기의 새 볼륨을 만드십시오. 필자의 경우 5GB 볼륨을 만들었습니다. 크기를 축소하고 싶었습니다. 스냅 샷에서이 새 볼륨을 생성하지 마십시오. 새로운 빈 볼륨이 필요합니다. 다음으로 실행중인 인스턴스에 연결하십시오. 제 경우에는 / dev / sdg로 연결했습니다.
다음으로 머신에 ssh하지만 연결된 볼륨을 마운트하지 마십시오.
이 시점에서 나는 편집증 측면에서 실수를했고 오류가 없는지 확인하기 위해 큰 볼륨에서 파일 시스템을 확인하기로 결정했습니다. 아무것도 없다고 확신하면이 단계를 건너 뛸 수 있습니다.
$ sudo e2fsck -f /dev/sdf
다음으로, 볼륨이 큰 파일 시스템의 크기를 디스크의 데이터 크기만큼 크게 조정했습니다.
$ sudo resize2fs -M -p /dev/sdf
-M은 축소하고 -p는 진행률을 인쇄합니다.
resize2fs는 shrunkin 파일 시스템의 크기를 알려줍니다. 필자의 경우 4K 블록 크기를 제공했습니다.
이제 shrunkin 파일 시스템을 새 디스크에 복사합니다. 16MB 청크로 데이터를 복사 할 것이므로 복사해야하는 16MB 청크의 수를 알아야합니다. 이렇게 줄어든 파일 시스템 크기가 문제가됩니다.
필자의 경우 축소 된 파일 시스템은 1GB 이상이었습니다. 스냅 샷을 만들기 전에 기본 우분투 시스템에 다른 많은 프로그램을 설치했기 때문입니다. 파일 시스템의 크기를 가장 가까운 16MB로 반올림하여 제거했을 수도 있지만 안전하게 재생하고 싶었습니다.
따라서 16 배 16MB 청크 = 2GB :
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
EBS를 사용하면 각 읽기 및 쓰기 비용을 지불하기 때문에 16MB의 블록으로 복사 했으므로 가능한 한 그 수를 최소화하고 싶었습니다. 이런 식으로 그렇게했는지 모르겠지만 아마 아프지 않았습니다.
그런 다음 방금 새 볼륨에 복사 한 파일 시스템의 크기를 조정하여 볼륨에서 사용 가능한 모든 공간을 사용하십시오.
$ sudo resize2fs -p /dev/sdg
마지막으로, 모든 것이 제대로되었는지 확인하십시오.
$ sudo e2fsck -f /dev/sdg
테스트로 새로운 볼륨을 마운트하는 데 상처를 줄 수는 없지만이 머신에서해야 할 전부입니다. 그러나이 단계는 e2fsck가 문제점을 발견 했으므로 거의 선택 사항입니다.
이제 새 볼륨을 스냅 샷하고이를 기반으로 AMI를 생성해야합니다. 우리는 기계로 끝났으므로 원한다면 종료 할 수 있습니다.
작은 볼륨을 마운트 한 경우 마운트 해제 한 후 스냅 샷을 작성하십시오. 다시 관리 콘솔에서이 작업을 수행 할 수 있습니다.
마지막 단계에는 명령 줄 ec2 도구가 필요합니다.
편집하다:
이 답변이 게시되었으므로 AWS 콘솔에서 스냅 샷을 마우스 오른쪽 버튼으로 클릭하고 스냅 샷에서 이미지 생성을 선택하면됩니다. 여전히 적절한 커널 ID를 선택해야합니다. 목록에 나타나지 않으면 적절한 아키텍처를 선택했는지 확인하십시오.
우리는 ec2-register 애플리케이션을 사용하여 방금 생성 한 스냅 샷을 기반으로 AMI를 등록하므로 방금 생성 한 스냅 샷에서 snap-xxxxxxxx 값을 기록하십시오.
그런 다음 다음과 같은 명령을 사용해야합니다.
ec2-register -C cert.pem -K sk.pem -n The_Name_of_Your_New_Image
-d Your_Description_of_This_New_AMI --kernel aki-xxxxxxxx
-b "/dev/sda1=snap-xxxxxxxx" --root-device-name /dev/sda1
물론 커널 ID를 처음에 적어 둔 것으로 바꾸고 스냅 샷 ID를 이전 단계에서 생성 한 것으로 바꿔야합니다. 또한 위의 비밀 키 (sk.pem)와 x509 인증서 (cert.pem)를 가리켜 야합니다. 물론 이름과 설명에 대해 원하는 것을 선택할 수 있습니다.
이것이 도움이되기를 바랍니다.
sudo e2fsck -f /dev/sdf
은 크기 조정을 수행하기 전에 필요한 단계 일 수 있습니다 (특정 인스턴스 인 Amazon Linux AMI에 있음).
sudo mkfs -t ext4 /dev/sdg
.
그래, 나도 궁금했다. 다음 튜토리얼은 과잉이지만 필요한 툴이 포함되어 있다고 생각합니다. http://www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_using_ubuntu
위와 같이 새 디스크 이미지에 설치하는 대신 큰 AMI를 시작하고 새 EBS를 생성하고 EBS를 실행중인 인스턴스에 연결하고 실행중인 AMI를 새 EBS에 복사 할 수 있어야합니다. 마지막으로 새 EBS를 AMI로 등록하십시오.
더 많은 배경, 특히 freremark의 의견은이 블로그 게시물을 참조 하십시오. http://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2
마지막으로, euca2ools는 ec2-ami-tools의 훌륭한 대체물 인 것 같습니다. euca2ools는 실제 맨 페이지를 포함합니다! 그것들은 euca- 접두사를 가진 ec2- * 명령과 이름이 모두 같습니다. http://open.eucalyptus.com/wiki/Euca2ools 사용 중
일반 EC2 인스턴스에서 사용중인 볼륨의 크기를 줄이려고했습니다. 나는 다른 답변과 비슷한 단계를 밟았지만 문제가 발생했습니다. 루트 볼륨을 줄이기 위해해야 할 일은 다음과 같습니다.
AWS 콘솔에서
1. Stop the source EC2 instance
2. Create a snapshot of the volume you want to shrink
3. Use the snapshot to create a new 'source' volume
4. Created a new volume with smaller size (made sure it was big enough for the data on source)
5. Attached both volumes to any EC2 instance (mine were /dev/sdf = source & /dev/sdg = target)
6. Start the EC2 instance
EC2 인스턴스에서
7. sudo su - (everything from here is run as root)
8. mkdir /source /target
9. mount -t ext4 /dev/sdf /source
10. mkfs.ext4 /dev/sdg
11. mount -t ext4 /dev/sdg /target
12. rsync -aHAXxSP /source/ /target
** notice that there is no trailing '/' after target if
you put one there your data will be copied to
/target/source and you will have to move it up a directory
13. cat /boot/grub/grub.conf (indicated that grub is using root=LABEL=/)
14. cat /source/etc/fstab (indicated that fstab was also using LABEL=/)
15. e2label /dev/sdg /
16. umount /source
17. umount /target
AWS 콘솔로 돌아 가기
18. Stop the instance
19. Detach ALL volumes from the instance
20. Attach the 'target' volume to the instance using /dev/sda1 as the device
21. Start the instance
내가 찾을 수있는 한 언급되지 않은 문제가 발생했습니다. 인스턴스가 잘 시작되었습니다. 그러나 인스턴스에 ssh하려고 할 때 연결할 수 없었습니다. 위의 단계를 여러 번 변형 한 후 마침내 새로 튀어 나온 EC2 인스턴스에서 루트 볼륨을 사용하려고했습니다.
AWS 콘솔에서
1. Create a new EC2 instance with the right sized root volume
2. Stop the new instance
3. Detach the /dev/sda1 volume from the new instance
** used the 'source' volume from before & the new volume we just detached
4. Attached both volumes to the original EC2 instance (/dev/sdf & /dev/sdg)
5. Start the instance with the attached volumes
EC2 인스턴스에서
1. sudo su -
2. mkdir /source /target (only need to do this if you don't already have these directories)
3. mount -t ext4 /dev/sdf /source
4. mount -t ext4 /dev/sdg /target (no need to create a file system because it is already there)
5. rsync -aHAXxSP /source/ /target
6. umount /source
7. umount /target
AWS 콘솔로 돌아 가기
1. Stop the instance
2. Detach the 'source' and 'target' volumes from instance
3. Attach the 'target' volume to the instance from step 1 using /dev/sda1 as the device
4. Start the instance
5. ** we use an elastic IP so we just reassigned the IP to the new instance
이것이 누군가를 돕기를 바랍니다.