डिस्क के आकार को अपग्रेड करते समय RAID बढ़ाएँ / बदलें


10

मैंने मूल रूप से एक सॉफ़्टवेयर RAID बनाया है जो एक नियंत्रक का उपयोग करता है जो केवल डिस्क पर 2TB को संबोधित कर सकता है। डिस्क 3 टीबी डिस्क हैं। यह ठीक काम किया, लेकिन केवल प्रत्येक डिस्क के पहले 2TB का उपयोग किया।

मैंने अब पूर्ण 3TB देखने के लिए नियंत्रक बदल दिया है। इसलिए मैं /dev/md0अंतिम 1 टीबी का उपयोग करना चाहूंगा ।

मैंने कोशिश की है:

# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K

लेकिन जैसा कि आप देख सकते हैं कि यह केवल 2TB देखता है। अगर मैं इसे उच्चतर के लिए मजबूर करता हूं:

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

तो किसी तरह सिस्टम देख सकते हैं डिस्क 3TB (में /proc/partitions) हैं, लेकिन RAID उन्हें 3TB के रूप में नहीं देख सकते हैं।

mdadm विवरण:

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

डिस्क आकार:

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

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

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

RAID6 पूर्ण डिस्क का उपयोग करता है (अर्थात कोई विभाजन नहीं)

आज सुबह यह सिस्टम क्रैश हो गया। रिबूट के बाद सिस्टम को RAID (जो भयानक था) नहीं मिला। सभी डिस्क को पुर्जों (एस) के रूप में दिखाया गया है:

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

यहां तक ​​कि यह स्पष्ट है कि mdadm3 टीबी आकार नहीं मिला।

मैं भागा mdadm --stop /dev/md0। /Etc/mdadm/mdadm.conf में प्रविष्टि को हटा दिया गया। रान mdadm -A --scan --force, जिसके कारण RAID ऑनलाइन आया और पुनर्निर्माण किया गया।


आप RAID6 के लिए 20 संपूर्ण डिस्क का उपयोग कर रहे हैं - सही? प्रत्येक डिस्क पर कोई विभाजन नहीं है? क्या fdisk -l /dev/sddदिखाता है? आप किस OS का उपयोग कर रहे हैं, mdadm-version क्या है?
निल्स

जवाबों:


5

मैंने लगभग / sys poked और उत्तर के बहुत करीब पहुंच गया।

# cd /sys/block/md0/md
# cat component_size
2147479552

जो हमने पहले देखा है उससे सहमत है। लेकिन यह:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

यह समझाने के लिए लगता है कि RAID गलत आकार क्यों देखता है: अधिकांश ड्राइव 2TB के रूप में दिखाई देते हैं जबकि 2 को प्रतिस्थापित किया गया है जो 3TB के रूप में दिखाता है। सभी ड्राइव एक ही मॉडल हैं, तो हम देखते हैं, अगर हम कथित आकार को बदल सकते हैं:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

देखा। हालांकि, Component_size अभी भी छोटा है:

# cat component_size
2147479552

शायद इसे mdadm द्वारा बदला जा सकता है:

# mdadm --grow /dev/md0 --size=max

यह दुर्भाग्य से लॉक हो जाता है mdadmऔर बाद में / dev / md0 तक पहुंच अवरुद्ध हो जाती है। और इसलिए कंपोनेंट_साइज़ तक पहुँच है:

# cat component_size   # This blocks

बेकार है। लेकिन अच्छा हिस्सा यह है कि syslog में यह कहता है:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

/ Dev / md0 पर फ़ाइल सिस्टम अभी भी चला है।

एक रिबूट के बाद मुझे फिर से 'mdadm --grow / dev / md0 --size = max' करना पड़ा। फिर resyncपूरा होने का इंतजार करें । फिर से / dev / md0 तक पहुंच अवरुद्ध कर दी गई। तो अभी तक एक और रिबूट, उसके बाद xfs_growfs /dev/md0और फिर आकार पूरा हुआ।


मुझे पूरी तरह से समानांतर (1) प्लग पसंद आया, ओले :) जांच के लिए धन्यवाद, बस एक समान मामला मारा।
माइकल शगोरिन

1
मुझे लगता है कि "mdadm --update = devicesize" यह भी करेगा, मैन पेज देखें: "यह mdadm को प्रत्येक डिवाइस पर अधिकतम प्रयोग करने योग्य स्थान निर्धारित करने और मेटाडेटा में संबंधित फ़ील्ड को अपडेट करने का कारण बनेगा।"
rudimeier

