2009年3月27日 星期五

LVM 快速筆記

作者: Baron. Wan

在公司的 file server 需要添加硬碟之際, 查看了一下, 發現當初是用 LVM 的方式製作, 本來在一個單純增加硬碟的動作, 卻因為我許久沒接觸, 而且之前也是淺玩一下而已, 所以想說利用網站上提供的程序來執行, 沒有去判斷與現實的環境來做比較, 終至慘遭嚴重的後果!

原因是自己在添加新的硬碟的程序: pv --> vg --> lv --> resize2fs, 看似沒錯, 其實是大錯!!! 因為新的硬碟在產生 8e 的type (lvm) 之後, reboot後, 接下來應該先做 mke2fs -j 的動作, 而網站上大多在 lv 動作完成後才做 format 動作(由於我之前的硬碟內已有資料之故, 因而我做完 lv 動作之後, 緊接就做了 resize2fs...), 所以當我使用 resize2fs 來變更 lvm 容量大小時, 開始發生了錯誤, 以至於無法卸載, 在強制卸載之後, 資料就救不回來了 !! 儘管我後來採用 fsck.ext3 -b 32768 企圖來挽救 superblock 與 inode 等資料, 最終仍是回天乏力.

======================================
以下是 LVM 的正常程序:
@ 第一次建立
1. 用 fdisk 產生一個 type 為 8e (lvm) 的 partition, 假設為 sdb1
2. reboot 後, 執行: mke2fs -j /dev/sdb1 <-- 產生 ext3 的格式 3. pvcreate /dev/sdb1 <-- 引入一顆 lvm 的 partition ** 可用 pvscan 查看引入lvm資訊, 引入lvm的容量大小.
4. vgcreate -s 16M main /dev/sdb1 <-- 掛載 /dev/sdb1 並建立新的 lvm group "main". ** 可用 vgdisplay 查看掛載的容量, -s 是 PE值, 16M 最大可到 1TB 的掛載容量, 預設值是 4M (表示最大可到 256MB掛載容量).
5. lvcreate -L +160G -n home main <-- 建立一個大小為 160GB 的邏輯磁碟 home, 它屬於 main 的 lvm group 當中. ** -L 參數可加入的容量大小, 需要先用 vgdisplay 來查看 free 值 (可掛載空間).
** 兩顆以上(含兩顆) 掛載才需執行 (ex): resize2fs /dev/main/home

@ 添加硬碟容量, 假設新的磁碟分割為 sdc1
1. 先 fdisk 一個 partition 為 8e (lvm) 的 type.
2. reboot 後, 執行 ext3 格式化: mke2fs -j /dev/sdc1
3. ** 要導入 lvm 之前, 原 lvm 磁碟需先卸載 umount
4. 執行 : pvcreate /dev/sdc1 引入到 LVM
5. 執行: vgextend main /dev/sdc1 掛載
6. 先 vgdisplay 查看 free 還有多少空間 ( ex: 120.5GB )
7. 如要全部加入: lvextend -L +120.5G /dev/main/home
8. 此時需要做 resize 來修改邏輯 lvm 容量 : resize2fs /dev/main/home
9. mount 回去, 看一下容量: df -h , 容量已變更完成.

@ 卸載 LVM , 注意: 此動作等同用 fdisk delete 掉一個 partition 一樣嚴重. 請勿輕易嘗試.
1. 先 umount
2. lvremove /dev/main/home --> 會提示是否確定要 remove (y/n)
3. vgchange -a n main
4. vgremove main
5. pvremove /dev/sdc1
6. 卸載完成.
[注意] 如尚未 reboot, 修復回來的機率很高.

沒有留言: