راه اندازی RAID در لینوکس

RAID مخفف Redundant Array of Independent Disks مکانیزمی است که در آن مجموعه‌ای از دیسک‌ها به‌صورت زنجیره‌ای به هم متصل می‌شوند و موجب افزایش کارایی و دسترسی‌پذیری به داده‌ها و همچنین تحمل خطاپذیری و بازیابی داده‌های ذخیره شده می‌شود.

انواع RAID

  • Hardware RAID: که به‌صورت سخت‌افزاری و مستقل از سیستم‌عامل عمل می‌کند و تمامی عملیات توسط RAID Controller سیستم انجام می‌شود.
  • Software RAID: که توسط سیستم‌عامل و نرم‌افزار پیکربندی و کنترل می‌شود.

سطوح RIAD

RAID می‌تواند به‌صورت‌های مختلفی پیاده‌سازی شود که در ادامه به معرفی کاربردی‌ترین آن‌ها می‌پردازیم.

  • RAID 0 یا Striping: در این روش داده‌ها به‌صورت تکه‌تکه شده و هر تکه در یک دیسک ذخیره می‌شود که موجب افزایش سرعت خواندن/نوشتن می گردد. در این روش امکان تحمل خطاپذیری و بازیابی داده‌ها وجود ندارد و در صورت خرابی یکی از دیسک ها داده‌ها از بین خواهد رفت.

  • RAID 1 یا Mirroring: در این روش داده‌های نوشته شده روی یک دیسک عیناً روی دیسک دیگر کپی می‌شود. در این روش سرعت خواندن/نوشتن افزایش نمی‌یابد ولی امکان تحمل خطاپذیری و بازیابی داده‌ها در زمانی خرابی یکی از دیسک‌ها وجود دارد.

  • RAID 5 یا Striped with Parity: در این روش داده‌ها همانند روش Striping به‌صورت تکه‌تکه شده بین دیسک‌ها تقسیم و ذخیره می‌شود با این تفاوت که علاوه بر داده‌های ذخیره شده نوعی داده تحت عنوان Parity نیز در دیسک‌ها ذخیره می‌گردد. در این روش سرعت خواندن/نوشتن افزایش می‌یابد و همچنین بدلیل استفاده از Parity امکان تحمل خطاپذیری و بازیابی داده‌ها در زمان خرابی یکی از دیسک‌ها وجود دارد.

  • RAID 6 یا Striped with Double Parity: این روش در‌واقع نسخه توسعه یافته RAID 5 می‌باشد با این‌ تفاوت که در این روش از دو بلوک مجزا Parity استفاده می‌شود که موجب می‌شود امکان تحمل خطاپذیری و بازیابی داده‌ها افزایش یابد.

در این آموزش به نصب و راه‌اندازی RAID نرم‌افزاری در لینوکس خواهیم پرداخت.

نصب و راه‌اندازی RIAD در لینوکس

ابتدا می‌بایست نرم‌افزار mdadm را نصب کنیم.

برای سیستم‌های مبتنی بر دبیان:

sudo apt install mdadm

برای سیستم‌های مبتنی بر ردهت:

sudo yum install mdadm

برای ایجاد یک Raid Array به‌صورت زیر عمل می‌کنیم.

mdadm [mode] <raiddevice> [options] <component-devices>

دستور mdadm شامل تعدادی گزینه است که در ادامه به توضییح مهمترین آن‌ها می‌پردازیم.

mode: حالت عملیاتی را مشخص می‌کند و می‌تواند یکی از گزینه های زیر باشد.

  • C- یا create–: یک array جدید ایجاد می‌کند
  • A- یا assemble–: اجزای یک array از پیش ساخته را به هم ملحق می‌کند.
  • ‌B- یا build–: یک array قدیمی بدون superblock ایجاد می‌کند.
  • F- یا follow , –monitor–: برای مانیتور کردن یک یا چند array استفاده می‌شود.
  • G- یا grow–: اندازه یک array فعال را تغییر می‌دهد
  • manage–: برای انجام کارهایی چون اضافه نمودن دیسک جدید و یا حدف نمودن دیسک های معیوب از array به‌کار می‌رود.

  • raiddevice: محل و نام Array را مشخص می‌کند. برای مثال dev/md0/

