मैं गलती से इस जवाब पर आया था, लेकिन अगर किसी को कोई भी जानकारी नहीं है, तो यहाँ प्रयोगों द्वारा समर्थित उत्तर है।
लघु संस्करण
बोनस प्रश्न: क्या मैं md(4)
असमान आकार के ब्लॉक डिवाइस से एक RAID सरणी बना सकता हूं ? हां, लेकिन RAID सरणी में सबसे छोटे ब्लॉक डिवाइस का आकार होगा (साथ ही अपने स्वयं के हाउसकीपिंग के लिए कुछ ओवरहेड्स)। यदि डिवाइस आकार एक दूसरे के 1% के भीतर नहीं हैं, तो आपको एक चेतावनी मिलती है।
प्रश्न 1: क्या मैं किसी मौजूदा md(4)
RAID सरणी में एक डिवाइस को सबसे छोटे वर्तमान सदस्य से छोटा कर सकता हूं ? नहीं माफ़ करो। mdadm
अपने डेटा की सुरक्षा के लिए ऐसा करने से मना कर देगा।
प्रश्न 2: क्या आप किसी मौजूदा md सरणी का आकार बदल सकते हैं? हां ( mdadm
मैनपेज पढ़ें !), लेकिन यह प्रयास के लायक नहीं हो सकता है। आपको सब कुछ वापस करना होगा, फिर RAID डिवाइस की सामग्री का आकार बदलना होगा, फिर डिवाइस को स्वयं आकार देना होगा - यह सब त्रुटियों, मिसकल्चुलेशन और अन्य चीजों से काफी प्रभावित होता है, जो आपके डेटा को खर्च कर सकते हैं (दर्दनाक अनुभव से बात करना) ।
यह जोखिम और प्रयास के लायक नहीं है। यदि आपके पास एक नई, खाली डिस्क है, तो इसका आकार कैसे बदलें और हर समय अपने सभी डेटा की एक और दो प्रतियों के बीच रखें (यह मानते हुए कि आपके पास 2-डिस्क RAID1 है):
md(4)
उस पर एक नया सरणी बनाएं (एक डिस्क गुम होने के साथ)।
- सरणी सामग्री (क्रिप्टो, LVM, विभाजन सारणी, उसके किसी भी संयोजन, जो भी आपकी नाव को तैरता है) की संरचना को फिर से बनाएँ।
- मौजूदा डिस्क से डेटा को नए पर कॉपी करें।
- रिबूट, नई डिस्क का उपयोग कर।
- पुरानी डिस्क के विभाजन तालिका को मिटा दें (या
md(4)
सुपरब्लॉक को शून्य करें )। यदि आवश्यक हो, तो उस नई डिस्क पर योजना से मिलान करने के लिए आवश्यक विभाजन बनाएं।
- नए सरणी में पुरानी डिस्क जोड़ें।
- सरणी सदस्यों को सिंक करने के लिए प्रतीक्षा करें। कुछ कॉफी लीजिये। लैटिन अमेरिका के लिए उड़ान भरें और उस मामले के लिए अपनी खुद की कॉफी बीन्स चुनें। :) (यदि आप लैटिन अमेरिका में रहते हैं , तो इसके बजाय अफ्रीका के लिए उड़ान भरें)।
नोट: हाँ, यह वही तकनीक है जिसका 0xC0000022L उसके उत्तर में वर्णित है।
प्रश्न 3. अगर ड्राइव 1G छोटा है तो क्या होगा? :) इसके बारे में चिंता मत करो। संभावना है कि आपका प्रतिस्थापन ड्राइव बड़ा होगा। वास्तव में, ऊपर की रणनीति के साथ, जब भी कोई विफल होता है (या एक सस्ता अपग्रेड के लिए) सस्ती बड़ी ड्राइव प्राप्त करने के लिए भुगतान करता है। आप एक प्रगतिशील उन्नयन प्राप्त कर सकते हैं।
प्रायोगिक प्रमाण
प्रयोगिक व्यवस्था
पहले, चलो कुछ ब्लॉक डिवाइस को नकली करें। हम उपयोग करेंगे /tmp/sdx
और /tmp/sdy
(प्रत्येक 100M), और /tmp/sdz
(99M)।
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
: तीन लूपबैक ब्लॉक उपकरणों के रूप में तीन फाइलों को इस सेट /dev/loop0
, /dev/loop1
और /dev/loop2
, के लिए मानचित्रण sdx
, sdy
और sdz
क्रमशः। चलो आकार की जाँच करें:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
जैसी कि उम्मीद थी, हमारे पास बिल्कुल 100M (102400 KiB = 100 MiB) के दो लूप डिवाइस हैं और 99M (बिल्कुल 99 × 1024 1K ब्लॉक) के हैं।
एक RAID सरणी को पहचानने-आकार वाले उपकरणों से बाहर करना
यहाँ जाता हैं:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
आकार की जाँच करें:
sudo grep md100 /proc/partitions
9 100 102272 md100
यह निश्चित रूप से हम क्या उम्मीद करते हैं: mdadm मैनुअल पर एक नज़र हमें याद दिलाता है कि संस्करण 1.2 मेटाडाटा 128K: 128 + 102272 = 102400 तक ले जाता है। अब इसे दूसरे प्रयोग की तैयारी में नष्ट कर दें।
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
एक RAID सरणी को असमान आकार के उपकरणों से बनाना
इस बार हम छोटे ब्लॉक डिवाइस का उपयोग करेंगे।
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
ठीक है, हमें चेतावनी दी गई थी, लेकिन सरणी बनाई गई थी। चलो आकार की जाँच करें:
sudo grep md100 /proc/partitions
9 100 101248 md100
हमें यहां जो मिलता है वह 101,248 ब्लॉक है। 101248 + 128 = 101376 = 99 × 1024. प्रयोग करने योग्य स्थान सबसे छोटा उपकरण (प्लस 128K RAID मेटाडेटा) है। चलो यह सब हमारे पिछले प्रयोग के लिए फिर से नीचे लाने के लिए:
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
और अंत में: रनिंग एरे में एक छोटा उपकरण जोड़ना
सबसे पहले, चलो 100M डिस्क में से एक के साथ एक RAID1 सरणी बनाते हैं। सरणी को नीचा दिखाया जाएगा, लेकिन हम वास्तव में परवाह नहीं करते हैं। हम सिर्फ एक शुरुआत करना चाहते हैं । missing
कीवर्ड एक प्लेसहोल्डर है का कहना है कि 'मैं, फिर भी आप के लिए एक उपकरण की जरूरत नहीं है अब वह सरणी शुरू करने और मैं बाद में जोड़ देंगे'।
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
फिर से, आइए आकार की जाँच करें:
sudo grep md100 /proc/partitions
9 100 102272 md100
इतना ज़रूर है कि यह 1024K ब्लॉक का 128K छोटा है। छोटी डिस्क जोड़ना:
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
बूम! यह हमें जाने नहीं देगा, और त्रुटि बहुत स्पष्ट है।