RAID (এমডিএডিএম) - ড্রাইভগুলি আকারে মেলানো না থাকলে কী হয়?


15

প্রশ্ন 1 - আপনি "এটি কেবলমাত্র ছোট ডিস্ক নেয়" এর উত্তর দেওয়ার আগে আমাকে দ্রুত শুনুন। আমার 3 টিবি ডাব্লুডি রেডগুলি আকারে 3001 জিবি হতে চলেছে। ধরা যাক আমি mddm এর মাধ্যমে sdb1 এবং sdc1 এর জন্য একটি আয়না সেট করেছি যা ড্রাইভের 100% বিস্তৃত। কিন্তু হঠাৎ, একটি ড্রাইভ ব্যর্থ হয়েছে। প্রতিস্থাপনটি 3TB, ওজন 3000 জিবি। আমি যখন অ্যারেতে বিদ্যমান তার চেয়ে ছোট একটি ড্রাইভ রাখি তখন কী হবে? আমি 3000 বনাম 3001 ব্যবহার করে একটি নতুন অ্যারে দিয়ে জানি, এটি অ্যারেটি 3000 হিসাবে গড়ে তুলবে But তবে আমি যেমন বলেছিলাম, বর্তমান অ্যারে সম্পর্কে কি বলা যায় @ 3001 এবং আমি একটি ছোট ড্রাইভ যুক্ত করব? পুনর্নির্মাণের সময় কি এটি 3000 জিবি আকারের হয়ে পুনরায় গঠন করে?

প্রশ্ন 2 - যদি আমি বিদ্যমান 3001 গিগাবাইটের সাথে অ্যারে 3000 গিগাবাইট যোগ করতে পারি না এবং এটি কেবলমাত্র 3000-এ নামিয়ে আনতে পারে ... আমি কি 3001 কে কিছুটা নীচে আকার দিতে পারি?

প্রশ্ন 3 - বা, একটি ভাল ধারণা। যদি আমি আমার 3 টিবি ড্রাইভকে 2999 গিগাবাইটে ডাউন সাইজ করি তবে কী হবে? এইভাবে ড্রাইভটি 1 এমবি, 1 বাইট, 10 কিলোবাইট দ্বারা সংক্ষিপ্ত হোক বা না হোক, এটি সর্বদা "ছোট" ড্রাইভটি বেছে নেবে @ 2999 গিগাবাইট।

উত্তর:


28

আমি ভুল করে এই উত্তরটি পেরিয়ে এসেছি, তবে যদি কেউ আগ্রহী হয় তবে পরীক্ষাগুলি দ্বারা সমর্থিত একটি উত্তর এখানে।

সংক্ষিপ্ত সংস্করণ

বোনাস প্রশ্ন: আমি md(4)অসম আকারের ব্লক ডিভাইসগুলির মধ্যে একটি রেড অ্যারে তৈরি করতে পারি ? হ্যাঁ, তবে RAID অ্যারের মধ্যে ক্ষুদ্রতম ব্লক ডিভাইসের আকার থাকবে (প্লাস তার নিজস্ব গৃহকর্মের জন্য কিছু ওভারহেড)। যদি ডিভাইসের আকারগুলি একে অপরের 1% এর মধ্যে না থাকে তবে আপনি একটি সতর্কতা পাবেন।

প্রশ্ন 1: আমি কি বিদ্যমান md(4)রেইড অ্যারে সংক্ষিপ্ততম বর্তমান সদস্যের চেয়ে ছোট ডিভাইস যুক্ত করতে পারি ? না দুঃক্ষিত. mdadmআপনার ডেটা সুরক্ষিত করতে তা করতে অস্বীকার করবে।

প্রশ্ন 2: আপনি একটি বিদ্যমান এমডি অ্যারের আকার পরিবর্তন করতে পারেন? হ্যাঁ ( mdadmম্যানপেজটি পড়ুন!) তবে এটি চেষ্টা করার মতো নয়। আপনাকে সমস্ত কিছু ব্যাক আপ করতে হবে, তারপরে RAID ডিভাইসের সামগ্রীগুলি পুনরায় আকার দিন, তারপরে নিজেই ডিভাইসটিকে পুনরায় আকার দিন - এগুলি সমস্তই ত্রুটি, ভুল ত্রুটি এবং অন্যান্য বিষয়গুলির জন্য প্রবণ যা আপনার ডেটা ব্যয় করবে (বেদনাদায়ক অভিজ্ঞতা বলার) ।