options: می‌تواند گزینه‌های زیر را شامل شود.

  • n- یا =raid-devices–: تعداد دیسک های فعال در array را مشخص می‌کند.
  • x- یا =spare-devices–: تعداد دیسک های یدک را مشخص می‌کند.
  • l- یا =level–: سطح RAID را مشخص می‌کند
  • s- یا scan–: فایل کانفیگ یا فایل proc/mdstat/ را برای یافتن اطلاعات مربوط جستجو می‌کند.
  • e- یا =metadata–: مدل metadata استفاده شده برای array را مشخص می‌کند. مقدار پیشفرض 1.2 می‌باشد
  • v- یا verbose—:‌ جهت نمایش اطلاعات بیشتر در رابطه با عملیات در حال انجام استفاده می‌شود.

و …

mdadm دارای گزینه‌های بسیاری است که می‌توانید جهت مطالعه آن‌ها به مستندات Man Pages این برنامه مراجعه کنید

man mdadm

برای ایجاد یک array از نوع raid 1 به‌صورت زیر عمل می‌کنیم.

mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sda /dev/sdb –spare-devices=1 /dev/sdc

در اینجا ما یک array از نوع raid 1 یا mirroring با دو دیسک به نام‌های sda و sdb ایجاد نمودیم؛ همچنین یک دیسک sdc را هم به‌عنوان دیسک یدک برای مواقعی که یکی از دیسک های فعال دچار مشکل شد به array اضافه نمودیم.

برای مشاهده وضعیت array ایجاد شده دستور زیر را وارد می‌کنیم.

mdadm –detail /dev/md0

پس از اجرای دستور فوق خروجی زیر را خواهیم داشت.

/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 11:36:54 2016
     Raid Level : raid1
     Array Size : 8380416 (7.99 GiB 8.58 GB)
  Used Dev Size : 8380416 (7.99 GiB 8.58 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Wed Aug 10 11:55:45 2016
          State : clean 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

           Name : debian:0  (local to host debian)
           UUID : d26d12cf:b0037b53:cfb06317:a06a841b
         Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sda
       1       8       32        1      active sync   /dev/sdb

       2       8       48        -      spare   /dev/sdc

نکته: می‌توانیم به‌جای وارد نمودن شماره سطح از عنوان سطح مورد نظر برای گزینه level– استفاده کنیم.

برای مثال دستور زیر یک array از نوع raid 0 یا stripe ایجاد می‌کند.

mdadm –create /dev/md0 –level=stripe –raid-devices=2 /dev/sda /dev/sdb

برای ذخیره تنظیمات به‌صورت زیر عمل می‌کنیم.

mdadm –detail –scan /etc/mdadm/mdadm.conf

جهت مشاهده وضعیت array ایجاد شده دستور زیر را وارد می‌کنیم.

cat /proc/mdstat

که در صورت فعال بودن و تعریف نمودن array خروجی زیر را خواهیم داشت.

Personalities : [raid6] [raid5] [raid4] [raid1] 
md0 : active raid1 sdc[2](S) sdb[1] sda[0]
      8380416 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

سپس می‌توانیم array ایجاد شده را با فرمت فایل سیستم مورد نظرمان توسط دستور mkfs به‌صورت زیر فرمت کنیم.

mkfs -t ext4 /dev/md0

و در نهایت array ایجاد شده را ماونت می‌کنیم.

mount /dev/md0 /mnt

در صورتی که بخواهیم array مورد نظر را غیرفعال کنیم دستور زیر را وارد می‌کنیم.

mdadm –stop /dev/md0

که در اینجا md0 غیرفعال گردید و برای فعال نمودن مجدد array به صورت زیر عمل می‌کنیم.

mdadm –assemble –scan

برای حدف یک دیسک از array بصورت زیر عمل می‌کنیم.

ابتدا توسط دستور زیر دیسک را به حالت fail تغییر وضعیت می‌دهیم.

mdadm /dev/md0 –fail /dev/sdc

سپس دستور زیر را برای حذف دیسک از array وارد می‌کنیم.

mdadm /dev/md0 –remove /dev/sdc

و برای اضافه نمودن مجدد یک دیسک به array دستور زیر را وارد می‌کنیم.

mdadm /dev/md0 –add /dev/sdc