檔案系統管理(六)

RAID 磁碟陣列管理

Red Hat 的 raid 支援了幾種類型:
raid 0 (Striping):將兩個或多個磁碟串成單一個磁碟分割,其大小是所有磁碟的和,raid 0 的效能會比單一磁碟機好,可是當組成磁碟陣列的其中一個磁碟故障時,整個 raid 0 就報廢了。
raid 1 (Mirroring):將兩個磁碟並聯起來,組合成 raid 1,其大小是和磁碟中較小的那一個一樣,兩個磁碟的內容是一樣的,這是一種冗餘 (redundancy) 和保護資料的作法,但磁碟寫入的速度會比單一磁碟機稍慢,如果其中一個磁碟機故障,另一個還保存完整的資料。


raid 5:將三個或多個磁碟組成 raid 5,其中一個是用來作資料同位元檢查,它可增加磁碟的讀寫表現,又可以保有資料保全的能力,它可容忍一個磁碟故障但資料還能保存。
raid 6:和 raid 5 相似,可是又多了一份資料同位元檢查,所以增加了容錯能力,它可以容忍兩個磁碟同時故障但是依然保有資料的完整性。

通常 raid 裝置的代號是 /dev/md0、/dev/md1、/dev/md2 ……,我們可以使用 mdadm 的指令來建立和管理 raid 磁碟:
# parted  /dev/sdb  print (先將磁碟分割切好,切好後來看一看各磁碟分割)
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type        File system  旗標
1      32.3kB  107MB   107MB   主分割區
2      107MB   214MB   107MB   主分割區
3      214MB   321MB   107MB   主分割區
4      321MB   10.7GB  10.4GB  擴充分割區
5      321MB   421MB   100MB   邏輯分割區
6      421MB   521MB   100MB   邏輯分割區
7      521MB   621MB   100MB   邏輯分割區
8      621MB   721MB   100MB   邏輯分割區
9      721MB   821MB   100MB   邏輯分割區
10      821MB   1000MB  179MB   邏輯分割區
資訊: 如果必要,不要忘記更新 /etc/fstab。

將要設定成 raid 的磁碟指定旗標 (tag) 成 raid:
#parted  /dev/sdb  set  5  raid  on (數字 5 是磁碟分割區的編號,同樣的動作,不同磁碟編號,將要製作成 raid 的磁碟都設成 raid)
資訊: 如果必要,不要忘記更新 /etc/fstab。

全部設好之後再看看:
# parted  /dev/sdb  print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type        File system  旗標
1      32.3kB  107MB   107MB   主分割區
2      107MB   214MB   107MB   主分割區
3      214MB   321MB   107MB   主分割區
4      321MB   10.7GB  10.4GB  擴充分割區
5      321MB   421MB   100MB   邏輯分割區               raid
6      421MB   521MB   100MB   邏輯分割區               raid
7      521MB   621MB   100MB   邏輯分割區               raid
8      621MB   721MB   100MB   邏輯分割區               raid
9      721MB   821MB   100MB   邏輯分割區               raid

10      821MB   1000MB  179MB   邏輯分割區               raid
資訊: 如果必要,不要忘記更新 /etc/fstab。

==============================

建立 raid 磁碟

開始建立 raid 磁碟陣列:
# mdadm  -C  /dev/md0  -a  yes  -l  1  -n  2  /dev/sdb5  /dev/sdb6
mdadm: array /dev/md0 started.
參數說明:
-C:建立磁碟陣列,後面帶磁碟陣列的裝置代號,如 /dev/md0
-a yes:/dev/md0 不見得存在,此參數要求如果 /dev/md0 不存在則建立一個 /dev/md0
-l:和 –level=n 一樣,是指建立的磁碟陣列的等級,-l  1 是指建立 raid 1
-n 2:和 –raid-device=n 一樣,是指要加入陣列的磁碟數量,最後面帶要加入陣列的磁碟代號

將磁碟陣列製作成 ext3 的檔案系統:
# mke2fs  -j  /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
24384 inodes, 97536 blocks
4876 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
12 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

