अमेज़न ईबीएस मात्रा आकार सिकुड़ रहा है


25

मैंने यह उत्तर बढ़ते ईबीएस संस्करणों के लिए देखा है , लेकिन मैं एक को छोटा करना चाहूंगा।

डिफ़ॉल्ट Ubuntu सर्वर की छवियां 15 जीबी हैं जबकि मुझे वास्तव में केवल 2 जीबी अधिकतम (मैं डेटा के लिए एक अलग मात्रा का उपयोग करता हूं) की आवश्यकता है। क्या मात्रा के आकार को सिकोड़ने का कोई तरीका है?

जवाबों:


27

मेरे पास आपके जैसा ही प्रश्न था, इसलिए मैंने इसे करने के लिए काम किया।

सबसे पहले, मैंने यूएस-ईस्ट क्षेत्र से उबंटू 32-बिट ईबीएस समर्थित एमी से किया, अन्य ओएस या चित्र अलग-अलग हो सकते हैं। हालाँकि, मुझे संदेह है कि आपको ठीक होना चाहिए, जब तक आप एक एक्सट्रीम * फाइलसिस्टम का उपयोग कर रहे हैं। यह अन्य फाइल सिस्टम पर काम कर सकता है, लेकिन आपको यह पता लगाना होगा कि उन्हें अपने आप से कैसे बदला जाए।

कदम मूल रूप से हैं:

  1. एक रनिंग इंस्टेंस में दो वॉल्यूम अटैच करें, पहला स्नैपशॉट के आधार पर जिसे आप सिकोड़ना चाहते हैं, और दूसरा एक खाली वॉल्यूम जिसका नया आकार आप सिकोड़ना चाहते हैं।

  2. पहले खंड की फ़ाइल प्रणाली की जाँच करें और किसी भी त्रुटि की मरम्मत करें।

  3. फ़ाइल सिस्टम को पहले वॉल्यूम पर सिकोड़ें ताकि यह केवल उतना ही बड़ा हो जितना डेटा को रखने के लिए होना चाहिए।

  4. फ़ाइल सिस्टम को पहले वॉल्यूम से दूसरे में कॉपी करें।

  5. दूसरे खंड पर फ़ाइल सिस्टम को अधिकतम आकार में विस्तारित करें।

  6. सुनिश्चित करें कि त्रुटियों के लिए दूसरा वॉल्यूम चेक करके सब कुछ अच्छा लग रहा है।

  7. दूसरे खंड का एक स्नैपशॉट लें।

  8. आपके द्वारा अभी-अभी लिए गए दूसरे खंड के स्नैपशॉट के आधार पर एक मशीन छवि बनाएं।

आपको पहले जिस एमी को सिकोड़ना है, उससे कुछ जानकारी लेनी होगी। विशेष रूप से, आपको कर्नेल आईडी और रैमडिस्क आईडी की आवश्यकता है, यदि कोई हो (मैं जिस छवि को सिकोड़ता हूं उसमें रैमडिस्क नहीं था)। यह सारी जानकारी एम्स प्रबंधन कंसोल से, एएमआई विंडो में उपलब्ध होनी चाहिए।

कर्नेल आईडी किआ-xxxxxxxx की तरह दिखता है, और स्नैपशॉट आईडी स्नैप-xxxxxxxx की तरह दिखता है, और रैमडिस्क आईडी RIA-xxxxxxxx की तरह दिखता है।

अगला, एक लिनक्स उदाहरण लॉन्च करें। मैंने उबंटू इंस्टेंस लॉन्च किया। आप की तरह अगर आप एक t1.micro उदाहरण का उपयोग कर सकते हैं। यह इन अगले चरणों को करने के लिए बहुत अधिक शक्ति नहीं लेता है।

मशीन चालू होने के बाद, पहले चरण से नीचे लिखे स्नैपशॉट को संलग्न करें। मेरे मामले में, मैंने इसे / dev / sdf से जोड़ा

फिर, एक नया वॉल्यूम बनाएं, जिसका आकार आप चाहते हैं। मेरे मामले में, मैंने 5GB की मात्रा बनाई, जैसा कि मैंने इसे छोटा करना चाहा था। स्नैपशॉट से यह नया वॉल्यूम न बनाएं। हमें एक नया रिक्त आयतन चाहिए। इसके बाद, इसे रनिंग इंस्टेंस में संलग्न करें, मेरे मामले में मैंने इसे / dev / sdg के रूप में अटैच किया है

