mdadm
برای ایجاد و ویرایش این آرایهها میباشد همراه با ابزارهای جانبی و اسکریپتهایی که آن را با سایر قسمتهای سیستم از جمله مانیتورینگ یکپارچه میسازد.
sdb
کاملا موجود است؛
sdc
کاملا موجود است؛
sdd
تنها پارتیشن ۴ گیگابایت sdd2
موجود است؛
sde
که کاملا موجود است.
#
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. #
mdadm --query /dev/md0
/dev/md0: 8.00GiB raid0 2 devices, 0 spares. Use mdadm --detail for more detail. #
mdadm --detail /dev/md0
/dev/md0: Version : 1.2 Creation Time : Wed May 6 09:24:34 2015 Raid Level : raid0 Array Size : 8387584 (8.00 GiB 8.59 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed May 6 09:24:34 2015 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Name : mirwiz:0 (local to host mirwiz) UUID : bb085b35:28e821bd:20d697c9:650152bb Events : 0 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc #
mkfs.ext4 /dev/md0
mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 2095104 4k blocks and 524288 inodes Filesystem UUID: fff08295-bede-41a9-9c6a-8c7580e520a6 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done #
mkdir /srv/raid-0
#
mount /dev/md0 /srv/raid-0
#
df -h /srv/raid-0
Filesystem Size Used Avail Use% Mounted on /dev/md0 7.9G 18M 7.4G 1% /srv/raid-0
mdadm --create
نیازمند چند پارامتر است: نام آرایهای که قصد ایجادش را داریم (/dev/md*
که MD به معنی Multiple Device است)، سطح RAID، تعداد دیسکها (که اجباری است و از RAID-1 به بالا معنا دارد) و درایوهای فیزیکی قابل استفاده. زمانی که دستگاه ایجاد گردد، مانند یک پارتیشن عادی میتوانیم از آن استفاده کرده، فایل سیستم ایجاد کنیم و آن را متصل سازیم. نکته اینکه ایجاد آرایه RAID-0 روی md0
تصادفی است و این شمارهگذاری هیچ ارتباطی به سطوح مختلف RAID ندارد. همچنین امکان ایجاد آرایههای نامگذاری شده RAID نیز با استفاده از پارامترهایی نظیر /dev/md/linear
بجای /dev/md0
در دستور mdadm
وجود دارد.
#
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd2 /dev/sde
mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: largest drive (/dev/sdd2) exceeds size (4192192K) by more than 1% Continue creating array?
y
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started. #
mdadm --query /dev/md1
/dev/md1: 4.00GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail. #
mdadm --detail /dev/md1
/dev/md1: Version : 1.2 Creation Time : Wed May 6 09:30:19 2015 Raid Level : raid1 Array Size : 4192192 (4.00 GiB 4.29 GB) Used Dev Size : 4192192 (4.00 GiB 4.29 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed May 6 09:30:40 2015 State : clean, resyncing (PENDING) Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : mirwiz:1 (local to host mirwiz) UUID : 6ec558ca:0c2c04a0:19bca283:95f67464 Events : 0 Number Major Minor RaidDevice State 0 8 50 0 active sync /dev/sdd2 1 8 64 1 active sync /dev/sde #
mdadm --detail /dev/md1
/dev/md1: [...] State : clean [...]
mdadm
تشخیص میدهد که دستگاههای فیزیکی شامل اندازههای متفاوت هستند؛ از آنجا که این امر منجر به گم شدن فضا در دیسک بزرگتر میشود، تاییدیه آن مورد نیاز است.
/dev/md1
قابل استفاده است و یک فایل سیستم میتواند روی آن ایجاد گردد و دادههای روی آن قرار گیرند.
mdadm
و به طور خاص گزینه --fail
آن، امکان شبیهسازی این نقص دیسک را بوجود میآورد:
#
mdadm /dev/md1 --fail /dev/sde
mdadm: set /dev/sde faulty in /dev/md1 #
mdadm --detail /dev/md1
/dev/md1: [...] Update Time : Wed May 6 09:39:39 2015 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Name : mirwiz:1 (local to host mirwiz) UUID : 6ec558ca:0c2c04a0:19bca283:95f67464 Events : 19 Number Major Minor RaidDevice State 0 8 50 0 active sync /dev/sdd2 2 0 0 2 removed 1 8 64 - faulty /dev/sde
sdd
داده از بین میرود. به منظور پیشگیری از این خطر دیسک معیوب را با sdf
جایگزین میکنیم:
#
mdadm /dev/md1 --add /dev/sdf
mdadm: added /dev/sdf #
mdadm --detail /dev/md1
/dev/md1: [...] Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed May 6 09:48:49 2015 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 1 Spare Devices : 1 Rebuild Status : 28% complete Name : mirwiz:1 (local to host mirwiz) UUID : 6ec558ca:0c2c04a0:19bca283:95f67464 Events : 26 Number Major Minor RaidDevice State 0 8 50 0 active sync /dev/sdd2 2 8 80 1 spare rebuilding /dev/sdf 1 8 64 - faulty /dev/sde #
[...]
[...] #
mdadm --detail /dev/md1
/dev/md1: [...] Update Time : Wed May 6 09:49:08 2015 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Name : mirwiz:1 (local to host mirwiz) UUID : 6ec558ca:0c2c04a0:19bca283:95f67464 Events : 41 Number Major Minor RaidDevice State 0 8 50 0 active sync /dev/sdd2 2 8 80 1 active sync /dev/sdf 1 8 64 - faulty /dev/sde
sde
را حذف کرد؛
#
mdadm /dev/md1 --remove /dev/sde
mdadm: hot removed /dev/sde from /dev/md1 #
mdadm --detail /dev/md1
/dev/md1: [...] Number Major Minor RaidDevice State 0 8 50 0 active sync /dev/sdd2 2 8 80 1 active sync /dev/sdf
sde
واقعی (در مقابل شبیهسازی شده) باشد و سیستم بدون حذف sde
راهاندازی مجدد گردد، این دیسک ممکن است به فعالیت خود پس از عملیات تشخیص اولیه ادامه دهد. کرنل شامل سه دیسک فیزیکی است که هر کدام ادعا میکنند نصف فضای RAID را در اختیار دارند. حالت مبهم دیگر ترکیب آرایههای RAID از دو سرور مختلف در قالب یک سرور است. اگر این آرایهها قبل از انتقال دیسکها درست کار کنند، کرنل قادر خواهد بود که اجزای آن را شناسایی و پیکربندی کند؛ اما اگر دیسکهای انتقال یافته درون آرایه md1
از سرور قدیم قرار بگیرند، در صورتی که سرور جدید آرایه md1
داشته باشد، یکی از mirrorها نامگذاری مجدد خواهد شد.
/etc/mdadm/mdadm.conf
است که مثالی از آن را در ادامه مشاهده میکنید:
مثال 12.1. فایل پیکربندیmdadm
# mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default (built-in), scan all partitions (/proc/partitions) and all # containers for MD superblocks. alternatively, specify devices to scan, using # wildcards if desired. DEVICE /dev/sd* # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST <system> # instruct the monitoring daemon where to send mail alerts MAILADDR root # definitions of existing MD arrays ARRAY /dev/md0 metadata=1.2 name=mirwiz:0 UUID=bb085b35:28e821bd:20d697c9:650152bb ARRAY /dev/md1 metadata=1.2 name=mirwiz:1 UUID=6ec558ca:0c2c04a0:19bca283:95f67464 # This configuration was auto-generated on Thu, 17 Jan 2013 16:21:01 +0100 # by mkconf 3.2.5-3
DEVICE
است، که دستگاههای مورد نیاز برای جستجوی خودکار اجزای آرایههای RAID در سیستم را مشخص میکند. در مثال ما، ما گزینه پیشفرض partitions containers
را با فهرستی از دستگاهها جایگزین کردیم چرا که قصد استفاده از تمام دیسک و نه قسمتهایی از پارتیشن آن را برای برخی آرایهها داشتیم.
/dev/md*
منطبق با آن).
#
mdadm --misc --detail --brief /dev/md?
ARRAY /dev/md0 metadata=1.2 name=mirwiz:0 UUID=bb085b35:28e821bd:20d697c9:650152bb ARRAY /dev/md1 metadata=1.2 name=mirwiz:1 UUID=6ec558ca:0c2c04a0:19bca283:95f67464
/dev
به عنوان یک فایل ظاهر نمیشوند، بنابراین خطری در استفاده مستقیم از آنها وجود ندارد.
/dev
ظاهر میشود، که میتواند به عنوان هر پارتیشن فیزیکی دیگر مورد استفاده قرار گیرد (بیشتر در مورد یک فایل سیستم میزبان یا فضای swap).
sdb
، یک پارتیشن ۴ گیگابایت به نام sdb2
؛
sdc
، یک پارتیشن ۳ گیگابایت به نام sdc3
؛
sdd
، با ظرفیت ۴ گیگابایت کاملا موجود؛
sdf
، یک پارتیشن ۴ گیگابایت به نام sdf1
و یک پارتیشن ۵ گیگابایت به نام sdf2
.
sdb
و sdf
سریعتر از دو دیسک دیگر هستند.
pvcreate
آمادهسازی میکنیم:
#
pvdisplay
#
pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created #
pvdisplay
"/dev/sdb2" is a new physical volume of "4.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 4.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 0zuiQQ-j1Oe-P593-4tsN-9FGy-TY0d-Quz31I #
for i in sdc3 sdd sdf1 sdf2 ; do pvcreate /dev/$i ; done
Physical volume "/dev/sdc3" successfully created Physical volume "/dev/sdd" successfully created Physical volume "/dev/sdf1" successfully created Physical volume "/dev/sdf2" successfully created #
pvdisplay -C
PV VG Fmt Attr PSize PFree /dev/sdb2 lvm2 --- 4.00g 4.00g /dev/sdc3 lvm2 --- 3.09g 3.09g /dev/sdd lvm2 --- 4.00g 4.00g /dev/sdf1 lvm2 --- 4.10g 4.10g /dev/sdf2 lvm2 --- 5.22g 5.22g
pvdisplay
فهرستی از PVها را با دو قالب خروجی ممکن نمایش میدهد.
vgcreate
درون VG قرار دهیم. PV دیسکهای سریع را درون VG به نام vg_critical
و دیسکهای کند را درون VG به نام vg_normal
قرار میدهیم.
#
vgdisplay
No volume groups found #
vgcreate vg_critical /dev/sdb2 /dev/sdf1
Volume group "vg_critical" successfully created #
vgdisplay
--- Volume group --- VG Name vg_critical System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 8.09 GiB PE Size 4.00 MiB Total PE 2071 Alloc PE / Size 0 / 0 Free PE / Size 2071 / 8.09 GiB VG UUID bpq7zO-PzPD-R7HW-V8eN-c10c-S32h-f6rKqp #
vgcreate vg_normal /dev/sdc3 /dev/sdd /dev/sdf2
Volume group "vg_normal" successfully created #
vgdisplay -C
VG #PV #LV #SN Attr VSize VFree vg_critical 2 0 0 wz--n- 8.09g 8.09g vg_normal 3 0 0 wz--n- 12.30g 12.30g
vgdisplay
شامل دو قالب خروجی است. به یاد داشته باشید که امکان استفاده از دو پارتیشن یک دیسک فیزیکی درون دو VG مختلف وجود دارد. ما از یک پیشوند vg_
برای نامگذاری VGها استفاده کردیم، اما چیزی بیشتر از رعایت یک استاندارد نیست.
lvcreate
و شیوه نگارشی پیچیدهتر از گامهای قبلی صورت میگیرد:
#
lvdisplay
#
lvcreate -n lv_files -L 5G vg_critical
Logical volume "lv_files" created #
lvdisplay
--- Logical volume --- LV Path /dev/vg_critical/lv_files LV Name lv_files VG Name vg_critical LV UUID J3V0oE-cBYO-KyDe-5e0m-3f70-nv0S-kCWbpT LV Write Access read/write LV Creation host, time mirwiz, 2015-06-10 06:10:50 -0400 LV Status available # open 0 LV Size 5.00 GiB Current LE 1280 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 #
lvcreate -n lv_base -L 1G vg_critical
Logical volume "lv_base" created #
lvcreate -n lv_backups -L 12G vg_normal
Logical volume "lv_backups" created #
lvdisplay -C
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_base vg_critical -wi-a--- 1.00g lv_files vg_critical -wi-a--- 5.00g lv_backups vg_normal -wi-a--- 12.00g
lvcreate
ارسال گردند. نام LV که قصد ایجاد آن را داریم با گزینه -n
و اندازه آن با گزینه -L
مشخص میشود. البته، به دستور باید اعلام کنیم که از کدام VG میخواهیم استفاده شود.
/dev/mapper/
قرار میگیرند:
#
ls -l /dev/mapper
total 0 crw------- 1 root root 10, 236 Jun 10 16:52 control lrwxrwxrwx 1 root root 7 Jun 10 17:05 vg_critical-lv_base -> ../dm-1 lrwxrwxrwx 1 root root 7 Jun 10 17:05 vg_critical-lv_files -> ../dm-0 lrwxrwxrwx 1 root root 7 Jun 10 17:05 vg_normal-lv_backups -> ../dm-2 #
ls -l /dev/dm-*
brw-rw---T 1 root disk 253, 0 Jun 10 17:05 /dev/dm-0 brw-rw---- 1 root disk 253, 1 Jun 10 17:05 /dev/dm-1 brw-rw---- 1 root disk 253, 2 Jun 10 17:05 /dev/dm-2
#
ls -l /dev/vg_critical
total 0 lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_base -> ../dm-1 lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_files -> ../dm-0 #
ls -l /dev/vg_normal
total 0 lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_backups -> ../dm-2
#
mkfs.ext4 /dev/vg_normal/lv_backups
mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 3145728 4k blocks and 786432 inodes Filesystem UUID: b5236976-e0e2-462e-81f5-0ae835ddab1d [...] Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done #
mkdir /srv/backups
#
mount /dev/vg_normal/lv_backups /srv/backups
#
df -h /srv/backups
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_normal-lv_backups 12G 30M 12G 1% /srv/backups #
[...]
[...] #
cat /etc/fstab
[...] /dev/vg_critical/lv_base /srv/base ext4 defaults 0 2 /dev/vg_critical/lv_files /srv/files ext4 defaults 0 2 /dev/vg_normal/lv_backups /srv/backups ext4 defaults 0 2
vg_critical
استفاده نکردهایم، میتوانیم lv_files
را گسترش دهیم. برای این منظور، با استفاده از دستور lvresize
و resize2fs
برای سازگاری فایل سیستم اینکار صورت میگیرد:
#
df -h /srv/files/
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_critical-lv_files 5.0G 4.6G 146M 97% /srv/files #
lvdisplay -C vg_critical/lv_files
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_files vg_critical -wi-ao-- 5.00g #
vgdisplay -C vg_critical
VG #PV #LV #SN Attr VSize VFree vg_critical 2 2 0 wz--n- 8.09g 2.09g #
lvresize -L 7G vg_critical/lv_files
Size of logical volume vg_critical/lv_files changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents). Logical volume lv_files successfully resized #
lvdisplay -C vg_critical/lv_files
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_files vg_critical -wi-ao-- 7.00g #
resize2fs /dev/vg_critical/lv_files
resize2fs 1.42.12 (29-Aug-2014) Filesystem at /dev/vg_critical/lv_files is mounted on /srv/files; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/vg_critical/lv_files is now 1835008 (4k) blocks long. #
df -h /srv/files/
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_critical-lv_files 6.9G 4.6G 2.1G 70% /srv/files
#
df -h /srv/base/
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_critical-lv_base 1008M 854M 104M 90% /srv/base #
vgdisplay -C vg_critical
VG #PV #LV #SN Attr VSize VFree vg_critical 2 2 0 wz--n- 8.09g 92.00m
sdb1
، که خارج از LVM استفاده میشود، تنها شامل بایگانیهایی است که میتواند به lv_backups
انتقال یابد. اکنون میتوانیم آن را بازیابی کرده و درون گروه مجازی قرار دهیم، در نتیجه برخی فضای موجود را احیا میکنیم. اینکار با استفاده از دستور vgextend
صورت میگیرد. البته که پارتیشن ابتدا باید به صورت یک گروه فیزیکی آماده شود. زمانی که VG گسترش یافت، از دستورات مشابه میتوانیم برای افزایش اندازه گروه مجازی و فایل سیستم استفاده کنیم:
#
pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created #
vgextend vg_critical /dev/sdb1
Volume group "vg_critical" successfully extended #
vgdisplay -C vg_critical
VG #PV #LV #SN Attr VSize VFree vg_critical 3 2 0 wz--n- 9.09g 1.09g #
[...]
[...] #
df -h /srv/base/
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_critical-lv_base 2.0G 854M 1.1G 45% /srv/base
sda
و sdc
ظاهر میشوند. آنها با توجه به طرح زیر پارتیشنبندی شدهاند:
#
fdisk -l /dev/sda
Disk /dev/sda: 300 GB, 300090728448 bytes, 586114704 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00039a9f Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 1992060 1990012 1.0G fd Linux raid autodetect /dev/sda2 1992061 3984120 1992059 1.0G 82 Linux swap / Solaris /dev/sda3 4000185 586099395 582099210 298G 5 Extended /dev/sda5 4000185 203977305 199977120 102G fd Linux raid autodetect /dev/sda6 203977306 403970490 199993184 102G fd Linux raid autodetect /dev/sda7 403970491 586099395 182128904 93G 8e Linux LVM
md0
. از این mirror به طور مستقیم برای ذخیرهسازی فایل سیستم root استفاده میشود.
sda2
و sdc2
به عنوان swap استفاده شدهاند، که مجموع فضای ۲ گیگابایت برای swap را فراهم میکنند. با ۱ گیگابایت RAM، رایانه مقدار کافی حافظه موجود را خواهد داشت.
sda5
و sdc5
همراه با sda6
و sdc6
هر کدام به یک آرایه RAID-1 به اندازه ۱۰۰ گیگابایت تقسیم شدهاند که به نامهای md1
و md2
موجود هستند. هر یک از این mirrorها به عنوان گروههای فیزیکی برای LVM راهاندازی شدهاند که به گروه آرایه vg_raid
اختصاص یافتهاند. بنابراین این VG شامل ۲۰۰ گیگابایت فضای امن است.
sda7
و sdc7
به طور مستقیم به عنوان گروههای فیزیکی vg_bulk
نامگذاری شدهاند، که در نهایت فضایی معادل ۲۰۰ گیگابایت را شامل میشوند.
vg_raid
در صورت نقص دیسکها نیز نگهداری میشوند که این مورد درباره LVهای ایجاد شده در vg_bulk
صادق نیست؛ از طرف دیگر، مورد دوم به صورت موازی در اختیار هر دو دیسک قرار میگیرد، که امکان خواندن یا نوشتن فایلهای بزرگ را فراهم میآورد.
lv_usr
، lv_var
و lv_home
را در vg_raid
ایجاد میکنیم تا از فایل سیستمهای متناسب پشتیبانی گردد؛ از یک گروه منطقی دیگر بنام lv_movies
برای ذخیرهسازی ویدیوهای ویرایش شده استفاده میشود. از VG دیگر به منظور تقسیم lv_rushes
برای دادههای ورودی از دوربینهای دیجیتال و یک lv_tmp
برای فایلهای موقت استفاده خواهد شد. مکان ذخیرهسازی ناحیه کاری خود انتخاب دیگری است: با اینکه عملکرد خوب برای این آرایه مورد نیاز است، آیا ارزش دارد که کار را در قبال یک نقص سختافزاری حین ویرایش ویدیو از دست بدهیم؟ با توجه به پاسخ این پرسش، LV مرتبط با یک VG یا دیگری ایجاد خواهد شد.
/usr/
میزبانی میکند میتواند به آرامی رشد کند.