mdadm برای ایجاد و ویرایش این آرایهها میباشد همراه با ابزارهای جانبی و اسکریپتهایی که آن را با سایر قسمتهای سیستم از جمله مانیتورینگ یکپارچه میسازد.
sdb کاملا موجود است؛
sdc کاملا موجود است؛
sdd تنها پارتیشن ۴ گیگابایت sdd2 موجود است؛
sde که کاملا موجود است.
#mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdcmdadm: 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/md0mke2fs 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-0Filesystem 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/sdemdadm: 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?ymdadm: 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/sdemdadm: 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/sdfmdadm: 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/sdemdadm: 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/sdb2Physical 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 ; donePhysical volume "/dev/sdc3" successfully created Physical volume "/dev/sdd" successfully created Physical volume "/dev/sdf1" successfully created Physical volume "/dev/sdf2" successfully created #pvdisplay -CPV 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 قرار میدهیم.
#vgdisplayNo volume groups found #vgcreate vg_critical /dev/sdb2 /dev/sdf1Volume 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/sdf2Volume group "vg_normal" successfully created #vgdisplay -CVG #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_criticalLogical 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_criticalLogical volume "lv_base" created #lvcreate -n lv_backups -L 12G vg_normalLogical volume "lv_backups" created #lvdisplay -CLV 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/mappertotal 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_criticaltotal 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_normaltotal 0 lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_backups -> ../dm-2
#mkfs.ext4 /dev/vg_normal/lv_backupsmke2fs 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/backupsFilesystem 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_filesLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_files vg_critical -wi-ao-- 5.00g #vgdisplay -C vg_criticalVG #PV #LV #SN Attr VSize VFree vg_critical 2 2 0 wz--n- 8.09g 2.09g #lvresize -L 7G vg_critical/lv_filesSize 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_filesLV 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_filesresize2fs 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_criticalVG #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/sdb1Physical volume "/dev/sdb1" successfully created #vgextend vg_critical /dev/sdb1Volume group "vg_critical" successfully extended #vgdisplay -C vg_criticalVG #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/sdaDisk /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/ میزبانی میکند میتواند به آرامی رشد کند.