अगला, मशीन में ssh लेकिन संलग्न वॉल्यूम को माउंट न करें।

इस बिंदु पर, मैंने व्यामोह के पक्ष में मिटा दिया, और मैंने बड़ी मात्रा में फ़ाइल सिस्टम की जांच करने का विकल्प चुना, यह सुनिश्चित करने के लिए कि कोई त्रुटि नहीं थी। यदि आप आश्वस्त हैं कि कोई भी नहीं है, तो आप इस चरण को छोड़ सकते हैं:

$ sudo e2fsck -f /dev/sdf

इसके बाद, मैंने फ़ाइल सिस्टम को बड़ी मात्रा में आकार दिया, ताकि यह डिस्क पर मौजूद डेटा जितना बड़ा हो:

$ sudo resize2fs -M -p /dev/sdf

-M इसे सिकोड़ता है, और -p प्रगति को प्रिंट करता है।

Resize2fs आपको यह बताना चाहिए कि श्रुंकिन फाइलसिस्टम कितना बड़ा है। मेरे मामले में, इसने मुझे 4K ब्लॉक्स में आकार दिया।

अब हम नई डिस्क में सिकुड़ी फाइल सिस्टम को कॉपी करते हैं। हम 16MB विखंडू में डेटा की प्रतिलिपि बनाने जा रहे हैं, इसलिए हमें यह पता लगाने की आवश्यकता है कि हमें कितने 16MB विखंडू को कॉपी करने की आवश्यकता है। यह वह जगह है जहाँ सिकुड़ा हुआ फ़ाइल सिस्टम आकार हाथ में आता है।

मेरे मामले में, सिकुड़ फ़ाइल सिस्टम सिर्फ 1 जीबी से अधिक था, क्योंकि मैंने स्नैपशॉट लेने से पहले बुनियादी उबंटू प्रणाली पर बहुत सारे अन्य प्रोग्राम स्थापित किए थे। मैं शायद निकटतम 16MB तक गोल फ़ाइल सिस्टम के आकार को कॉपी करने के साथ दूर हो सकता था, लेकिन मैं बहुत सुरक्षित खेलना चाहता था।

तो, 128 बार 16 एमबी चंक्स = 2 जीबी:

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

मैंने 16 एमबी के ब्लॉक में नकल की क्योंकि ईबीएस के साथ, आप प्रत्येक पढ़ने और लिखने के लिए भुगतान करते हैं, इसलिए मैं उनकी संख्या को यथासंभव कम करना चाहता था। मुझे नहीं पता कि ऐसा करने से ऐसा होता है, लेकिन शायद यह चोट नहीं पहुंची।

फिर हमें उस फ़ाइल सिस्टम का आकार बदलना होगा जिसे हमने अभी नए वॉल्यूम में कॉपी किया है ताकि वह वॉल्यूम पर सभी उपलब्ध स्थान का उपयोग करे।

$ sudo resize2fs -p /dev/sdg

अंत में, यह सुनिश्चित करने के लिए जांचें कि सब कुछ ठीक है:

$ sudo e2fsck -f /dev/sdg

इस मशीन में हमें बस इतना ही करना है, हालांकि यह एक परीक्षण के रूप में नई मात्रा को माउंट करने के लिए चोट नहीं पहुंचा सकता है। हालाँकि, यह कदम लगभग निश्चित रूप से वैकल्पिक है, क्योंकि e2fsck को कोई समस्या नहीं होनी चाहिए।

अब हमें नए वॉल्यूम को स्नैपशॉट बनाने की आवश्यकता है, और इसके आधार पर एक एएमआई बनाएं। हम मशीन के साथ कर रहे हैं, इसलिए यदि आप चाहें तो आप इसे समाप्त कर सकते हैं।

सुनिश्चित करें कि यदि आपने इसे माउंट किया है तो छोटी मात्रा अनमाउंट है, और फिर इसका स्नैपशॉट लें। फिर, आप प्रबंधन कंसोल में ऐसा कर सकते हैं।

अंतिम चरण में कमांडलाइन ec2 टूल की आवश्यकता होती है।

संपादित करें:

चूंकि यह उत्तर पोस्ट किया गया था इसलिए AWS कंसोल आपको बस एक स्नैपशॉट पर राइट क्लिक करने और स्नैपशॉट से क्रिएट इमेज का चयन करने की अनुमति देता है। फिर भी आपको उपयुक्त कर्नेल आईडी का चयन करना होगा। यदि यह सूची में नहीं आता है तो सुनिश्चित करें कि आपने उपयुक्त वास्तुकला का चयन किया है।

हम सिर्फ आपके द्वारा लिए गए स्नैपशॉट के आधार पर AMI को पंजीकृत करने के लिए ec2-register एप्लिकेशन का उपयोग करते हैं, इसलिए आपके द्वारा लिए गए स्नैपशॉट से स्नैप-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

आपको निश्चित रूप से कर्नेल आईडी को उस जगह से बदलना होगा जिसे आपने शुरुआत में लिखा था और पिछले चरण में आपके द्वारा बनाई गई स्नैपशॉट आईडी के साथ। आपको ऊपर अपनी गुप्त कुंजी (जिसे sk.pem भी कहा जाता है), और आपके x509 प्रमाणपत्र (जिसे सर्टिफिकेट कहा जाता है) पर इंगित करना होगा। आप निश्चित रूप से नाम और विवरण के लिए जो चाहें चुन सकते हैं।

उम्मीद है की यह मदद करेगा।


धन्यवाद, इससे मदद मिली! बड़े संस्करणों (जैसे 1 टीबी) के लिए यह प्रक्रिया सूक्ष्म उदाहरण पर एक लंबा समय लेती है। मैंने no-fsck, rsync- आधारित वॉल्यूम की प्रतिलिपि (जैसे ubuntuforums.org/showpost.php?p=9866025&postcount=27 ) देखी है , लेकिन dd- आधारित दृष्टिकोण बहुत अधिक विश्वसनीय है, यहां तक ​​कि गैर-रूट वॉल्यूम के लिए भी।
क्रोनोस

sudo e2fsck -f /dev/sdfआकार बदलने से पहले पहला आदेश एक आवश्यक कदम हो सकता है (मेरे विशेष उदाहरण, एक अमेज़ॅन लिनक्स एएमआई पर था)।
17

1
स्पष्ट होना चाहिए, लेकिन AWS डॉक्स के अनुसार वॉल्यूम (/ फेसपालम) पर एक फ़ाइल सिस्टम बनाना न भूलें sudo mkfs -t ext4 /dev/sdg
नोटाचू

1

हाँ, मुझे भी आश्चर्य हुआ है। निम्नलिखित ट्यूटोरियल ओवरकिल है, लेकिन मुझे लगता है कि इसमें आवश्यक उपकरण शामिल हैं: http://www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_am_ubuntu

ऊपर के रूप में एक नई डिस्क छवि पर स्थापित करने के बजाय, बड़े एएमआई को फायर करना, एक नया ईबीएस बनाना, ईबीएस को रनिंग इंस्टेंस से जोड़ना और रनिंग एएमआई को नए ईबीएस पर कॉपी करना संभव होना चाहिए। अंत में, नए ईबीएस को एएमआई के रूप में पंजीकृत करें।

कुछ और पृष्ठभूमि के लिए इस ब्लॉग-पोस्ट पर एक नज़र डालें, विशेषकर frermark द्वारा टिप्पणी: http://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2

अंतिम नोट पर, euca2ools ec2-ami-tools के लिए एक महान प्रतिस्थापन की तरह लगता है - euca2ools में वास्तविक प्रबंधन शामिल हैं! उनके पास सभी समान नाम हैं जैसे कि 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 कंसोल में वापस

 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 करने की कोशिश की, तो मैं कनेक्ट नहीं हो सका। उपर्युक्त चरणों के कई रूपों के बाद, मैंने अंततः ईसी 2 उदाहरण में एक ताज़ा स्पून से रूट वॉल्यूम का उपयोग करने का प्रयास करने का निर्णय लिया।

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

आशा है कि यह किसी की मदद करता है


एक वॉल्यूम का आकार केवल बढ़ाया जा सकता है, घटाया नहीं जा सकता है। स्नैपशॉट से।
अंकित कुमार राजपूत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.