LVM(邏輯卷管理)

一、簡介

   LVM Logical Volume Manager(邏輯卷管理)的簡寫,它是基於內核的一種邏輯卷管理器,LVM適合於管理大存儲設備,並允許用戶動態調整文件系統大小。此外,LVM的快照功能可以幫助我們快速備份數據。LVM爲我們提供了邏輯概念上的磁盤,使得文件系統不在關心底層物理磁盤的概念。並且它是Linux環境下對磁盤分區進行管理的一種機制,使用lvm用戶可以在無需停機的情況下方便地調整各個分區大小。

看圖識LVM

wKioL1avGDbSDIWpAAI1QxxeGvs542.png


二、LVM基本概念

1、Physical Volume(PV),物理卷:創建分區時,標記分區類型爲8e後,就可以將該分區做成物理卷供LVM使用了。可以用任意塊設備做成物理卷,單個分區、整塊硬盤、RAID設備都可以。

2、Volume Group(VG),卷組:顧名思義,就是將一個或多個PV組合爲一個卷組,以PE爲存儲單位。一個VG至少包含一個PV,VG可以創建多個。

3、Physical Extent(PE),物理區域:PE是整個LVM中可分配的最小存儲單元,大小在創建卷組時指定且確定後不能更改;同一卷組的PE大小需一致。新的PV加入卷組後,PE的大小會自動更改爲原卷組PE的大小。

4、Logical Volume(LV),邏輯卷:建立在卷組的基礎上,卷組中空閒的PE可分配給LV使用,創建LV後可通過增加或減少PE來動態擴展和縮小空間大小。LV可以直接創建文件系統並掛載使用。兩種寫入模式:線性模式(linear)、交錯模式(triped)。

三、LVM常用管理工具

準備工作:

# fdisk /dev/sda  #創建分區並調整分區格式(lvm格式爲8e)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (1632-26108, default 1632): 
Using default value 1632
Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): 
Using default value 26108

Command (m for help): n
First cylinder (1632-26108, default 1632): 
Using default value 1632
Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): +5G

Command (m for help): n
First cylinder (2286-26108, default 2286): 
Using default value 2286
Last cylinder, +cylinders or +size{K,M,G} (2286-26108, default 26108): +5G

Command (m for help): n
First cylinder (2940-26108, default 2940): 
Using default value 2940
Last cylinder, +cylinders or +size{K,M,G} (2940-26108, default 26108): +5G

Command (m for help): n
First cylinder (3594-26108, default 3594): +5G
Value out of range.
First cylinder (3594-26108, default 3594): 
Using default value 3594
Last cylinder, +cylinders or +size{K,M,G} (3594-26108, default 26108): +5G

Command (m for help): t
Partition number (1-8): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-8): 6
Hex code (type L to list codes): 8e
Changed system type of partition 6 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-8): 7
Hex code (type L to list codes): 8e
Changed system type of partition 7 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-8): 8
Hex code (type L to list codes): 8e
Changed system type of partition 8 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

# kpartx -af /dev/sda
# partx -a /dev/sda   (centos6.7需要這兩步才能讀取硬盤)

# cat /proc/partitions (查看磁盤情況)
major minor  #blocks  name

   8        0  209715200 sda
   8        1     819200 sda1
   8        2   10240000 sda2
   8        3    2048000 sda3
   8        4         31 sda4
   8        5    5246007 sda5
   8        6    5253223 sda6
   8        7    5253223 sda7
   8        8    5253223 sda8

# fdisk -l 

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 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: 0x000711d9

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         103      819200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             103        1377    10240000   83  Linux
/dev/sda3            1377        1632     2048000   82  Linux swap / Solaris
/dev/sda4            1632       26108   196604286    5  Extended
/dev/sda5            1632        2285     5246007   8e  Linux LVM
/dev/sda6            2286        2939     5253223+  8e  Linux LVM
/dev/sda7            2940        3593     5253223+  8e  Linux LVM
/dev/sda8            3594        4247     5253223+  8e  Linux LVM

1、物理卷(PV)的常用管理命令

pvcreate   #創建一個物理卷
pvchange   #修改物理卷的屬性
pvresize   #調整一個PV的大小
pvremove   #刪除一個PV
pvdisplay  #顯示PV的屬性信息
pvmove     #移動PE到指定物理卷
pvscan     #搜索所有磁盤上的物理卷
pvs        #顯示PV的簡要信息

示例1:創建4個PV

# pvcreate /dev/sda{5..8}
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
  Physical volume "/dev/sda8" successfully created
# pvs   #查看磁盤PV情況
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda5       lvm2 ---  5.00g 5.00g
  /dev/sda6       lvm2 ---  5.01g 5.01g
  /dev/sda7       lvm2 ---  5.01g 5.01g
  /dev/sda8       lvm2 ---  5.01g 5.01g
