使用者工具

網站工具


linux:lvm2

圖解LVM

本篇主要以實體Partition角度來表達LVM整體結構。為了方便說明,以下會用3個Partition,分別是40G、40G及20G容量已建立一個LV。

實體Partition與LVM

假設已經建立一個LVM,也儲存一些資料分別是A、B、C、D、E及F。以實體Partition及LVM兩者不同角度來看看儲存資料狀態。 由示意圖可以看出A,B,C,D,E,F六個不同資料分別儲存在不同的分割區,但由軟體所管理的LV則整合一個磁區儲存著6個不同資料。

實體Partition LVM

LVM建立演變過程

  1. 實體硬碟建立分割區
  2. 每個分割區格式化為8e(LVM專屬檔案格式);此過程稱為PV(Physical Volume)。
  3. 每個PV整合一個VG(Volume Group)。(其實VG可以看作一整個大硬碟)
  4. 再由VG分割成自訂容量大小的LV(Logical Volume)。(其實LV可以看作是分割區,只是這個分割區是由LVM所控制的)
由傳統硬碟分割方式演變成LVM過程

簡單範例1-從無到有建立LVM

為方便建立硬碟,以下範例都是以虛擬機來模擬。分別建立1G(/dev/sdb),500MB(/dev/sdc)硬碟整合1個VG,再VG上建立500MBLV。

以傳統分割Partition

分別建立/dev/sdb1及/dev/sdc1, 並改變系統ID為8e

#fdisk /dev/sdb
press n
press Enter
press Enter
Press t
Press 8e
#fdisk /dev/sdc
press n
press Enter
press Enter
Press t
Press 8e
#fdisk -cul
~略~
 Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63     2088449     1044193+  8e  Linux LVM
~略~
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              32     1048575      524272   8e  Linux LVM

建立PV(Physical Volume)

#pvcreate /dev/sdb1 /dev/sdc1

  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created

顯示PV Summary

#pvscan
  PV /dev/sdb1                      lvm2 [1019.72 MiB]
  PV /dev/sdc1                      lvm2 [511.98 MiB]
  Total: 2 [1.50 GiB] / in use: 0 [0   ] / in no VG: 2 [1.50 GiB]

/dev/sdb1 及 /dev/sdc1加入VG(Volume Group)

#vgcreate  VG1.5 /dev/sdb1 /dev/sdc1
  Volume group "VG1.5" successfully created

詳細顯示 名為VG1.5資訊

#vgdisplay VG1.5 
 --- Volume group ---
  VG Name               VG1.5
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               1.49 GiB  -->整個VG容量有 1.5GB
  PE Size               4.00 MiB -->每個PE佔4MB
  Total PE              381      -->VG共有381個PE
  Alloc PE / Size       0 / 0   -->目前未使用,表示還未切割LV(Logical Volume)
  Free  PE / Size       381 / 1.49 GiB   -->PE是lvm最小的儲存單位;其實他像是一般檔案系統的Block。目前381個PE 共約1.5GB
  VG UUID               0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu

在VG上建立LV(Logical Volume)

目前VG共約1.5GB。這邊先建立LV 容量為500MB

#lvcreate -L 500MB -n lvDisk VG1.5
  Logical volume "lvDisk" created

顯示VG詳細的用量

 --- Volume group ---
  VG Name               VG1.5
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               1.49 GiB
  PE Size               4.00 MiB
  Total PE              381
  Alloc PE / Size       125 / 500.00 MiB -->已分配125個PE;共500MB
  Free  PE / Size       256 / 1.00 GiB
  VG UUID               0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu

列出系統上所有的LV

#lvscan
  ACTIVE            '/dev/VG1.5/lvDisk' [500.00 MiB] inherit

詳細顯示/dev/VG1.5/lvDisk資訊

#lvdisplay /dev/VG1.5/lvDisk
  --- Logical volume ---
  LV Name                /dev/VG1.5/lvDisk
  VG Name                VG1.5
  LV UUID                TGwY7n-YcSA-GSjR-SXwX-eXFt-XoZX-Ng0Bfc
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

針對LV /dev/VG1.5/lvDisk進行建立檔案系統(Formate)

#mkfs -t ext4 /dev/VG1.5/lvDisk

掛載 /dev/VG1.5/lvDisk 到 /lvDisk(如圖,灰色區域是可以儲存資料部分)

#mkdir /lvDisk
#mount /dev/VG1.5/lvDisk /lvDisk

範例2-舊硬碟資料移除到新硬碟

目前lvm上,架構一個硬碟為/dev/sdc1(舊硬碟)。此範例的目標要將/dev/sdc1的資料全部移轉到/dev/sdb1。

顯示目前一些背景資料:

#fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes
~略~
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         130     1044193+  8e  Linux LVM
Disk /dev/sdc: 536 MB, 536870912 bytes
~略~
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         512      524272   8e  Linux LVM
#pvscan
  PV /dev/sdc1   VG VG1.5   lvm2 [508.00 MiB / 160.00 MiB free]  -->508-160=348MB;已有348MB被LV所使用
  Total: 1 [508.00 MiB] / in use: 1 [508.00 MiB] / in no VG: 0 [0   ]
#vgdisplay
  --- Volume group ---
  VG Name               VG1.5
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  31
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               508.00 MiB
  PE Size               4.00 MiB
  Total PE              127
  Alloc PE / Size       87 / 348.00 MiB
  Free  PE / Size       40 / 160.00 MiB
  VG UUID               0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
