2020年5月3日 星期日

LVM 新手必備指令集

Linux 上的 Logical Volume Manager 是幹嘛用的呢? 如果說 把一顆硬碟切成好幾個分割 就像是把一棟房子用水泥牆隔成好幾個房間, 那麼把一塊空間 (可以是一個分割區、 一整顆硬碟或好幾顆硬碟) 切成好幾個 logical volume 就像是在一棟房子裡用屏風隔成好幾個房間。 水泥牆隔間 (傳統的切割方式) 彈性很小, 如果刪除了兩個不相鄰小分割, 那麼即使釋出的總空間足夠, 也無法建立一個新的大分割。 屏風隔間 (LVM 的切割方式) 彈性很大, 使用者不需要擔心每個分割區的位置, 只需要關心剩餘總空間夠不夠用。

以下是新手最需要知道的常用指令:

vgcreate gaia /dev/sdz99
    vgchange -ay gaia # 插入隨身碟後
        lvcreate -L 2G -n taiwan gaia
            mkfs -t ext4 /dev/mapper/gaia-taiwan
                mount /dev/mapper/gaia-taiwan /mnt/t1
                umount /dev/mapper/gaia-taiwan
            # wipefs -a /dev/mapper/gaia-taiwan
        lvremove gaia/taiwan
    vgchange -an gaia # 拔出隨身碟前
vgremove gaia
  1. 你需要先建一個 volume group, 這就是上述比喻中的整棟房子。 vgcreate 之後的名字可自取; 再後面放 (可以不只一個) 傳統分割區的名字, 也就是這個 VG 所使用的 pyhisical volumes , 它要使用的地基/空間。
  2. 如果你的 VG 建立在一顆隨身碟上, 那麼每當插入隨身碟後, 必須先用 vgchange -ay ... 通知電腦你打算使用這個 VG。 (如果你才剛建立, 那它當然就自動啟用了, 所以此時這步可省略)
  3. 用 lvcreate 建立一個 logical volume 。 這步驟相當於比喻當中的 「擺屏風隔出一個新房間」, 也相當於傳統分割方式 「在 fdisk 裡面建一個新的分割」。
  4. 再來就是熟悉的格式化/建立新的檔案系統 (mkfs) 。 注意裝置名稱的命名方式。
  5. 掛載、 開始使用
  6. 用完後卸載
  7. 若想清除一個 LV (或任何一個傳統分割區) 上面的檔案系統, 可用 wipefs 。 不清也沒關係, 只是下次要在上面建立新的檔案系統時, 可能會被詢問幾次而已。
  8. 若想刪除一個 LV, 則用 lvremove (拆除某房間的屏風)。 對應到傳統分割方式的 「在 fdisk 裡面刪除一個分割」。
  9. 一顆隨身碟上若含有 lvm, 要移除之前, 除了必須先卸載所有的 LV 之外, 還要再 vgchange -an ... (有點類似 "卸載" 整個 VG 的意思), 然後才能拔出來。
  10. 若要刪除整個 VG, 就用 vgremove 。

我自己初學 lvm 的時候, 最意外的是 vgchange -an ... 因為在隨身碟上建立 VG 時, 並不需要下 vgchange -ay ... 就可以直接往下做 lvcreate ... 。 花了一些力氣才學到 vgchange 這個指令。 總之, 在隨身碟上建立 lvm, 使用時需要兩層的 「掛載」 跟兩層的 「卸載」。

除了上述指令, 我最常用的是:

  1. lvs : 查看有哪些 LV 可用
  2. vgs : 查看每個 VG 剩下多少空間可用
  3. lvrename gaia taiwan formosa : 把 gaia 裡面的 taiwan 改名為 formosa
  4. lvresize -L 3G gaia/formosa ; resize2fs /dev/mapper/gaia-formosa : 把 formosa 的容量擴增到 3G 。 第一句話是在移動屏風的位置, 讓房間變大; 第二句話是在重新擺設擴大以後的房間, 讓它用到完整的新空間。

更完整的 LVM 介紹, 請見 林彥明 鳥哥 的文章。

現在我的硬碟多半切成四個 primary partitions, 其中三個是 20G 的 ext4, 方便安裝 extlinux 開機管理員, 剩下空間全留給第四個 lvm 分割區。

1 則留言:

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。