LVM邏輯卷管理

LVM邏輯卷管理(Logical Volume Manager)

    隨着數據的逐漸增加,當初設計的磁盤大小已經滿足不了現在的需求了,當磁盤面臨着滿盤時,運維人員如何解決問題?是換一個更大的磁盤,把原先的數據copy到現在更大的磁盤裏面,繼續撐一段時間,還是尋找其它方法?LVM的出現很好的解決了這一問題。LVM是linux環境下對磁盤分區進行管理的一種機制,是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。

LVM有兩個特性

     1、便捷的調整文件系統大小

     2、支持快照snapshot

創建LVM的示意圖

PV可以是硬盤的分區,PV組成了VG,在VG上面割取PE就組成了LV


物理卷physical volume (PV)

    物理卷是硬盤分區,也可以是整個硬盤或已創建的Software RAID 卷。

卷組volume group (VG)

    卷組是LVM 中最高抽象層,是由一個或多個物理卷所組成的存儲器池。

物理塊physical extent (PE)

    物理卷按大小相等的“塊”爲單位存儲,塊的大小與卷組中邏輯卷塊的大小相同。

邏輯塊logical extent (LE)

    邏輯卷按“塊”爲單位存儲,在一卷組中的所有邏輯卷的塊大小是相同的。

邏輯卷logical volume (LV)

    邏輯卷相當於非LVM 系統中的分區,它在卷組上建立,是一個標準的塊設備,可以在其上建立文件系統


從一塊硬盤到能使用LV文件系統的步驟:

         硬盤----分區----PV----VG----LV----格式化(LV爲ext文件系統)----掛載


一、LVM的第一個特性,便捷的調整文件系統大小

1、PV的相關操作

先對硬盤進行分區

pvcreate 創建PV