檢查 /dev/md0 磁碟陣列的內容:
# mdadm  –detail  /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sat Apr  4 23:27:19 2009
Raid Level : raid1
(磁碟陣列的等級)
Array Size : 97536 (95.27 MiB 99.88 MB)
Device Size : 97536 (95.27 MiB 99.88 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Apr  4 23:27:53 2009
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : 470840fd:2bd76018:941662be:28d5ae31
Events : 0.2
Number   Major   Minor   RaidDevice State    (
碟陣列的成員內容)
0       8       21        0      active sync   /dev/sdb5
1       8       22        1      active sync   /dev/sdb6

掛載起來:
# mkdir /mnt/md0 (建立一個掛載點)
# mount /dev/md0 /mnt/md0 (掛載起來)
# df -h (查看一下)
檔案系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G  5.8G   11G  35% /
/dev/sda1              99M   22M   72M  24% /boot
tmpfs                 506M     0  506M   0% /dev/shm
/dev/md0               93M  5.6M   82M   7% /mnt/md0
(已經掛載起來)

設定在 /etc/fstab:
# echo “/dev/md0  /mnt/md0  ext3  defaults  1  2” >> /etc/fstab (在 /etc/fstab 中補上這一行)
# umount -a (先卸載所有的檔案系統)
umount: /var/lib/nfs/rpc_pipefs: device is busy
umount: /: device is busy

# mount -a (將之全部掛載起來)
# df -h (檢查一下)
檔案系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G  5.8G   11G  35% /
/dev/sda1              99M   22M   72M  24% /boot
tmpfs                 506M     0  506M   0% /dev/shm
/dev/md0               93M  5.6M   82M   7% /mnt/md0
(已經掛載起來)

==============================

RAID 磁碟故障維護

當 /dev/md0 有成員磁碟故障時,先用 -f 參數將該磁碟分割標記成損壞磁碟,再用 -r 參數將之移除,最後用 -a 增加新的磁碟進來:
# cat /proc/mdstat (先看看原始內容)
Personalities : [raid1]
md0 : active raid1 sdb6[1] sdb5[0]
97536 blocks [2/2] [UU]
unused devices: <none>

# mdadm /dev/md0 -f /dev/sdb6 (標記 /dev/sdb6 為損壞磁碟)
mdadm: set /dev/sdb6 faulty in /dev/md0
# mdadm –detail /dev/md0 (檢查一下 /dev/md0 的內容)
/dev/md0:
Version : 00.90.03
Creation Time : Sat Apr  4 23:27:19 2009
Raid Level : raid1
Array Size : 97536 (95.27 MiB 99.88 MB)
Device Size : 97536 (95.27 MiB 99.88 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun Apr  5 00:20:10 2009
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
UUID : 470840fd:2bd76018:941662be:28d5ae31
Events : 0.4
Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       0        0        1      removed
2       8       22        –      faulty spare   /dev/sdb6

# cat /proc/mdstat (檢查一下 /dev/md0 的內容)
Personalities : [raid1]
md0 : active raid1 sdb6[2](F) sdb5[0]
97536 blocks [2/1] [U_]
unused devices: <none>

# mdadm /dev/md0 -r /dev/sdb6 (將 /dev/sdb6 從 /dev/md0 移除)
mdadm: hot removed /dev/sdb6
# mdadm –detail /dev/md0 (檢查一下 /dev/md0 的內容)
/dev/md0:
Version : 00.90.03
Creation Time : Sat Apr  4 23:27:19 2009
Raid Level : raid1
Array Size : 97536 (95.27 MiB 99.88 MB)
Device Size : 97536 (95.27 MiB 99.88 MB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun Apr  5 00:20:52 2009
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0

Spare Devices : 0
UUID : 470840fd:2bd76018:941662be:28d5ae31
Events : 0.6
Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       0        0        1      removed

# cat /proc/mdstat (檢查一下 /dev/md0 的內容)
Personalities : [raid1]
md0 : active raid1 sdb5[0]
97536 blocks [2/1] [U_]
unused devices: <none>

# mdadm /dev/md0 -a /dev/sdb7 (將 /dev/sdb7 新增到 /dev/md0 裡)
mdadm: added /dev/sdb7
# mdadm –detail /dev/md0 (檢查一下 /dev/md0 的內容)
/dev/md0:
Version : 00.90.03
Creation Time : Sat Apr  4 23:27:19 2009
Raid Level : raid1
Array Size : 97536 (95.27 MiB 99.88 MB)
Device Size : 97536 (95.27 MiB 99.88 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun Apr  5 00:21:18 2009
State : clean
Active Devices : 2
Working Devices : 2

Failed Devices : 0
Spare Devices : 0
UUID : 470840fd:2bd76018:941662be:28d5ae31
Events : 0.8
Number   Major   Minor   RaidDevice State
0       8       21        0      active sync   /dev/sdb5
1       8       23        1      active sync   /dev/sdb7

# cat /proc/mdstat (檢查一下 /dev/md0 的內容)
Personalities : [raid1]
md0 : active raid1 sdb7[1] sdb5[0]
97536 blocks [2/2] [UU]
unused devices: <none>

測試一下:
# touch /mnt/md0/test
# ls /mnt/md0/
lost+found  test
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb7[1] sdb5[0]
97536 blocks [2/2] [UU]
unused devices: <none>

==============================

移除 RAID 磁碟陣列

要移除 raid 磁碟陣列步驟如下:
# umount  /mnt/md0 (先將之卸載)
# mdadm  -S  /dev/md0 (停止 /dev/md0)
mdadm: stopped /dev/md0
# cat /proc/mdstat (檢查一下 /dev/md0 的內容)
Personalities : [raid1]
unused devices: <none>

# mdadm –detail /dev/md0 (檢查一下 /dev/md0 的內容)
mdadm: md device /dev/md0 does not appear to be active.