mdadm做soft raid的試驗

CentOS5.1 mdadm 及 LVM 的試驗
網友:fengshihua 發佈於: 2008.04.16 10:41 (共有條評論) 查看評論 | 我要評論
 
有這樣一個需求:爲內部網絡的 PC 提供共享存儲、備份,沒有太強的讀寫壓力,資金投入也有限,但需要夠安全,而且爲逐漸增長的數據量考慮,需要擴容方便。
於是,打算通過 mdadm 和 LVM 來實現。用這樣的硬件:內部空間夠大,電源夠強勁,扇熱要好,支持多個 SATA 接口的塔式機。
爲了不浪費空間,用一塊小硬盤裝系統,比如一塊 20G 的 IDE 硬盤。3塊別的老 PC 上拆下來 80G SATA 硬盤。
在 VMware 上模擬了一下。因爲需要模擬 SATA 硬盤,建立虛擬機時用了 SCSI 硬盤。要選擇 RedHat Enterprise 版才能支持 SCSI 硬盤。
使用 VMware-gsx-server-3.2.1 發現在較大的(試驗了 160G/250G)虛擬硬盤上的 RAID5 recovery 到尾聲時會死機,重啓後又要從頭再來,但依然會死機,周而復始。換成 VMware-server-1.0.3 後就沒有問題了。
在 hda 安裝了 CentOS 5.1 ,最小化安裝。安裝過程沒有對 sda, sdb, sdc 進行分區。
用 mdadm 創建 RAID
# mdadm -C /dev/md0 -l5 -n3 -c128 /dev/sd[a,b,c]
參數所代表的意思可以用 man mdadm 查看。
基本命令
# mdadm -A /dev/md0 #啓動陣列
# mdadm -S /dev/md0 #停止陣列(停止前必須先 umount)
# mdadm -D /dev/md0 #顯示陣列詳細信息
# watch "cat /proc/mdstat"
可以看到 RAID 的 recovery 過程。
此時 RAID 已經可以使用了。
LVM 初始化
# vgscan
創建 PV
# pvcreate /dev/md0
創建 VG
# vgcreate vga /dev/md0
創建 LV
# lvcreate -l 40959 -n lv1 vga
在 LV 上建立文件系統
# mkfs -t ext3 -L /data /dev/vga/lv1
掛載
# mkdir /data
# mount -t ext3 -o defaults /dev/vga/lv1 /data
測試
# cd /data
# dd if=/dev/zero of=test bs=1024k count=1k
# dd if=test of=/dev/null
recovery 結束後,生成 /etc/mdadm.conf 文件,在系統重啓後自動啓用 RAID
# mdadm -Ds > /etc/mdadm.conf
編輯 /etc/mdadm.conf 文件,在頂部加入如下一行:
DEVICE /dev/sd*
在 /etc/fstab 尾部加入一行
LABEL=/data /data ext3 defaults 0 0
重啓後自動掛載。
接着,模擬這樣一種狀況:爲了擴容,要給 RAID 加入一塊硬盤。
關機,給 VM 添加一塊 80G 的 SCSI 硬盤後啓動。
給 RAID 添加硬盤
# mdadm /dev/md0 -a /dev/sdd
此時,新添加的硬盤會被作爲 spare
把 RAID 設備設置爲4個,使用新硬盤
# mdadm -G /dev/md0 -n4
擴充 PV
# pvresize /dev/md0
擴充 LV
# lvextend -l +20480 /dev/vga/lv1
擴大文件系統大小
# resize2fs /dev/vga/lv1
此命令可在 mount 時操作。並且同時 dd 模擬寫入和讀取文件,除了速度變慢,沒有發現異常。
再來模擬這樣一種情況:空間又被用完了,需要更大的存儲空間,再找來3塊 160G 的硬盤擴容。爲了安全,還是把這三塊硬盤組成 RAID5 。
關機,給 VM 添加三塊 160G 的 SCSI 硬盤後啓動。
CentOS5(RHEL5) 使用了 udev 來管理系統設備文件名,/dev 目錄下只有 md0,需要手動建立 RAID 設備。
# mknod /dev/md1 b 9 1
# chown root:disk /dev/md1
# chmod 640 /dev/md1
爲了在重啓後能自動創建 md1 ,還需如下設置
# mkdir /etc/udev/devices
# cp -a /dev/md1 /etc/udev/devices/
建立 RAID
# mdadm -C /dev/md1 -l5 -n3 -c128 /dev/sd[e,f,g]
創建 PV
# pvcreate /dev/md1
擴充 VG
# vgextend vga /dev/md1
擴充 LV
# lvextend -l +81919 /dev/vga/lv1
擴充分區大小:
# resize2fs /dev/vga/lv1
此間,繼續使用 dd 模擬讀寫,沒有問題。
把第二個 RAID 的配置也寫入配置文件
# mdadm -Ds | grep md1 >> /etc/mdadm.conf
模擬設備損壞的情況
將 /dev/sdb 標記爲已損壞的設備
# mdadm /dev/md0 -f /dev/sdb
移除損壞的設備
# mdadm /dev/md0 -r /dev/sdb
此時可用 dd 模擬讀寫。
更換設備並重新添加到 RAID 中
# mdadm /dev/md0 -a /dev/sdb
會重新 recovery ,同樣,可以 dd 模擬下讀寫。
如果發現缺失某個設備後 RAID 不能啓動,可以使用剩餘設備啓動 RAID
# mdadm -A --run /dev/md1 /dev/sde /dev/sdf
此後又再給 md1 添加了一塊硬盤 sdh 進行相應測試,還是正常的。
特殊情況,去掉一個 PV
# umount /data
# resize2fs -f /dev/vga/lv1 240G
# lvreduce -l -81919 /dev/vga/lv1
# vgreduce vga /dev/md1
不建議在生產系統上減小 LV
這本來是想用來試驗大 PV 替換小 PV 的,但爲了安全,還是把老 LV 的數據複製到新的 LV 後再做打算。
有了更大的硬盤(250G*4, VMware 只能創建小於 256G 的虛擬硬盤)用來擴容,爲了留出機箱空間並降低電力消耗,需要把老硬盤上的數據轉移到新硬盤。
先用新硬盤組成的 RAID5
# mknod /dev/md2 b 9 2
# chown root:disk /dev/md2
# chmod 640 /dev/md2
# cp -a /dev/md2 /etc/udev/devices/
# mdadm -C /dev/md2 -l5 -n4 -c128 /dev/sd[i,j,k,l]
# mdadm -Ds | grep md2 >> /etc/mdadm.conf
依然使用 LVM
# pvcreate /dev/md2
# vgcreate vg0 /dev/md2
# lvcreate -l 191999 -n lv1 vg0
# mkfs -t ext3 /dev/vg0/lv1
把 /dev/vg0/lv1 掛載上後便可以複製數據了,cp, rsync 都行。
當有大量小文件時,用 dd 複製,並把塊設置的大些,速度會非常快。
爲保證數據同步,先卸載
# umount /data
然後複製
# dd if=/dev/vga/lv1 of=/dev/vg0/lv1 bs=16MB
用 dd 複製還可以跳過 mkfs 的過程。
在 VMware 中,就算沒有使用預分配空間的磁盤模式,也會進行完全複製填滿磁盤空間。可以在複製開始一會兒後就結束 dd 進程,節約空間和時間。
掛載,檢查一下數據完整性
# mount -t ext3 -o defaults /dev/vg0/lv1 /mnt
用 dd 複製會把新的 LV 容量變成和老的一樣大,需要調整容量
# resize2fs /dev/vg0/lv1
沒有問題的話,就修改 LV 卷標,以便系統重啓後能掛載新的 LV
# e2label /dev/vga/lv1 /backup
# e2label /dev/vg0/lv1 /data
如果要把老的 LV 轉移到另外的機器上,需要備份 LVM 卷組信息以及 mdadm 的配置
先查看一下 /etc/lvm/backup/vga 是否存在,沒有的話就創建備份
# vgcfgbackup
把 /etc/lvm/backup/vga 和 /etc/mdadm.conf 備份到遠程主機上。
這還可以用於恢復存儲服務器操作系統崩潰而導致的 LVM 不可用。比如 hda 損壞了。
重裝系統時,千萬不要對 sd* 進行操作—重建分區表,這會導致 LVM 信息的丟失。
在真實設備上操作時,爲了安全,可以先安裝完系統再給硬盤通電。
先恢復 RAID
把 mdadm.conf 恢復到新系統的 /etc 目錄下,啓動 RAID
# mdadm -A /dev/md0
# mdadm -A /dev/md1
再恢復 LVM
# vgcfgrestore -f vga vga
第一個 vga 是備份的文件名,第二個是要還原的 Volume Group Name 。如果 vga 這個卷組名被佔用了,需要重命名。
# vgscan
# pvscan
然後啓動 VG
# vgchange -a y vga
再掃描 LV
# lvscan
恢復完成,可以掛載並使用了。
至此,VMware 試驗完成,可在真實硬件設備上試驗了。
                
發佈了36 篇原創文章 · 獲贊 24 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章