ฉันเห็นคำตอบนี้สำหรับการเพิ่มปริมาณ EBSแต่ฉันต้องการย่อขนาด
อิมเมจเซิร์ฟเวอร์ Ubuntu เริ่มต้นคือ 15 GB ในขณะที่ฉันต้องการสูงสุด 2 GB เท่านั้น (ฉันใช้ไดรฟ์ข้อมูลอื่นสำหรับข้อมูล) มีวิธีลดขนาดของไดรฟ์หรือไม่
ฉันเห็นคำตอบนี้สำหรับการเพิ่มปริมาณ EBSแต่ฉันต้องการย่อขนาด
อิมเมจเซิร์ฟเวอร์ Ubuntu เริ่มต้นคือ 15 GB ในขณะที่ฉันต้องการสูงสุด 2 GB เท่านั้น (ฉันใช้ไดรฟ์ข้อมูลอื่นสำหรับข้อมูล) มีวิธีลดขนาดของไดรฟ์หรือไม่
คำตอบ:
ฉันมีคำถามเดียวกันกับคุณดังนั้นฉันจึงหาวิธีที่จะทำ
ครั้งแรกที่ฉันทำสิ่งนี้จาก Ubuntu 32 บิต EBS ที่สำรองโดย Ubuntu จากภูมิภาคตะวันออกของสหรัฐระบบปฏิบัติการอื่นหรือรูปภาพอาจทำงานแตกต่างกัน อย่างไรก็ตามฉันสงสัยว่าคุณควรจะใช้ได้ตราบใดที่คุณใช้ระบบไฟล์ ext * มันอาจทำงานได้กับระบบไฟล์อื่น ๆ แต่คุณจะต้องหาวิธีปรับขนาดด้วยตัวคุณเอง
ขั้นตอนโดยพื้นฐานแล้ว:
แนบสองไดรฟ์กับอินสแตนซ์ที่กำลังทำงานอันดับแรกยึดตามสแน็ปช็อตที่คุณต้องการลดขนาดและที่สองคือวอลลุ่มเปล่าที่มีขนาดใหม่ที่คุณต้องการลดขนาด
ตรวจสอบระบบไฟล์ของโวลุ่มแรกและซ่อมแซมข้อผิดพลาด
ย่อขนาดระบบไฟล์ในโวลุ่มแรกดังนั้นมันจึงใหญ่เท่าที่จำเป็นต้องเก็บข้อมูล
คัดลอกระบบไฟล์จากไดรฟ์ข้อมูลแรกไปยังที่สอง
ขยายระบบไฟล์บนวอลุ่มที่สองเป็นขนาดสูงสุด
ตรวจสอบให้แน่ใจว่าทุกอย่างดูดีโดยตรวจสอบข้อผิดพลาดระดับเสียงที่สอง
ถ่ายภาพของเล่มที่สอง
สร้างอิมเมจของเครื่องตามสแน็ปช็อตของโวลุ่มที่สองที่คุณเพิ่งถ่าย
คุณต้องได้รับข้อมูลบางอย่างจากเพื่อนที่คุณต้องการหด โดยเฉพาะอย่างยิ่งคุณต้องใช้เคอร์เนล 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) แน่นอนคุณสามารถเลือกสิ่งที่คุณต้องการสำหรับชื่อและคำอธิบาย
หวังว่านี่จะช่วยได้
sudo e2fsck -f /dev/sdf
อาจเป็นขั้นตอนที่จำเป็นก่อนทำการปรับขนาด (เป็นอินสแตนซ์เฉพาะของฉันคือ Amazon Linux AMI)
sudo mkfs -t ext4 /dev/sdg
AWS,
ใช่ฉันก็สงสัยเช่นกัน บทช่วยสอนต่อไปนี้มีค่าใช้จ่ายมากเกินไป แต่ฉันคิดว่ามันมีเครื่องมือที่จำเป็น: 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
ฉันต้องการลดขนาดของโวลุ่มที่ถูกใช้โดยอินสแตนซ์ 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
หวังว่านี่จะช่วยใครซักคน