راه اندازی RAID در لینوکس
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 استفاده میشود که موجب میشود امکان تحمل خطاپذیری و بازیابی دادهها افزایش یابد.
نصب و راهاندازی RIAD در لینوکس
ابتدا میبایست نرمافزار mdadm را نصب کنیم.
برای سیستمهای مبتنی بر دبیان:
$ sudo apt install mdadm
برای سیستمهای مبتنی بر ردهت:
$ sudo yum install mdadm
برای ایجاد یک Raid Array بهصورت زیر عمل میکنیم.
$ mdadm [mode] [options]
دستور 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