這是這幾天作過簡單的實驗,實驗完畢馬上在正式環境完成的事,寫個文章作紀錄。
LVM (Logical Volume Manager) 不是新穎的技術,搭配 mdadm、iSCSI、DRBD 可以搞出不少花樣。
情境是 server 掛載 A 廠牌 storage server 的 iSCSI target 作為資料與程式的儲存點,而這些資料要搬移到 B 廠牌 storage server 的 iSCSI target;而這台 server 用 LVM 把 iSCSI target 製作成 PV (Physical Volume),並建立好 VG (Volume Group)與 LV (Logical Volume),掛載 LV 儲存資料。
變數說明:
- [portal_A] 是 A 廠牌 storage server 的 iSCSI portal,[target_A] 為其 target name
- [portal_B] 是 B 廠牌 storage server 的 iSCSI portal,[target_B] 為其 target name
- /dev/sda 是 A 廠牌 storage server 的 iSCSI target 掛載後的 device
- /dev/sdb 是 B 廠牌 storage server 的 iSCSI target 掛載後的 device
- server 建立並使用的 VG 名稱為 VolGroup,LV 名稱、數量都不重要
步驟如下:
- 先確認現存的 iSCSI session 與 iSCSI node,確認後把 B 廠牌 storage server 的 iSCSI target 掛進 server;使用的指令如下:
- 檢查
# iscsiadm -m session # iscsiadm -m node
- 探索 & 掛載 iSCSI target (掛載後可再檢查看看,並確認 /dev/sdb 有出現)
# iscsiadm -m discovery -t st -p [portal_B] # iscsiadm -m node -T [target_B] -p [portal_B] --login
- 檢查
- 建立 PV,前、後可以用 pvdisplay 指令觀察
# pvcreate /dev/sdb
- 把新建的 PV 放進 VG,前、後可以用 vgdisplay 指令觀察
# vgextend VolGroup /dev/sdb
- 搬移資料,前、後可以用 vgdisplay 指令觀察(這段時間比我預期的還要長,可搭配 -i 這個參數調整搬移進度回報的間隔時間)
# pvmove /dev/sda /dev/sdb
- 搬完之後,從 VG 退出原本的 PV,前、後可以用 vgdisplay 指令觀察
# vgreduce VolGroup /dev/sda
- 移除原本的 PV,避免 LVM 偵測到並自動掛載,前、後可以用 pvdisplay 指令觀察
# pvremove /dev/sda
- 確認現存的 iSCSI session 與 iSCSI node,登出並刪除 A 廠牌 storage server 的 iSCSI target;檢查的的指令如第一步,登出與刪除的指令如下:
# iscsiadm -m node -T [target_A] -p [portal_A] --logout # iscsiadm -m node -T [target_A] -p [portal_A] -o delete
收工。
一旦 iSCSI node 確認是乾淨的,目前的 /dev/sdb 在重新開機後會成為 /dev/sda,且 LVM 會辨識出這個 PV,並放進 VG;而這整段流程毋需對 LV 作 umount & mount,服務也毋需暫停/中斷(LVM 的 device mapper 會幫我們顧好…