मेरे पास आपके जैसा ही प्रश्न था, इसलिए मैंने इसे करने के लिए काम किया।
सबसे पहले, मैंने यूएस-ईस्ट क्षेत्र से उबंटू 32-बिट ईबीएस समर्थित एमी से किया, अन्य ओएस या चित्र अलग-अलग हो सकते हैं। हालाँकि, मुझे संदेह है कि आपको ठीक होना चाहिए, जब तक आप एक एक्सट्रीम * फाइलसिस्टम का उपयोग कर रहे हैं। यह अन्य फाइल सिस्टम पर काम कर सकता है, लेकिन आपको यह पता लगाना होगा कि उन्हें अपने आप से कैसे बदला जाए।
कदम मूल रूप से हैं:
एक रनिंग इंस्टेंस में दो वॉल्यूम अटैच करें, पहला स्नैपशॉट के आधार पर जिसे आप सिकोड़ना चाहते हैं, और दूसरा एक खाली वॉल्यूम जिसका नया आकार आप सिकोड़ना चाहते हैं।
पहले खंड की फ़ाइल प्रणाली की जाँच करें और किसी भी त्रुटि की मरम्मत करें।
फ़ाइल सिस्टम को पहले वॉल्यूम पर सिकोड़ें ताकि यह केवल उतना ही बड़ा हो जितना डेटा को रखने के लिए होना चाहिए।
फ़ाइल सिस्टम को पहले वॉल्यूम से दूसरे में कॉपी करें।
दूसरे खंड पर फ़ाइल सिस्टम को अधिकतम आकार में विस्तारित करें।
सुनिश्चित करें कि त्रुटियों के लिए दूसरा वॉल्यूम चेक करके सब कुछ अच्छा लग रहा है।
दूसरे खंड का एक स्नैपशॉट लें।
आपके द्वारा अभी-अभी लिए गए दूसरे खंड के स्नैपशॉट के आधार पर एक मशीन छवि बनाएं।
आपको पहले जिस एमी को सिकोड़ना है, उससे कुछ जानकारी लेनी होगी। विशेष रूप से, आपको कर्नेल आईडी और रैमडिस्क आईडी की आवश्यकता है, यदि कोई हो (मैं जिस छवि को सिकोड़ता हूं उसमें रैमडिस्क नहीं था)। यह सारी जानकारी एम्स प्रबंधन कंसोल से, एएमआई विंडो में उपलब्ध होनी चाहिए।
कर्नेल आईडी किआ-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 प्रमाणपत्र (जिसे सर्टिफिकेट कहा जाता है) पर इंगित करना होगा। आप निश्चित रूप से नाम और विवरण के लिए जो चाहें चुन सकते हैं।
उम्मीद है की यह मदद करेगा।