এটি ঝুঁকি এবং প্রচেষ্টা মূল্য নয়। আপনার যদি একটি নতুন, ফাঁকা ডিস্ক থাকে তবে এটিকে পুনরায় আকার দেওয়ার উপায়টি এবং আপনার সমস্ত ডেটার এক থেকে দুটি কপির মধ্যে সর্বদা অক্ষত রাখতে হবে (ধরে নিবেন আপনার কাছে 2-ডিস্কের RAID1 রয়েছে):

  1. md(4)এটিতে একটি নতুন অ্যারে তৈরি করুন (একটি ডিস্ক হারিয়েছে)।
  2. অ্যারের সামগ্রীর কাঠামো পুনরুদ্ধার করুন (ক্রিপ্টো, এলভিএম, পার্টিশন টেবিলগুলি, এর কোনও সংমিশ্রণ, যাই হোক না কেন আপনার নৌকাকে ভাসিয়ে তোলে)।
  3. বিদ্যমান ডিস্ক থেকে ডেটা অনুলিপি করুন নতুনটিতে।
  4. নতুন ডিস্ক ব্যবহার করে পুনরায় বুট করুন।
  5. পুরানো ডিস্কের পার্টিশন টেবিলটি মুছুন (বা md(4)সুপারব্লকটি শূন্য করুন )। প্রয়োজনে, নতুন ডিস্কে স্কিমটি মেলে প্রয়োজনীয় পার্টিশন তৈরি করুন।
  6. নতুন অ্যারেতে পুরানো ডিস্ক যুক্ত করুন।
  7. অ্যারে সদস্যদের সিঙ্ক করার জন্য অপেক্ষা করুন। কিছু কফি খাও। লাতিন আমেরিকাতে ফ্লাই করুন এবং আপনার নিজের কফি বিনগুলি বেছে নিন। :) (যদি আপনি বাস করেন তবে ল্যাটিন আমেরিকা, পরিবর্তে আফ্রিকা পর্যন্ত উড়ানের সুবিধা দেওয়া)।

দ্রষ্টব্য: হ্যাঁ, এটি তার উত্তরটিতে বর্ণিত 0xC0000022L একই কৌশল।

প্রশ্ন 3. ড্রাইভ 1 জি সংক্ষিপ্ত হলে কী হবে? :) এটি সম্পর্কে চিন্তা করবেন না। আপনার প্রতিস্থাপন ড্রাইভটি আরও বড় হওয়ার সম্ভাবনা রয়েছে। বস্তুত, মত উপরে এটি একটি কৌশলের সঙ্গে বহন করেনা সস্তা বৃহত্তর ড্রাইভ পেতে যখনই এক ব্যর্থ (অথবা একটি সস্তা আপগ্রেড জন্য)। আপনি একটি প্রগতিশীল আপগ্রেড পেতে পারেন।

পরীক্ষামূলক প্রুফ

পরীক্ষামূলক সেটআপ

প্রথমে আসুন কিছু ব্লক ডিভাইস নকল করি। আমরা /tmp/sdxএবং /tmp/sdy(প্রতিটি 100 /tmp/sdzএম) এবং (99 এম) ব্যবহার করব ।

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

যেমনটি প্রত্যাশা করা হয়েছিল, আমাদের কাছে ঠিক 100 এম (102400 কিবি = 100 মাইবি) এবং 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

এটি আমরা প্রত্যাশিতভাবে প্রত্যাশা করি: এমডিএডিএম ম্যানুয়ালটিতে একবার দেখে আমাদের মনে করিয়ে দেয় যে সংস্করণ 1.2 মেটাডেটা 128 কে: 128 + 102272 = 102400 নিয়েছে Now এখন দ্বিতীয় পরীক্ষার প্রস্তুতির মধ্যে এটি নষ্ট করি।

sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1

অসম আকারযুক্ত ডিভাইসগুলি থেকে একটি রেড অ্যারে তৈরি করা

এবার আমরা ছোট ব্লক ডিভাইসটি ব্যবহার করব।

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. ব্যবহারযোগ্য স্থান হ'ল ক্ষুদ্রতম ডিভাইসের (প্লাস 128 কে RAID মেটাডেটা)। আমাদের শেষ পরীক্ষার জন্য আসুন এটি আবার নামিয়ে আনুন:

sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2

এবং শেষ অবধি: একটি চলমান অ্যারেতে একটি ছোট ডিভাইস যুক্ত করা

প্রথমে 100 মিটার ডিস্কের মধ্যে একটি দিয়ে একটি 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

নিশ্চিতভাবেই, এটি 102400 ব্লকের 128 কে সংক্ষিপ্ত। ছোট ডিস্ক যুক্ত করা হচ্ছে:

sudo mdadm  --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array

পরিস্ফুটন! এটি আমাদের দেয় না এবং ত্রুটিটি খুব স্পষ্ট।


