LVM管理 - PV,VG以及LV

一、LVM介紹

          LVMLogical Volume Manager,即邏輯卷管理,是在磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的存儲卷,在存儲捲上建立文件系統,以便實現對文件系統的大小靈活調整。

          試想有這樣一個場景:home目錄獨立分區,剛開始只有一個用戶使用,後來增加了10個用戶,home目錄空間不夠用了。

有沒有什麼方法可以根據實際需要分配和控制分區大小,即隨着數據的增長,當現有分區空間不夠用時,可以調大分區空間;

當分區在初始分配時分配過大,過一段時間後,還可以隨意縮減分區大小。這只是LVM的功能之一,LVM還可以實現快照功能,對數據進行增量備份,即對修改前的原數據進行備份,這樣可以減少快照佔用空間的大小。

 

二、PVVGLVPE相關概念

  •      PVPhysicalVolume),物理卷

  •      VGVolume Group),卷組

  •      LVLogical Volume),邏輯卷

  •      PEPhysical Extend),物理擴展塊

 

       LVM的實現是通過將幾個分區(或磁盤)調整System ID 8e,然後通過pvcreate命令轉換成LVM最底層的物理卷PV

再將多個PV整合成一塊看起來是獨立的大磁盤,即卷組(VG);再將卷組分成一個或多個可使用的分區(LV),將LV格式化創建文件系統,掛載後就能正常使用了。PELVM最小的存儲塊,類似於文件系統裏的blockVGLV的大小與PE有關,分區縮減或增加容量可以通過調整PE來實現。

 

三、創建PVVG以及LV

該實驗對LVM的創建刪除擴展縮減快照等功能進行操作,以下實驗在虛擬環境VMWare上進

行,系統爲Centos 6.6 64位,在虛擬機上對新添加的硬盤/dev/sdb進行操作。實驗步驟如下:


1、創建LVM標識符分區

利用fdisk/dev/sdb進行分區,並指定System ID8eLinux LVM),具體的分區操作見上篇博文。

[root@localhost ~]# fdisk /dev/sdb          # 新建磁盤分區,見如下。
[root@localhost ~]# partx -a /dev/sdb    # 通知內核重新識別新建分區
[root@localhost ~]# fdisk -l /dev/sdb    # 查看/dev/sdb磁盤的分區信息
 
Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9d1b8246
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  8e  Linux LVM
/dev/sdb2            1307        2612    10490445   8e  Linux LVM
/dev/sdb3            2613        4571    15735667+  8e  Linux  LVM

 

2、創建PV

  pv管理命令:

  • pvs:簡要pv信息顯示

  • pvdisplay:顯示pv的詳細信息

  • pvscan查詢當前系統含有PV的磁盤

  • pvremove:移除一個物理卷

    • 命令格式:pvmove  PhysicalDevicePath [PhysicalDevicePath...]

  • pvmove:移動物理卷數據

    • 命令格式:pvmove  [-n       LogicalVolume][SourcePhysicalVol-ume[:PE[-PE]...]       [DestinationPhysicalVolume[:PE[-PE]...]...]]

  • pvcreate: 創建pv

    • 命令格式:pvcreate  PhysicalDevicePath [PhysicalDevicePath...]

 

[root@localhost ~]# pvcreate /dev/sdb{1,2}     # 將/dev/sdb1和/dev/sdb2整合創建成一個PV
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvdisplay            # 顯示PV的詳細信息
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name              
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0  
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               AznT7f-2ybU-MF4P-xkoM-F4tX-eonQ-fMjA74
 
  "/dev/sdb2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name              
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0  
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               yVmQtU-UNue-i8o6-nQwc-PYFR-vvvL-UOD4w9

 

         創建PV非常簡單,只需要pvcreate命令和創建PV的分區對象就可以了。從上面PV的信息中可以看出,PV在創建VG PE等相關信息爲空,要想利用到PV的空間,那麼下一步就要創建VG 和指定PE大小。

 