# pvdisplay   #查看PV詳細信息
  "/dev/sda5" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---   #新PV
  PV Name               /dev/sda5   #物理卷名稱
  VG Name               
  PV Size               5.00 GiB    #物理卷大小
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               F4waZ4-gQtM-lrZm-RN7O-1HFX-axqe-M5IdE0
   
  "/dev/sda6" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda6
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               fykqC3-4PPg-lgfR-iWQO-WzPK-goRT-W4S7uy
   
  "/dev/sda7" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda7
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xakBcc-U6lL-vLC7-WIc1-X2Td-tetj-GKBlOu
   
  "/dev/sda8" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda8
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OOr5Dh-i7ZW-UjsC-rTxW-MrnP-USMI-XQcmOO

示例2:刪除PV

# pvmove /dev/sda5 /dev/sda6 #注意:兩個PV必須在同一卷組內
# pvremove /dev/sda5  #刪除PV前要確保該PV沒有在任何卷組中
  Labels on physical volume "/dev/sda5" successfully wiped
# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda6       lvm2 ---  5.01g 5.01g
  /dev/sda7       lvm2 ---  5.01g 5.01g
  /dev/sda8       lvm2 ---  5.01g 5.01g


2、卷組(VG)的常用管理命令

vgcreate    #創建卷組
    -l:設置可容納的LV最大數,默認爲255
    -p:設置包含PV的最大數,默認爲255
    -s:設置PE大小,默認爲4M
vgextend    #擴展VG大小
vgdisplay   #顯示VG屬性信息
vgchange    #修改VG屬性信息
vgreduce    #縮減VG大小
vgremove    #刪除VG
vgscan      #搜索所有磁盤上的卷組
vgs         #顯示VG簡要信息
vgck        #檢查VG元數據

示例1:創建一個卷組,要求PE大小爲8M,名稱爲bjwf,最大支持LV不能超過10個,包含的PV不能超過2個

# vgcreate -s 8M -l 10 -p 2 bjwf /dev/sda{7,8}
  Volume group "bjwf" successfully created
# vgdisplay bjwf  #查看VG屬性信息驗證結果
  --- Volume group ---
  VG Name               bjwf  #VG名稱
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                10   #可以看到,支持最大LV數爲10個
  Cur LV                0
  Open LV               0
  Max PV                2    #支持最大PV數爲2個
  Cur PV                2
  Act PV                2
  VG Size               10.02 GiB  #卷組大小
  PE Size               8.00 MiB   #PE的大小
  Total PE              1282
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1282 / 10.02 GiB   #剩餘容量
  VG UUID               7q5Lka-cnTN-qqlh-eIg1-Fpr2-2IPY-yrHA1S

示例2:擴展bjwf的大小

# vgextend bjwf /dev/sda6  #這塊由於此前定義了VG的最大PV數,所以無法擴展
  No space for '/dev/sda6' - volume group 'bjwf' holds max 2 physical volume(s).
  Unable to add physical volume '/dev/sda6' to volume group 'bjwf'.
# vgchange -p 3 bjwf  #修改VG屬性
  Volume group "bjwf" successfully changed
# vgextend bjwf /dev/sda6 #擴展VG
  Volume group "bjwf" successfully extended  #顯示成功
# vgdisplay bjwf  #查看新擴展的VG
  --- Volume group ---
  VG Name               bjwf
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                10
  Cur LV                0
  Open LV               0
  Max PV                3       #最大PV數已經改爲3個
  Cur PV                3
  Act PV                3
  VG Size               15.02 GiB   #VG大小也已經改變
  PE Size               8.00 MiB
  Total PE              1923
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1923 / 15.02 GiB
  VG UUID               7q5Lka-cnTN-qqlh-eIg1-Fpr2-2IPY-yrHA1S

示例3:縮減bjwf大小,然後刪除bjwf

# vgreduce bjwf /dev/sda8   #注意:把PV移除卷組時要保證該PV數據已經遷移或未使用
  Removed "/dev/sda8" from volume group "bjwf"
# vgchange -an bjwf  #標記bjwf爲不可用狀態
  0 logical volume(s) in volume group "bjwf" now active
# vgremove bjwf   
#不論VG包含多少PV都可以刪除,前提是該VG上沒有任何LV,如果有就需要先刪除LV
  Volume group "bjwf" successfully removed
# vgs   #查看VG情況


3、邏輯卷(LV)的常用管理命令

lvcreate    #創建LV
    -l:設置LV大小,以PE爲單位
    -L:設置LV大小,以字節爲單位
    -n:設置LV名稱
    -p:設置LV權限讀寫權限,默認爲可讀可寫
    -s:設置一個快照卷,對一個已存在的LV做快照
lvextend    #擴展LV大小
lvreduce    #縮減LV大小
lvchange    #修改LV屬性信息
    -ay:標記LV爲可用狀態
    -an:標記LV爲不可用狀態
lvremove    #刪除LV
lvdisplay   #顯示LV屬性信息
lvscan      #搜索所有磁盤上的邏輯卷
lvs         #顯示LV簡要信息