সিনোলজি হাইব্রিড RAID (এসএইচআর) এই সমস্যাটি সমাধান করে।
ডেনিস ডেনিসভ

1

mdXডিভাইস সেটআপ করার বিভিন্ন উপায় রয়েছে । এটিকে জিপিটি হিসাবে ভাগ করার জন্য পদ্ধতিটি ব্যবহার করা হবে gdisk(বা sgdiskআপনি যদি কেবল কমান্ড-লাইনটি সংস্করণ পছন্দ করেন)। আপনি যদি অ্যারে থেকে বুট করতে চান তবে "BIOS বুট পার্টিশন" তৈরি করুন, কোডটি টাইপ করুন ef02। এটি কেবলমাত্র যদি আপনি এই অ্যারেটি বুট করতে চান তবে অন্যথায় যত্ন নেওয়ার দরকার নেই no তারপরে, অ্যারেতে যুক্ত হতে ছোট মাপের ডিস্কের চেয়ে একই আকার বা ছোট একটি পার্টিশন তৈরি করুন। সর্বশেষে তবে সর্বনিম্ন নয়, জিপিটি ডেটা অন্য ডিস্কে অনুলিপি করুন (বিশেষজ্ঞ মেনু gdiskব্যবহার করে x, এবং তারপরে uএবং লক্ষ্য ডিভাইসটি নির্দিষ্ট করুন)। এটি একটি ধ্বংসাত্মক প্রক্রিয়া।

এটি সম্ভব হবে - যদি ফাইল সিস্টেম এটির জন্য অনুমতি দেয় - একটি বিদ্যমান পার্টিশনটিকে আরও ছোট কিছুতে পুনরায় আকার দিতে এবং তারপরে জিপিটি ডেটা অনুলিপি করতে একই পদ্ধতিটি ব্যবহার করে। যাইহোক, এটি আপনাকে কিছুটা কেরফ্লফলে নিয়ে যায়। কারণ এখন আপনার কাছে দুটি ডিস্ক রয়েছে তবে এখনও কোনও mdXডিভাইস নেই। এর মধ্যে একটি mdXপার্টিশন-ভিত্তিক (যা আমি উপরে বর্ণিত) বা ডিস্ক-ওয়াইস হিসাবে প্রস্তুত করতে হবে এবং তারপরে অবশ্যই বিদ্যমান ডিস্ক থেকে ডেটা স্থানান্তরিত করতে হবে।

তাই:

  1. বিগ ডিস্ক ( /dev/sda) -এ ডেটা রয়েছে, ডেটা 3001 জিবি এর চেয়ে ছোট, পার্টিশনগুলি নেই
  2. ছোট ডিস্ক /dev/sdbসিস্টেমে যুক্ত হয়
  3. আপনি পার্টিশন /dev/sdbসঙ্গেgdisk
  4. আপনি প্রতিটি স্বতন্ত্র পার্টিশন থেকে একটি অ্যারে তৈরি ( mdadm -C /dev/md2 -l 1 -n 1 /dev/sdb2)
  5. আপনি নতুন অ্যারেতে ফাইল সিস্টেম তৈরি করেন
  6. আপনার সিস্টেমটি একটি জিপিটি ডিস্ক চালানোর জন্য প্রস্তুত হবে এবং GRUB2 কে এর অর্থগুলি বোঝার জন্য প্রস্তুত হবে তা নিশ্চিত করে আপনি সমস্ত ডেটা অনুলিপি করেছেন (নীচে দেখুন)
  7. আপনার কাছ থেকে বেশি GPT পার্টিশন ডাটা কপি /dev/sdbকরার/dev/sda
  8. আপনি /dev/sdaবিদ্যমান অ্যারে থেকে "কাঁচা" পার্টিশন যুক্ত করুন
  9. আপনি /proc/mdstatসিঙ্কিং সম্পন্ন হয়েছে তা দেখানোর জন্য অপেক্ষা করুন

আপনি যদি সমস্ত পদক্ষেপ অনুসরণ করেন তবে আপনাকে এখন নতুন সিস্টেমে mdX অ্যারে থেকে বুট করতে সক্ষম হওয়া উচিত। তবে, রেসকিউ সিডি বা একটি PXE বুট বিকল্পটি সহজেই রাখুন।


GRUB2 সেটআপ বন্ধ হ্যান্ড চিনতে সক্ষম হবে না। সুতরাং আপনার কিছু "যাদু" দরকার। এখানে একটি ওয়ান-লাইনার:

for i in /dev/disk/by-id/md-uuid-*; do DEV=$(readlink $i); echo "(${DEV##*/}) $i"; done|sort|tee /boot/grub/devicemap

অথবা আরও ভার্জোজ করা যাক:

