LVM 的 PV 資料移轉

這是這幾天作過簡單的實驗,實驗完畢馬上在正式環境完成的事,寫個文章作紀錄。

LVM (Logical Volume Manager) 不是新穎的技術,搭配 mdadmiSCSIDRBD 可以搞出不少花樣。

情境是 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 名稱、數量都不重要

步驟如下:

  1. 先確認現存的 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
      
  2. 建立 PV,前、後可以用 pvdisplay 指令觀察
    # pvcreate /dev/sdb
  3. 把新建的 PV 放進 VG,前、後可以用 vgdisplay 指令觀察
    # vgextend VolGroup /dev/sdb
  4. 搬移資料,前、後可以用 vgdisplay 指令觀察(這段時間比我預期的還要長,可搭配 -i 這個參數調整搬移進度回報的間隔時間)
    # pvmove /dev/sda /dev/sdb
  5. 搬完之後,從 VG 退出原本的 PV,前、後可以用 vgdisplay 指令觀察
    # vgreduce VolGroup /dev/sda
  6. 移除原本的 PV,避免 LVM 偵測到並自動掛載,前、後可以用 pvdisplay 指令觀察
    # pvremove /dev/sda
  7. 確認現存的 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 會幫我們顧好… XD )。