示例1:創建一個LV,要求大小爲10G,名稱爲mylv,指定卷組爲bjwf,並掛載到/data上

# lvcreate -L 10G -n mylv bjwf
  Logical volume "mylv" created.
# lvdisplay  #LV詳細情況
  --- Logical volume ---
  LV Path                /dev/bjwf/mylv   #邏輯卷mylv的陸佳
  LV Name                mylv             #邏輯卷名稱爲mylv
  VG Name                bjwf             #基於bjwf卷組
  LV UUID                gvQMEB-1Zzo-IVth-KV7v-O6QH-8Nxw-IK1RIf
  LV Write Access        read/write
  LV Creation host, time mail.bjwf.com, 2016-02-01 17:16:57 +0800
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
  
# mke2fs -t ext4 /dev/bjwf/mylv   #格式化mylv
# mkdir /data                     #創建目錄
# mount /dev/bjwf/mylv /data      #掛載到指定目錄
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  6.6G  2.5G  73% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             772M   39M  693M   6% /boot
/dev/mapper/bjwf-mylv
                      9.8G   23M  9.2G   1% /data  #大小爲10G的/data

示例2:擴展mylv的大小,增加5G空間

# lvextend -L 15G /dev/bjwf/mylv   #方法一,擴展物理邊界增加到15G
# lvextend -L +5G /dev/bjwf/mylv   #方法二,擴展物理邊界增加5G                      

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  6.6G  2.5G  73% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             772M   39M  693M   6% /boot
/dev/mapper/bjwf-mylv
                      9.8G   23M  9.2G   1% /data  #仍然爲10G,邏輯卷沒有增加

# resize2fs /dev/bjwf/mylv  
#擴展邏輯邊界。 注:只對ext文件系統使用。這裏也可以指定擴展邏輯邊界大小,默認物理邊界大小。
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/bjwf/mylv is mounted on /data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/bjwf/mylv to 3932160 (4k) blocks.
The filesystem on /dev/bjwf/mylv is now 3932160 blocks long.

# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync 
  Convert
  mylv bjwf -wi-ao---- 15.00g                                                    
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  6.6G  2.5G  73% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             772M   39M  693M   6% /boot
/dev/mapper/bjwf-mylv
                       15G   25M   14G   1% /data        #大小已經增加到15G

示例三:縮減mylv的大小,減少9G空間(縮減的順序與創建時的順序相反,也就是先卸載文件系統,縮減邏輯卷,縮減物理卷。縮減很危險,不到最後一步千萬不要縮減,縮減需要離線。)

# umount /data/    #卸載,住:卸載前先將數據拿走,血的教訓
# e2fsck -f /dev/bjwf/mylv  #強制檢查 
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/bjwf/mylv: 12/983040 files (0.0% non-contiguous), 100865/3932160 blocks
# resize2fs /dev/bjwf/mylv 7G   #縮減邏輯邊界至7G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/bjwf/mylv to 1835008 (4k) blocks.
The filesystem on /dev/bjwf/mylv is now 1835008 blocks long.

# lvreduce -L 7G /dev/bjwf/mylv #縮減物理邊界至7G
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y   #確認,後果自負
  Size of logical volume bjwf/mylv changed from 15.00 GiB (3840 extents) to 
  7.00 GiB (1792 extents).
  Logical volume mylv successfully resized
# mount /dev/bjwf/mylv /data/   #重新掛載
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  6.6G  2.5G  73% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             772M   39M  693M   6% /boot
/dev/mapper/bjwf-mylv
                      6.8G   23M  6.4G   1% /data   #已經縮減至7G

示例四:對mylv創建一個快照卷,快照恢復後,卸載快照卷並刪除

# lvcreate -L 50M -n mylv_snap -p r -s /dev/bjwf/mylv   
#對mylv做快照,首先要確定邏輯卷裏面暫用的空間大小小於50M,不然快照沒意義

  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mylv_snap" created.
# lvs
  LV        VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync 
  C onvert
  mylv      bjwf owi-a-s--- 10.00g                                                    
  mylv_snap bjwf sri-a-s--- 52.00m      mylv   0.00      #快照卷
# mkdir /snap     #創建掛載點
# mount /dev/bjwf//mylv_snap /snap/   #掛載快照至指定目錄
mount: block device /dev/mapper/bjwf-mylv_snap is write-protected, mounting 
read-only    
# umount /snap/   #卸載,一定要確定數據是否移除
# lvremove /dev/bjwf/mylv_snap    #刪除快照卷
Do you really want to remove active logical volume mylv_snap? [y/n]: y #確認
  Logical volume "mylv_snap" successfully removed

示例五:刪除mylv

# lvchange -an /dev/bjwf/mylv  #標記mylv爲不可用狀態
# lvremove /dev/bjwf/mylv     #刪除LV
  Logical volume "mylv" successfully removed




以上乃是個人學習總結,如有錯誤或遺留問題,還望指正!!!!!!!!!!!!!!

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