3、創建VG

  vg管理命令:

  • vgs簡要VG信息顯示

  • vgdisplay:詳細的VG信息顯示

  • vgcreate:創建VG

    • 命令格式:vgcreate[-s       #[kKmMgGtTpPeE]] VolumeGroupName        PhysicalDevicePath [PhysicalDevicePath...]

    • 選項:-s:指定VG大小,單位爲kKmMgGtTpPeE(字節,兆,千兆...

  • vgextend:擴展VG

    • 命令格式:vgextend  VolumeGroupName  PhysicalDevicePath       [PhysicalDevicePath...]

  • vgreduce:縮減VG

    • 命令格式:vgreduceVolumeGroupName  PhysicalDevicePath       [PhysicalDevicePath...]

    • 減少或移除pv,爲了避免數據損壞,需要先做pvmove

  • vgremove:移除一個卷組

 

如下:將PV /dev/sdb1/dev/sdb2創建成名爲testvgVGPE大小指定爲16M

[root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2}     Volume group "testvg" successfully created
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               testvg
  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               20.00 GiB
  PE Size               16.00 MiB
  Total PE              1280
  Alloc PE / Size       0 / 0  
  Free  PE / Size       1280 / 20.00 GiB
  VG UUID               hBmQdf-Z2hW-1UOM-xJ5n-yvrp-yX0d-8DrIof


 4、創建LV

    LV管理命令:

  • lvs:簡要顯示LV信息

  • lvscan:查詢當前系統具有LV的分區

  • lvceate:創建LV

    • 命令格式:lvcreate -L #[mMgGtT] -n       NAME  LogicalVolume{Name|Path}

    • 選項:-L:指定LV大小   

 -n:指定LV名稱

  • lvreduce:縮減LV

    • 命令格式:lvreduce -L [-]#[mMgGtT] LogicalVolume{Name|Path}

    • 選項:-L:指定LV大小-表示縮減多少,不加-表示縮減至多少

  • lvextend:擴展LV

  • lvremove:移除一個LV

 

如下:創建大小爲5G,名稱爲testlvPV

[root@localhost ~]# lvcreate  -L 5G -n testlv /dev/testvg   

[root@localhost ~]# lvdisplay /dev/testvg/testlv
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                icxsNx-y53V-81KM-Iqp3-1PFZ-U0d6-1E22dL
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-08-15 02:50:24 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

 

  • 創建文件系統並掛載使用        

[root@localhost ~]# mke2fs -t ext4 /dev/testvg/testlv  # testlv的文件系統創建爲ext4
[root@localhost ~]# mkdir /users
[root@localhost ~]# mount /dev/testvg/testlv /users      #將testlv掛載至/users目錄
[root@localhost ~]# ls /users
lost+found      # 新增lost+found目錄表示掛載成功


四、擴展PEVGLV

1、擴展PV步驟如下:

只需用fdisk /dev/sdb命令將指定分區的System ID指定爲 8e (Linux LVM),再用pvcreate 命令將該

分區轉換爲PV,即可使用。
[root@localhost ~]# pvcreate /dev/sdb3

 

2、擴展VG步驟如下:

  • pvscanpvdisplay      命令查看PV剩餘空間是否滿足擴展需求,若不滿足則需擴展PV

[root@localhost ~]# pvscan
  PV /dev/sdb1   VG testvg   lvm2 [10.00 GiB / 7.00 GiB free]
  PV /dev/sdb2   VG testvg   lvm2 [10.00 GiB / 10.00 GiB free]
  PV /dev/sdb3               lvm2 [15.01 GiB]
  Total: 3 [35.01 GiB] / in use: 2 [20.00 GiB] / in no VG: 1 [15.01 GiB]
  • vgextend      命令增加VG

[root@localhost ~]# vgextend testvg /dev/sdb3
  Volume group "testvg" successfully extended

 

3擴展LV步驟如下:

  • vgdisplay查看VGPE剩餘大小,確保有足夠的剩餘空間供擴展

[root@localhost ~]# vgdisplay /dev/testvg  # 查看testvg PE剩餘大小,對應項爲Free PE/Size
  • lvextend命令擴展物理邊界

[root@localhost ~]# lvextend -L 7G /dev/testvg/testlv          
  Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
  Logical volume testlv successfully resized
  • resize2fs      擴展邏輯邊界

[root@localhost ~]# resize2fs /dev/testvg/testlv
  • 查看是否擴展成功

[root@localhost ~]# lvdisplay /dev/testvg/testlv | grep "LV Size"
   LV Size                7.00 GiB             # 物理邊界擴展成功
[root@localhost ~]# df -hP | awk '/testlv/{print $2}'                 
7.00G                  # 邏輯邊界擴展成功


五、縮減邏輯卷(LV)

縮減邏輯卷不支持在線縮減,需要umount LV,在縮減前要確保有足夠的空餘空間供縮

減,要保障正常的數據不受影響,步驟如下:


1、先用vsdisplay查看剩餘的空間,確保有足夠的空間供縮減

[root@localhost ~]# lvdisplay /dev/testvg/testlv

2、卸載LV

[root@localhost ~]# umount /dev/testvg/testlv

3、縮減前需要強制檢查文件系統,沒有報告錯誤可繼續下面步驟

[root@localhost ~]# e2fsck -f /dev/testvg/testlv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/testvg/testlv: 40/327680 files (0.0% non-contiguous), 55927/1310720 blocks

4、用 resize2fs 命令縮減到3G

[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 786432 blocks long.

5、重新掛載並查看大小調整是否成功

[root@localhost ~]# mount /dev/testvg/testlv /users
[root@localhost ~]# df -hP | awk '/testlv/{print $2}'  
   2.9G
[root@localhost ~]# lvdisplay /dev/testvg/testlv | grep "LV Size"
  LV Size                3.00 GiB

6、查看調整前後文件是否有減少或者損壞情況,若沒有,則縮減正常

 

六、快照功能

快照的功能是在創建快照區,如果有數據需要改動,則在改動之前備份一份原始數據到快

照卷中,沒有被改動的區域則由快照區和文件系統共享。由於快照區和被快照的LV共享PE塊,

因此快照區和被快照區需要在同一個VG中。


命令:lvcreate

作用:可以用來創建LVM快照

格式:lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name

選項:-p:指定權限,rrw

  -ssnapshot,指定創建快照

  -n:設定快照卷名稱


1、創建快照

[root@localhost ~]# lvcreate -L 3G -p r -s -n testsnsh /dev/testvg/testlv
  Logical volume "testsnsh" created.

 

2、查看快照相關信息

[root@localhost ~]# lvdisplay /dev/testvg/testsnsh
  --- Logical volume ---
  LV Path                /dev/testvg/testsnsh
  LV Name                testsnsh
  VG Name                testvg
  LV UUID                4f18IK-oJWi-tpnv-1wNT-7X1i-RwID-vXhxlq
  LV Write Access        read only
  LV Creation host, time localhost.localdomain, 2015-08-15 03:45:14 +0800
  LV snapshot status     active destination for testlv    # 爲testlv所建快照
  LV Status              available
  # open                 0
  LV Size                3.00 GiB
  Current LE             192
  COW-table size         3.00 GiB
  COW-table LE           192
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
[root@localhost ~]# lvdisplay /dev/testvg/testlv
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                icxsNx-y53V-81KM-Iqp3-1PFZ-U0d6-1E22dL
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-08-15 02:50:24 +0800
  LV snapshot status     source of
                         testsnsh [active]     # 快照狀態正常
  LV Status              available


3、驗證

[root@localhost users]# rm -rf pam.d/     # 將掛載目錄下的pam.d目錄及目錄的所有文件刪除
[root@localhost users]# ls
lost+found
[root@localhost ]#  mount /dev/testvg/testsnsh  /mnt
mount: block device /dev/mapper/testvg-testsnsh is write-protected, mounting read-only
[root@localhost ]# cd /mnt
[root@localhost mnt]# ls pam.d/      # 所刪除的文件被備份到快照卷中
chfn         crond             login    passwd         remote    runuser         smtp          ssh-keycat  sudo-i
chsh         cvs               newrole  password-auth  ricci     runuser-l       smtp.postfix  su   su-l
config-util  fingerprint-auth  other    polkit-1       run_init  smartcard-auth  sshd          sudo        system-auth

 

4、歸檔和恢復快照

  • 把快照區的內容歸檔壓縮備份

[root@localhost users]# tar -Jcf /tmp/testlv.tar.xz *
  • 卸載快照區並移除

[root@localhost ~]# umount /dev/testvg/testsnsh 
[root@localhost ~]# lvremove /dev/testvg/testsnsh
Do you really want to remove active logical volume testsnsh? [y/n]: y
  Logical volume "testsnsh" successfully removed
  • 恢復

[root@localhost ~]# umount /dev/testvg/testlv
[root@localhost ~]# mkfs -t ext4 /dev/testvg/testlv
[root@localhost ~]# mount /dev/testvg/testlv /users
[root@localhost ~]# tar -Jxf /tmp/testlv.tar.xz -C /users
[root@localhost ~]# ll /users
total 20
drwxr-xr-x. 2 root root  4096 Aug 15 03:48 archlinux
drwx------. 2 root root 16384 Aug 15 03:12 lost+found


總結:

    在LVM管理的時候需要特別注意的是,PVVGLV在擴展時要先擴展物理邊界,再擴展邏輯邊界;在縮減時要保證FREE空間滿足,而且不能損壞正常數據,要先縮減邏輯邊界再縮減物理邊界。在移除PV的時候要查看要移除的PV上是否有數據,即確保Allocated PE0,不爲0,則需要用盤pvmove命令將數據移動到其他PVFree 空間上去。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章