Amazon EBS 볼륨 크기 축소


25

나는 EBS 볼륨 증가에 대한이 답변을 보았지만 하나를 축소하고 싶습니다.

기본 우분투 서버 이미지는 15GB이지만 최대 2GB 만 필요합니다 (데이터에 다른 볼륨을 사용합니다). 볼륨 크기를 줄이는 방법이 있습니까?

답변:


27

나는 당신과 같은 질문을 가지고 있었으므로 그것을하는 방법을 연구했습니다.

먼저 미국 동부 지역의 Ubuntu 32 비트 EBS 지원 ami에서이 작업을 수행했습니다. 다른 OS 또는 이미지는 다르게 작동 할 수 있습니다. 그러나 ext * 파일 시스템을 사용하는 한 괜찮을 것이라고 생각합니다. 다른 파일 시스템에서 작동 할 수도 있지만, 스스로 파일 크기를 조정하는 방법을 찾아야합니다.

단계는 기본적으로 다음과 같습니다.

  1. 두 개의 볼륨을 실행중인 인스턴스에 연결합니다. 첫 번째는 축소하려는 스냅 샷을 기반으로하고 두 번째는 축소하려는 새 크기의 빈 볼륨을 나타냅니다.

  2. 첫 번째 볼륨의 파일 시스템을 확인하고 오류를 수정하십시오.

  3. 첫 번째 볼륨에서 파일 시스템을 축소하여 데이터를 보유하는 데 필요한만큼만 크기를 줄이십시오.

  4. 첫 번째 볼륨에서 두 번째 볼륨으로 파일 시스템을 복사하십시오.

  5. 두 번째 볼륨의 파일 시스템을 최대 크기로 확장하십시오.

  6. 두 번째 볼륨에 오류가 있는지 확인하여 모든 것이 좋아 보이는지 확인하십시오.

  7. 두 번째 볼륨의 스냅 샷을 만듭니다.

  8. 방금 촬영 한 두 번째 볼륨의 스냅 샷을 기반으로 머신 이미지를 생성하십시오.

먼저 축소하려는 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)를 가리켜 야합니다. 물론 이름과 설명에 대해 원하는 것을 선택할 수 있습니다.

이것이 도움이되기를 바랍니다.


고마워요! 1TB와 같은 대용량의 경우이 절차는 마이크로 인스턴스에서 시간이 오래 걸립니다. 나는 no-fsck, rsync 기반 볼륨 복사 (예 : ubuntuforums.org/showpost.php?p=9866025&postcount=27 )를 보았지만 루트 기반이 아닌 볼륨에서도 dd 기반 접근 방식이 훨씬 안정적입니다.
chronos

첫 번째 명령 sudo e2fsck -f /dev/sdf은 크기 조정을 수행하기 전에 필요한 단계 일 수 있습니다 (특정 인스턴스 인 Amazon Linux AMI에 있음).
notacouch

1
당연하지만 AWS 문서에 따라 볼륨 (/ facepalm)에 파일 시스템을 만드는 것을 잊지 마십시오 sudo mkfs -t ext4 /dev/sdg.
notacouch

1

그래, 나도 궁금했다. 다음 튜토리얼은 과잉이지만 필요한 툴이 포함되어 있다고 생각합니다. 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 사용 중


0

일반 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

이것이 누군가를 돕기를 바랍니다.


볼륨의 크기는 줄어들지 않고 늘릴 수 있습니다. 스냅 샷에서.
Ankit Kumar Rajpoot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.