3

मुझे लगता है कि निर्माण के दौरान उपकरण का आकार मेटाडेटा में कहीं पंजीकृत था। नियंत्रक बदलने से मेटाडेटा नहीं बदलता है।

Md से अतिरिक्त निकालें, फिर इसे एक नए ड्राइव के रूप में RAID सेट में पुनः जोड़ें। आपको शायद मेटाडेटा (चेक मैन पेज फॉर - एज़रो-सुपरब्लॉक या पूरी डिस्क को पोंछना) निकालना होगा। यदि वह एकल डिस्क के लिए काम करता है, तो सभी रिवाइंड ड्राइव के लिए भी प्रक्रिया दोहराएं। फिर अंत में --grow करें।

सिंक समाप्त होने तक अतिरिक्त डिस्क न निकालें !!


यह मेरे लिए अस्पष्ट है यदि आपने परीक्षण किया है कि यह वास्तव में काम करता है। एक पुनर्निर्माण में लगभग 1.5 दिन लगते हैं। सभी 20 ड्राइव को बदलने से पूरे एक महीने के लिए अपमानित होने का कारण होगा। जब आप लिखते हैं "यदि वह एकल डिस्क के लिए काम करता है" तो आप कैसे परीक्षण करते हैं कि यह एकल डिस्क के लिए काम करता है?
ओले तांगे

नहीं, मैंने इसका परीक्षण नहीं किया है, लेकिन मैंने कुछ md समस्याओं को पहले देखा है और मुझे कुछ महसूस हो रहा है कि यह कैसे काम करता है ... और विफल रहता है। मेरे पास खराब मेटाडाटा के साथ ड्राइव नहीं है जो इसे जांचने के लिए चारों ओर पड़ी है। मुझे लंबे सिंक समय के बारे में पता है, यही कारण है कि मैं स्पेयर का उपयोग करने की सलाह देता हूं। आपके पास RAID6 है, जिसका अर्थ है कि 2 ड्राइव विफल हो सकते हैं और आपके पास एक अतिरिक्त है। इसका मतलब है कि कुल 3 ड्राइव जो आपके पास समस्या होने से पहले विफल हो सकते हैं। आप एक एकल ड्राइव के साथ देख सकते हैं, कम से कम आपको पता है कि क्या यह आपका मुद्दा है। मुझे आपके सेटअप के बारे में केवल सीमित जानकारी है। अगर आप इसे करने में सहज नहीं हैं, तो अपने RAID सेट से ड्राइव न खींचें
jippie

ओह, मैं आपका प्रश्न समझ गया हूं। mdadm आपको चेतावनी देगा कि आप एक ऐसा उपकरण जोड़ने की कोशिश कर रहे हैं जो अन्य लोगों की तुलना में बहुत बड़ा है। यह कुछ बाइट्स के बारे में बुरा नहीं मानता है, लेकिन जब यह अंतर अपेक्षाकृत बड़ा होता है तो यह आपको चेतावनी देता है।
जिप्पी

1
आप failड्राइव कर सकते हैं , फिर removeयह, फिर zero-superblockयह मेटाडेटा को हटाने के लिए। जैसा कि आपका RAID सेट उपयोग में है आप या तो इसे एक अतिरिक्त के रूप में जोड़ सकते हैं, जिसका अर्थ है कि यह तब तक सिंक नहीं होगा जब तक कि कोई अन्य ड्राइव विफल नहीं हो (जो कि सामान्य व्यवहार है) लेकिन यह केवल एकल ड्राइव के लिए काम करता है या आपको addइसे और इसके लिए एक सिंक की आवश्यकता होती है। मुझे पता है कि यह हमेशा के लिए लेता है। या आप इस तथ्य को स्वीकार करते हैं कि आप उपलब्ध सभी भंडारण को जोड़ नहीं सकते। विभाजन तालिका का उपयोग करने के लाभों में से एक जो आपने नहीं किया। एक विभाजन तालिका का उपयोग करना बुरा नहीं है, लेकिन इस विशेष मामले में आपकी मदद की होगी।
जिप्पी

1
ऊपर मेरी टिप्पणी देखें: "mdadm आपको चेतावनी देगा कि आप एक उपकरण जोड़ने की कोशिश कर रहे हैं जो अन्य लोगों की तुलना में बहुत बड़ा है।"
जिप्पी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.