[root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created

pvromve  移除PV

[root@Redhat6 ~]# pvremove /dev/sda5
  Labels on physical volume "/dev/sda5" successfully wiped

pvdisplay 顯示PV的詳細信息,用pvs也可以顯示pv的信息

[root@Redhat6 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--  59.99g  7.99g
  /dev/sda5       lvm2 a--  10.00g 10.00g
  /dev/sda6       lvm2 a--  10.00g 10.00g

pvmove 移動pv,將此PV的數據轉移至其它PV

[root@Redhat6 ~]# pvmove /dev/sda5 /dev/sda6 #把sda5的數據轉移到sda6上面
  /dev/sda5: Moved: 100.0%


2、VG的相關操作

vgcreate  創建vg,-s PE:指定PE大小,默認爲4M

[root@Redhat6 ~]# vgcreate myvg /dev/sda5 /dev/sda6
  Volume group "myvg" successfully created

vgdisplay 顯示VG的詳細信息,用vgs也可以顯示VG的信息

[root@Redhat6 ~]# vgdisplay
  --- Volume group ---
  VG Name               myvg
  System ID           
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               25.01 GiB
  PE Size               4.00 MiB
  Total PE              6402
  Alloc PE / Size       0 / 0 
  Free  PE / Size       6402 / 25.01 GiB
  VG UUID               cLkCtE-LB7X-SYCE-GcKF-I30f-pBYH-MTCLZC

vgremove 移除vg,只需跟vg的名稱即可

[root@Redhat6 ~]# vgremove myvg
  Volume group "myvg" successfully removed

vgextend  vg的擴展,先必須添加其它的PV

首先準備好一個PV--->然後使用vgextend命令即可完成擴展

[root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6   #創建PV
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
[root@Redhat6 ~]# vgcreate myvg /dev/sda5 /dev/sda6 #創建VG
  Volume group "myvg" successfully created
[root@Redhat6 ~]# pvcreate /dev/sda3   #把另外一個分區創建爲PV
  Physical volume "/dev/sda3" successfully created
[root@Redhat6 ~]# vgextend myvg /dev/sda3  #在myvg組裏面擴展VG
  Volume group "myvg" successfully extended

vgreduce  vg的縮減,

 確定要移除的PV--->將此PV的數據轉移至其它PV---->從卷組中將此PV移除

[root@Redhat6 ~]# pvs   #查看PV,確定要移除哪個PV
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--  59.99g  7.99g
  /dev/sda3  myvg lvm2 a--   5.01g  5.01g
  /dev/sda5  myvg lvm2 a--  10.00g  3.00g
  /dev/sda6  myvg lvm2 a--  10.00g 10.00g
[root@Redhat6 ~]# pvmove /dev/sda3  /dev/sda5 #把sda3的數據轉移到sda5上面
  /dev/sda3: Moved: 100.0%
[root@Redhat6 ~]# vgreduce myvg /dev/sda3 #從VG中把PV移除
  Removed "/dev/sda3" from volume group "myvg"
[root@Redhat6 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--  59.99g  7.99g
  /dev/sda3       lvm2 a--   5.01g  5.01g
  /dev/sda5  myvg lvm2 a--  10.00g  3.00g
  /dev/sda6  myvg lvm2 a--  10.00g 10.00g
[root@Redhat6 ~]#


3、LV的相關操作

lvcreate 創建LV,相關參數:-l 指定PE個數,-L指定LV的大小,

                                        -s創建一個快照卷,-n   LV的名稱

[root@Redhat6 ~]# lvcreate -L 5G -n lv1 myvg
  Logical volume "lv1" created

lvdisplay 顯示LV的詳細信息,用lvs也可以顯示LV的信息

[root@Redhat6 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/lv1
  LV Name                lv1
  VG Name                myvg
  LV UUID                7Ewvyg-pEFI-o4XL-kFDa-Jtvl-hmak-5fg3qT
  LV Write Access        read/write
  LV Creation host, time Redhat6, 2013-07-23 05:42:33 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB  #創建一個5G的lv
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

lvremove 移除lv,需要移除lv的設備文件:

      /dev/myvg/lv1或者/dev/mapper/myvg-lv1

[root@Redhat6 ~]# lvremove /dev/myvg/lv1
Do you really want to remove active logical volume lv1? [y/n]: y
  Logical volume "lv1" successfully removed

lvextend 擴展LV

  先確定要擴展多大-->確定當前VG有足夠的空閒空間-->擴展(1、物理邊界---2、邏輯邊界)

當VG不夠時,先增加PV,在擴展VG,最後在VG上面擴展LV。

[root@Redhat6 ~]# mke2fs -t ext4 /dev/myvg/lv1   #先把lv格式化
[root@Redhat6 ~]# lvextend -L +4G /dev/myvg/lv1 #實現物理擴容
  Extending logical volume lv1 to 9.00 GiB   #之前只有5G,現在擴了4G
  Logical volume lv1 successfully resized
[root@Redhat6 ~]# resize2fs /dev/myvg/lv1  #實現邏輯擴容
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/lv1 to 2359296 (4k) blocks.
The filesystem on /dev/myvg/lv1 is now 2359296 blocks long.

lvreduce 縮小LV

先卸載--->然後減小邏輯邊界---->最後減小物理邊界--->在檢測文件系統   ====謹慎用===

[root@Redhat6 ~]# umount /dev/mapper/myvg-lv1
[root@Redhat6 ~]# e2fsck -f /dev/myvg/lv1
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/myvg/lv1: 13/589824 files (0.0% non-contiguous), 73829/2359296 blocks
[root@Redhat6 ~]# resize2fs /dev/myvg/lv1 7G #把lv減少到7G,減少了2G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/lv1 to 524288 (4k) blocks.
The filesystem on /dev/myvg/lv1 is now 524288 blocks long.
[root@Redhat6 ~]# lvs  #查看lv的大小發現並沒有實際的減少
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-a----  9.00g                                           
  root vg0  -wi-ao--- 20.00g                                           
  swap vg0  -wi-ao---  2.00g                                           
  usr  vg0  -wi-ao--- 10.00g                                           
  var  vg0  -wi-ao--- 20.00g                                           
[root@Redhat6 ~]# lvreduce -L -2G /dev/myvg/lv1 #減少lv的物理邊界,指定減少2G
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
  Reducing logical volume lv1 to 7.00 GiB
  Logical volume lv1 successfully resized 
[root@Redhat6 ~]# lvs #查看lv的大小發現已經實際的減少了
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-a----  7.00g                                           
  root vg0  -wi-ao--- 20.00g                                           
  swap vg0  -wi-ao---  2.00g                                           
  usr  vg0  -wi-ao--- 10.00g                                           
  var  vg0  -wi-ao--- 20.00g   
[root@Redhat6 ~]# e2fsck -f /dev/myvg/lv1 #減少之後檢查文件系統
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/myvg/lv1: 13/131072 files (0.0% non-contiguous), 43698/524288 blocks


二、LVM的第二個特性,在備份數據的時候創鍵快照卷

當需要備份LV裏面的數據時,且LV的數據也在進行寫操作時,這個時候創建快照就很有必要了,快照是一個訪問LV裏面數據的一個通道,他不會保存LV裏面所有的數據,當LV某些PE裏面數據變化時,快照保存之前PE的數據,未變化的PE將不會被保存。

步驟:

分區--->創建PV--->創建VG--->創建LV--->格式化LV爲ext4--->掛載--->寫入數據--->需要備份(創建快照)--->創建快照卷--->再次繼續寫入數據---->掛載快照卷--->備份之前的數據到快照卷裏面--->卸載快照--->刪除快照卷


root@station128 ~]# fdisk /dev/sda  #先建立兩個邏輯分區,大小爲10G
Command (m for help): n
First cylinder (9165-15665, default 9165):
Using default value 9165
Last cylinder, +cylinders or +size{K,M,G} (9165-15665, default 15665): +10G
Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 8e  #並改爲LVM文件系統
Changed system type of partition 5 to 8e (Linux LVM)
Command (m for help): n
First cylinder (10471-15665, default 10471):
Using default value 10471
Last cylinder, +cylinders or +size{K,M,G} (10471-15665, default 15665): +10G
Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): 8e
Changed system type of partition 6 to 8e (Linux LVM)
Command (m for help): w
[root@Redhat6 ~]# pvcreate /dev/sda5 /dev/sda6   #創建PV
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
[root@Redhat6 ~]# vgcreate -s 8M myvg /dev/sda5 /dev/sda6  #創建VG,並指定PE爲8M
  Volume group "myvg" successfully created
[root@Redhat6 ~]# lvcreate -L 4G -n lv1 myvg #創建LV爲4G
  Logical volume "lv1" created
[root@Redhat6 ~]# mkfs -t ext4 /dev/myvg/lv1 #格式化LV爲ext4
[root@Redhat6 ~]# blkid  #顯示設備的UUID及文件系統類型,及卷標
/dev/mapper/vg0-var: UUID="c9776f08-bbaf-4a36-a009-3e16a09ad924" TYPE="ext4"
/dev/sda1: UUID="dc3cc214-a9f6-4730-a186-d08765ccfa4f" TYPE="ext4"
/dev/sda2: UUID="zPpbgE-0Ip7-A4m2-GG4K-sBrC-eUeU-V8VdCI" TYPE="LVM2_member"
/dev/sda5: UUID="e5eLw1-JTrG-H9Q7-18qA-SrPV-axMc-QLPW5M" TYPE="LVM2_member"
/dev/sda6: UUID="7OOZcJ-XzLf-zJJq-JbdF-e386-xCTl-Ym2UE3" TYPE="LVM2_member"
/dev/mapper/vg0-root: UUID="bae7835a-af3b-4935-a04b-5932b2fc123b" TYPE="ext4"
/dev/mapper/vg0-swap: UUID="3e0cb4a7-d393-4f75-af12-1fe6e8c96273" TYPE="swap"
/dev/mapper/vg0-usr: UUID="46d516b8-03ea-4c0d-bb03-0e9d6893bd1a" TYPE="ext4"
/dev/mapper/myvg-lv1: UUID="2d44718c-993d-42e6-896b-05e06af45aee" TYPE="ext4"
[root@Redhat6 ~]# mkdir /mnt/lv1  #創建LV的掛載點
[root@Redhat6 ~]# mount /dev/myvg/lv1 /mnt/lv1/  #掛載LV
[root@Redhat6 ~]# cd /mnt/lv1/ #進入到LV的掛載點
[root@Redhat6 lv1]# ls
lost+found
[root@Redhat6 lv1]# cp /etc/rc.sysinit /etc/inittab ./  #copy一個文件到LV的掛載目錄裏面
[root@Redhat6 lv1]# ls
inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]# lvcreate -L 50M -s -p r -n MY_SNAP /dev/myvg/lv1  #創建快照卷爲50M,且只能讀,名稱爲MY_SNAP
  Rounding up size to full physical extent 56.00 MiB
  Logical volume "MY_SNAP" created
[root@Redhat6 lv1]# mkdir /mnt/snap  #創建快照卷的掛載點
[root@Redhat6 lv1]# mount /dev/myvg/MY_SNAP /mnt/snap/ #掛載快照卷
mount: block device /dev/mapper/myvg-MY_SNAP is write-protected, mounting read-only
[root@Redhat6 lv1]# mkdir /backup #創建備份目錄
[root@Redhat6 lv1]# tar -jcf /backup/lv1.tar.bz2  /mnt/snap/*  #把快照卷裏面的數據歸檔
tar: Removing leading `/' from member names
[root@Redhat6 lv1]# cp /etc/fstab /mnt/lv1/   #copy文件到LV文件,使LV文件與之前快照的文件有所改變
[root@Redhat6 lv1]# umount /dev/myvg/MY_SNAP   #備份完成後,卸載快照卷的掛載點
[root@Redhat6 lv1]# lvremove /dev/myvg/MY_SNAP  #移除快照卷
Do you really want to remove active logical volume MY_SNAP? [y/n]: y
  Logical volume "MY_SNAP" successfully removed
[root@Redhat6 lv1]# cd /mnt/lv1/
[root@Redhat6 lv1]# ls  #可以查看到LV文件裏面有3個文件
fstab  inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]# cd /backup/
[root@Redhat6 backup]# tar xf lv1.tar.bz2  #解壓之前備份的文件
[root@Redhat6 backup]# ls
lv1.tar.bz2  mnt
[root@Redhat6 backup]# cd mnt/lv1/
[root@Redhat6 lv1]# ls   #查看到快照只備份了之前的文件
inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]#


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