ลดขนาดปริมาณ Amazon EBS


25

ฉันเห็นคำตอบนี้สำหรับการเพิ่มปริมาณ EBSแต่ฉันต้องการย่อขนาด

อิมเมจเซิร์ฟเวอร์ Ubuntu เริ่มต้นคือ 15 GB ในขณะที่ฉันต้องการสูงสุด 2 GB เท่านั้น (ฉันใช้ไดรฟ์ข้อมูลอื่นสำหรับข้อมูล) มีวิธีลดขนาดของไดรฟ์หรือไม่

คำตอบ:


27

ฉันมีคำถามเดียวกันกับคุณดังนั้นฉันจึงหาวิธีที่จะทำ

ครั้งแรกที่ฉันทำสิ่งนี้จาก Ubuntu 32 บิต EBS ที่สำรองโดย Ubuntu จากภูมิภาคตะวันออกของสหรัฐระบบปฏิบัติการอื่นหรือรูปภาพอาจทำงานแตกต่างกัน อย่างไรก็ตามฉันสงสัยว่าคุณควรจะใช้ได้ตราบใดที่คุณใช้ระบบไฟล์ ext * มันอาจทำงานได้กับระบบไฟล์อื่น ๆ แต่คุณจะต้องหาวิธีปรับขนาดด้วยตัวคุณเอง

ขั้นตอนโดยพื้นฐานแล้ว:

  1. แนบสองไดรฟ์กับอินสแตนซ์ที่กำลังทำงานอันดับแรกยึดตามสแน็ปช็อตที่คุณต้องการลดขนาดและที่สองคือวอลลุ่มเปล่าที่มีขนาดใหม่ที่คุณต้องการลดขนาด

  2. ตรวจสอบระบบไฟล์ของโวลุ่มแรกและซ่อมแซมข้อผิดพลาด

  3. ย่อขนาดระบบไฟล์ในโวลุ่มแรกดังนั้นมันจึงใหญ่เท่าที่จำเป็นต้องเก็บข้อมูล

  4. คัดลอกระบบไฟล์จากไดรฟ์ข้อมูลแรกไปยังที่สอง

  5. ขยายระบบไฟล์บนวอลุ่มที่สองเป็นขนาดสูงสุด

  6. ตรวจสอบให้แน่ใจว่าทุกอย่างดูดีโดยตรวจสอบข้อผิดพลาดระดับเสียงที่สอง

  7. ถ่ายภาพของเล่มที่สอง

  8. สร้างอิมเมจของเครื่องตามสแน็ปช็อตของโวลุ่มที่สองที่คุณเพิ่งถ่าย

คุณต้องได้รับข้อมูลบางอย่างจากเพื่อนที่คุณต้องการหด โดยเฉพาะอย่างยิ่งคุณต้องใช้เคอร์เนล ID และ ramdisk ID ถ้ามี (ภาพที่ฉันหดไม่ได้มี ramdisk) ข้อมูลทั้งหมดนี้ควรพร้อมใช้งานจากคอนโซลการจัดการ aws ในหน้าต่าง AMI

เคอร์เนลรหัสดูเหมือน kia-xxxxxxxx และ snapshot ID ดูเหมือน snap-xxxxxxxx และ ramdisk 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 ที่เราต้องการคัดลอก นี่คือที่ขนาดของระบบไฟล์หดลงมาอยู่ในมือ

ในกรณีของฉันระบบไฟล์ shrunk มีขนาดเกิน 1 GB เพราะฉันได้ติดตั้งโปรแกรมอื่นจำนวนมากบนระบบ Ubuntu พื้นฐานก่อนที่จะถ่ายภาพสแนปช็อต ฉันอาจจะไปด้วยการคัดลอกขนาดของระบบไฟล์ที่ปัดเศษขึ้นเป็น 16MB ที่ใกล้ที่สุด แต่ฉันต้องการเล่นให้ปลอดภัย

ดังนั้น 128 คูณ 16MB = 2GB:

$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128

ฉันคัดลอกในบล็อกขนาด 16MB เนื่องจาก EBS คุณจ่ายสำหรับการอ่านและการเขียนแต่ละครั้งดังนั้นฉันจึงต้องการลดจำนวนให้มากที่สุด ฉันไม่รู้ว่าทำแบบนี้หรือไม่ แต่อาจไม่เจ็บ

จากนั้นเราต้องปรับขนาดระบบไฟล์ที่เราเพิ่งคัดลอกไปยังโวลุ่มใหม่เพื่อที่จะใช้พื้นที่ทั้งหมดที่มีอยู่บนวอลลุ่ม

$ sudo resize2fs -p /dev/sdg

สุดท้ายตรวจสอบเพื่อให้แน่ใจว่าทุกอย่างเรียบร้อยดี:

$ sudo e2fsck -f /dev/sdg

นั่นคือทั้งหมดที่เราต้องทำในเครื่องนี้แม้ว่ามันจะไม่เจ็บที่จะติดวอลลุ่มใหม่เหมือนการทดสอบ อย่างไรก็ตามขั้นตอนนี้เป็นทางเลือกเกือบแน่นอนเนื่องจาก e2fsck น่าจะมีปัญหาใด ๆ

ตอนนี้เราต้องถ่ายภาพเล่มใหม่และสร้าง AMI ตามมัน เราดำเนินการกับเครื่องแล้วดังนั้นคุณสามารถยกเลิกได้หากคุณต้องการ

ตรวจสอบให้แน่ใจว่าไม่ได้ต่อเชื่อมวอลุ่มขนาดเล็กถ้าคุณติดตั้งแล้วถ่ายภาพสแนปชอตของมัน อีกครั้งคุณสามารถทำได้ในคอนโซลการจัดการ

ขั้นตอนสุดท้ายต้องการเครื่องมือ commandline ec2

แก้ไข:

เนื่องจากคำตอบนี้ถูกโพสต์ไว้ที่คอนโซล AWS ให้คุณคลิกขวาที่สแนปชอตแล้วเลือกสร้างภาพจากสแนปชอต คุณจะต้องเลือก Kernel 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) ขั้นตอนนี้ใช้เวลานานใน micro instance ฉันเคยเห็น no-fsck, การคัดลอกโวลุ่มที่ใช้ rsync (เช่นที่นี่ubuntuforums.org/showpost.php?p=9866025&postcount=27 ) แต่วิธีการของ dd นั้นให้ความน่าเชื่อถือมากกว่าแม้จะเป็นไดรฟ์ที่ไม่ใช่รูท
โครโนส

คำสั่งแรกsudo e2fsck -f /dev/sdfอาจเป็นขั้นตอนที่จำเป็นก่อนทำการปรับขนาด (เป็นอินสแตนซ์เฉพาะของฉันคือ Amazon Linux AMI)
notacouch

1
ควรจะชัดเจน แต่ไม่ลืมที่จะทำให้ระบบไฟล์บนไดรฟ์ (/ facepalm) ตามเอกสาร sudo mkfs -t ext4 /dev/sdgAWS,
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 รวมถึง manpages จริง! พวกเขามีชื่อเดียวกันทั้งหมดเป็นคำสั่ง ec2- * เพียงแค่นำหน้า euca- http://open.eucalyptus.com/wiki/Euca2oolsUsing


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 Console

 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 Console

 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.