#lvscan
  ACTIVE            '/dev/VG1.5/lvDisk2' [348.00 MiB] inherit
  1. 由以上背景資訊(pvscan)判斷,新硬碟(/dev/sdb1)需要建立PV及加入VG1.5
    #pvcreate /dev/sdb1
    # vgextend VG1.5 /dev/sdb1
  2. 卸除/dev/VG1.5/lvDisk2
    #umount /dev/VG1.5/lvDisk2
  3. 開始將舊硬碟(/dev/sdc1)轉移到新硬碟(/dev/sdb1)
    #pvscan 
      PV /dev/sdc1   VG VG1.5   lvm2 [508.00 MiB / 160.00 MiB free]
      PV /dev/sdb1   VG VG1.5   lvm2 [1016.00 MiB / 1016.00 MiB free]
    #pvmove -v -i 2 /dev/sdc1 /dev/sdb1
    每2秒開始秀出一些訊息
    ~略~
      /dev/sdc1: Moved: 2.3%
      /dev/sdc1: Moved: 26.4%
      /dev/sdc1: Moved: 50.6%
      /dev/sdc1: Moved: 74.7%
      /dev/sdc1: Moved: 98.9%
      /dev/sdc1: Moved: 100.0%
    ~略~
    #pvscan
      PV /dev/sdc1   VG VG1.5   lvm2 [508.00 MiB / 508.00 MiB free] 
      PV /dev/sdb1   VG VG1.5   lvm2 [1016.00 MiB / 668.00 MiB free] -->已換到新硬碟上了
    #vgdisplay
      --- Volume group ---
      VG Name               VG1.5
    ~略~
      VG Size               1.49 GiB
      PE Size               4.00 MiB
      Total PE              381      -->總PE個數產生變化 
      Alloc PE / Size       87 / 348.00 MiB -->以經分配87個PE
      Free  PE / Size       294 / 1.15 GiB  -->還有294個PE未使用
      VG UUID               0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
  4. 舊硬碟卸除
    • 在VG1.5上退出舊硬碟(/dev/sdc1)
      #vgreduce VG1.5 /dev/sdc1
    • 在舊硬碟(/dev/sdc1)拿掉PV
      #pvremove /dev/sdc1
    • 顯示
      #pvscan
        PV /dev/sdb1   VG VG1.5   lvm2 [1016.00 MiB / 668.00 MiB free] -->已移除舊硬碟了
        Total: 1 [1016.00 MiB] / in use: 1 [1016.00 MiB] / in no VG: 0 [0   ]
          
  5. 測試掛載
    #mkdir lvDisk
    #mount /dev/VG1.5/lvDisk2 /lvmDisk/

範例3-增加容量

本範例3承接範例2環境情況。目前/dev/VG1.5/lvDisk2的容量為348MB,現在要增加500MB容量,使總容量為848MB。

 --- Logical volume ---
  LV Name                /dev/VG1.5/lvDisk2
  VG Name                VG1.5
  LV UUID                7as5jn-HPPS-5teW-2MqQ-NaD8-9R8f-gHt5hA
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                348.00 MiB
  Current LE             87
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
  1. 增加125PE到/dev/VG1.5/lvDisk2
    #lvextend -l +125 /dev/VG1.5/lvDisk2
  2. 格式化增加的區塊
    #resize2fs /dev/VG1.5/lvDisk2
  3. 顯示是否正確
    #df -h
    /dev/mapper/VG1.5-lvDisk2
                          823M   50M  731M   7% /lvmDisk

範例4-減少容量

現在有一個Logical Volum :lvtest容量為200MB,此範例目標減少到100MB。

  --- Logical volume ---
  LV Name                /dev/vgtest/lvtest
  VG Name                vgtest
  LV UUID                fM6ZTM-cQdj-wquV-T585-gHo6-dreJ-fRDqc2
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
#df -h
檔案系統              Size  Used Avail Use% 掛載點
~略~
/dev/mapper/vgtest-lvtest
                      194M   37M  147M  21% /media/test
# ls -l /media/test
總計 21
drwxr-xr-x. 112 root root  7168 2012-03-15 21:59 etc
drwx------.   2 root root 12288 2012-03-15 21:58 lost+found
  1. 卸載 /dev/mapper/vgtes-test
    #umount /media/test
  2. 磁碟檢查,以利於分散資料集中,才不會造成減少容量而損失原有的資料
    #fsck -f /dev/mapper/vgtest-lvtest
  3. 重新劃分檔案系統的容量為100MB
    #resize2fs /dev/mapper/vgtest-lvtest 100M
  4. 減少/dev/mapper/vgtest-test容量為100MB
    #lvreduce -L 100MB  /dev/mapper/vgtest-lvtest
    WARNING: Reducing active logical volume to 100.00 MiB
      THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce lvtest? [y/n]: y  Enter
    
      Reducing logical volume lvtest to 100.00 MiB
      Logical volume lvtest successfully resized
    
  5. 重新掛載
    #mount /dev/vgtest/lvtest /media/test/
    #ll /media/test/
    drwxr-xr-x. 112 root root  7168 2012-03-15 21:59 etc
    drwx------.   2 root root 12288 2012-03-15 21:58 lost+found
    
    #df -h
    檔案系統              Size  Used Avail Use% 掛載點
    ~略~
    /dev/mapper/vgtest-lvtest
                           97M   37M   55M  41% /media/test
    
    

參考資料

linux/lvm2.txt · 上一次變更: 2013/07/19 00:28 (外部編輯)