for i in /dev/disk/by-id/md-uuid-*
do
  DEV=$(readlink $i)
  echo "(${DEV##*/}) $i"
done|sort|sudo tee /boot/grub/devicemap

এটি /boot/grub/devicemapGRUB2 কে প্রতিটি স্বতন্ত্র ডিস্ক কোথায় সন্ধান করতে পারে তার সাথে ডিফল্ট তৈরি করে (বা ওভাররাইট করে) । ফলাফল এই তালিকার মতো কিছু হবে:

(md0) /dev/disk/by-id/md-uuid-...
(md2) /dev/disk/by-id/md-uuid-...
(md3) /dev/disk/by-id/md-uuid-...
(md4) /dev/disk/by-id/md-uuid-...

যদি আপনি লিগ্যাসি GRUB ব্যবহার করেন তবে আপনাকে মেটা-ডেটা সংস্করণ 0.9 সহ "BIOS বুট পার্টিশন" তৈরি করতে mdadm -e 0 ...হবে , এবং প্রক্রিয়াটি পৃথক হবে। যদিও আমি তা করিনি।


1
আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. এই অ্যারেটি কেবলমাত্র আমার সার্ভারে কাঁচা স্টোরেজের জন্য তাই এটি বুটিং বা এ জাতীয় কিছু পরিচালনা করে না। গেমটির পরে আমি বিভিন্ন আকারের হার্ড ড্রাইভগুলি মেশানো এবং মেলাতে কেবল উদ্বিগ্ন ছিলাম। মানে, আমার কাছে এসডিবি 1 @ 3001 জিবি এবং এসডিসি 1 @ 3001 জিবি থাকলে কী হবে, তবে এসডিসি 1 মারা যায় এবং প্রতিস্থাপনটি 3000 জিবি হয়? এসডিবি 1 কি 3000 এ ডাউন হবে? @ / Dev / md0 অ্যারেটি কি 3000 গিগাবাইটে ডাউন হবে? আমি এটির বিষয়ে যত বেশি চিন্তা করি, শেষে ঘর ছেড়ে যাওয়ার পক্ষে তত বেশি অর্থ হয়, যেমন উপরের ২৯৯৯ উদাহরণ - সেইভাবে এটি মাথাব্যথা দূর করবে। আমি কিছু মিস করছি না হলে?
জাসডার্স

1
প্রকৃতপক্ষে, RAID স্তর 1 এখানে ধরে নেওয়া, mdadmএটি অসম্পূর্ণ থাকলে প্রথমে অ্যারে তৈরি করতে অস্বীকার করবে। RAID 5 এ আপনার অবশেষে আরও ডিস্কের প্রয়োজন হবে এবং RAID 0 এ আপনি এটি সম্পর্কে চিন্তা করবেন না, এজন্যই আমি RAID 1 ধরে নিয়েছি So সুতরাং হ্যাঁ, এটি ঘর ছেড়ে যাওয়ার অর্থবোধ করে।
0xC0000022L

আমি ঘোড়াটিকে মারতে চাইছি না, তবে আপনি যে "বেমানান" বিবৃতি দিয়েছেন তা সম্পর্কে আমি কিছুটা অনিশ্চিত। বেমানান কি হবে? আপনি কি আমার উদাহরণে 3000 জিবি বনাম 3001 জিবি আকারের আকারের পার্থক্যগুলি উল্লেখ করছেন? যে কোনও উপায়ে, আমি প্রতিটি পার্টিশনটি 2999 গিগাবাইটের সাথে সবেমাত্র চালিয়েছি, যদিও প্রতিটি ডিস্ক 3001 জিবি ছিল GB এটি একই ধরণের মাথাব্যথা সরিয়ে ফেলতে হবে যা আমি অভিন্ন প্রতিস্থাপন ড্রাইভগুলি না পেয়ে ইভেন্টে লাইনে চলে আসে। আপনার অন্তর্দৃষ্টি প্রশংসা!
জাসডার্স

@ জাএসডার্স: আমি মনে করি একটি জিআইবি কম-বেশি ইতিমধ্যে বেমানান থাকবে। তবে বেশ স্পষ্টভাবে আমি জানি না যে সীমাটি কোথায়। আমি জানি, যাইহোক, আকারে সামান্য পরিবর্তনগুলি সহ্য করা হবে। অন্য সমস্ত কিছুর জন্য আপনাকে আমার রূপরেখার মতো একই উপায়ে স্থানান্তর করতে হবে।
0xC0000022L

@ 0xC0000022L: mdadmঅ্যারে সদস্যদের মধ্যে 1% আকারের পার্থক্য সহ্য করে।
অ্যালেক্সিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.