1. 程式人生 > >LVM 邏輯卷建立與管理

LVM 邏輯卷建立與管理

LVM ( Logical Volume Manager ) 是基於核心的一種邏輯卷管理器,允許使用者動態調整檔案系統大小,可以利用快照功能備份資料。

LVM分為:物理卷 卷組  邏輯卷

    物理卷:(PV)是LVM最底層概念,和磁碟份區是對應的關係(一個分割槽對應一個物理卷,由命令生成。)

    卷 組:(VG)由一個或多個物理卷組成,大小取決於物理卷的個數及容量,建立時可以指定其PE大小。卷組我們可以看成是一個磁碟裝置。

                    PE(Physical Extent)即物理長度,邏輯意義上磁碟最小儲存單位,預設大小為4M。

    邏輯卷:(LV)是LVM邏輯意義上的分割槽,可以指定多少容量來建立分割槽大小,最後格式化建立檔案系統掛載使用。

一般常用的幾個命令:

    PV: pvcreate (建立物理卷)

            pvremove(移除物理卷)

            pvmove(把PV上的資料移動其它PV上,移除物理卷之前使用。)

            pvscan

            pvs(簡單檢視PV卷)

            pvdispaly(檢視PV卷的祥細資訊)

    vg: vgcreate(建立卷組)

            vgremove(移除卷組)

            vgs(簡單的檢視VG卷的資訊)

            vgscan()

            vgdispaly(檢視VG的詳細資訊)

            vgextend(擴充套件VG)

            vgreduce(縮減VG)

    LV:lvcreate  (建立LV卷)

            lvremove (移除LV卷)

            lvs (簡單檢視LV卷資訊)

            lvscan

            lvdispaly (檢視LV卷的祥細資訊)

            lvextend (擴充套件LV卷)

            lvreduce (縮卷LV卷)

    centos 6  :resize2fs  調整lv大小

*****************************************************************************************

命名方式:

    dm: device mapper   裝置對映                                        

裝置檔案:/dev/卷組名/邏輯卷名
                /dev/mapper/卷組名-邏輯卷名

        假如系統是一卷組為myvg   邏輯卷為lvdata 則在目錄中表示如下:
            第一種:/dev/myvg/lvdata      # 使用者一般用此方式訪問
            第二種:/dev/mapper/myvg-lvdata      # 核心識別

********************************************************************************************

建立LVM邏輯卷:

    1、準備建立PV卷的分割槽

            # fdisk /dev/<磁碟名>

    2、建立PV卷

            # pvcreate  /dev/<分割槽名>

    3、建立 VG卷組

            # vgcreate  vg_name   /dev/sda[1...]     # 可以一次指定多個PV

                -s 建立時指定其PE大小,預設為4M

    4、建立LV卷

            #lvcreate -l <PE數量> -n <lv名稱>   /dev/vg_name

                      也可以使用  -L   指定大小,單位為M,G 等

***********start****************

1、建立磁碟分割槽,並把型別更改為8e  LVM卷,一定要改,避免重灌系統後,核心不能識別該分割槽

使用fdisk  /dev/sda 建立新的分割槽  t  選項指定分割槽的型別。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1913    15360000   83  Linux
/dev/sda2            1913        2168     2048000   82  Linux swap / Solaris
/dev/sda3            2168        6527    35019103+   5  Extended
/dev/sda5            2168        2299     1057662   8e  Linux LVM      # 新增的
/dev/sda6            2300        2431     1060258+  8e  Linux LVM     # 新增的

建立分割槽後,使用如下兩個命令讓核心重新識別新的分割槽 

# kpartx -af /dev/sda
# partx -a /dev/sda
# cat /proc/partitions   # 檢視分割槽是否以被核心識別,沒的重新執行以上命令

2、建立PV

[[email protected] ~]# pvcreate /dev/sda[5..6]
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
[[email protected] ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda5       lvm2 a--  1.01g 1.01g
  /dev/sda6       lvm2 a--  1.01g 1.01g

3、建立VG

[[email protected] ~]# vgcreate myvg /dev/sda5 /dev/sda6   # 使用了兩個pv建立了一個VG
  Volume group "myvg" successfully created
[[email protected] ~]# vgs            # 簡單檢視vg的資訊
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   2   0   0 wz--n- 2.01g 2.01g
  [[email protected] ~]# vgdisplay   # 檢視其祥細資訊,檢視時,可以指定一個VG名稱。
  --- Volume group ---
  VG Name               myvg
  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               2.01 GiB     # VG大小
  PE Size               4.00 MiB    # 預設的PE大小為4M  可以在建立VG使用-s 指定其預設大小
  Total PE              515
  Alloc PE / Size       0 / 0   
  Free  PE / Size       515 / 2.01 GiB
  VG UUID               B4Soui-Z6Fx-aEht-hTmG-lCAP-1j6Z-Bp7eJO

4、建立LV

# lvcreate -L +1.5G -n lvdata /dev/myvg   # -L指定大小 -n 指定名稱,可以使用小l指定其PE的個數。
  Logical volume "lvdata" created
# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lvdata myvg -wi-a----- 1.50g

5、建立檔案系統(格式化)並掛載使用

# mke2fs -t ext4 /dev/myvg/lvdata   # 建立檔案系統,指定其為ext4的型別
# mkdir /mnt/lvmdata                        # 建立一個掛載目錄
# mount /dev/myvg/lvdata /mnt/lvmdata/   # 掛載卷

***********end**********************

當使用過程中資料不斷增大,慢慢LVM卷大小不能滿足我們的需求,這時需要增加其大小.

邏輯卷擴充套件的步驟:
    1、先確定擴充套件的大小;並確保所屬的卷組有足夠的剩餘空間;不夠就需要增加PV卷(VG卷滿足的話這一步是可以省略的, 使用vgs檢視VG卷組夠不夠)

        # 使用fdisk命令 新建一個分割槽,-t 指定其型別為8e

        # pv  /dev/<新建的分割槽名>

        # vgextend    VolumeGroupName   PhysicalDevicePath   [PhysicalDevicePath...]

    2、擴充套件物理邊界:
        # lvextend -L [+]Size /path/to/lv_device
    3、擴充套件邏輯邊界:
        # resize2fs /path/to/lv_device

**************start*******************

1、增加PV卷,擴充套件VG卷(如果VG卷空間足夠,這一步可以省略)

[[email protected] ~]# vgextend myvg /dev/sda7
  Volume group "myvg" successfully extended
[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   1   0 wz--n- 3.02g 1.52g

2、擴充套件物理邊界(相當於分割槽的大小)注意:+號的使用與不使用的效果。

[[email protected] ~]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lvdata myvg -wi-ao---- 1.50g                                             
[[email protected] ~]# lvextend -L +1G /dev/myvg/lvdata    # 也可以使用小寫的l 來增加PE的個數
  Extending logical volume lvdata to 2.50 GiB

3、擴充套件邏輯邊界(相當於檔案系統大小。也就是說格式化後的大小,可以這麼來理解)

[[email protected] ~]# df -h    # 擴充套件前檢視
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda1                 15G  974M   13G   7% /
tmpfs                    729M     0  729M   0% /dev/shm
/dev/mapper/myvg-lvdata  1.5G   35M  1.4G   3% /mnt/lvmdata   # 物理邊界己經擴充套件到了2.5G了但這裡還是1.5
[[email protected] ~]# resize2fs /dev/myvg/lvdata    # 擴充套件邏輯邊界
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/lvdata is mounted on /mnt/lvmdata; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/lvdata to 655360 (4k) blocks.
The filesystem on /dev/myvg/lvdata is now 655360 blocks long.
[[email protected] ~]# df -h   # 擴充套件後的結果
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda1                 15G  974M   13G   7% /
tmpfs                    729M     0  729M   0% /dev/shm
/dev/mapper/myvg-lvdata  2.5G   35M  2.4G   2% /mnt/lvmdata  # 擴充套件後的效果

**************end*******************

注意:如果條件允許,最好先解除安裝檔案系統,然後使用e2fsck 檢查檔案系統再擴充套件。

縮減邏輯卷的步驟:
    1、解除安裝卷,並執行強制檢測
        # e2fsck -f /path/to/lv_device
    2、縮減邏輯邊界:
        # resize2fs /path/to/lv_device SIZE
    3、縮減物理邊界:
        # lvreduce -L [-]Size /path/to/lv_device

    4、移動PV卷資料到其它PV卷,移除卷組中的PV,再移除PV卷

************start********************

1、解除安裝卷,並執行強制檢測

# umount /dev/myvg/lvdata 
# e2fsck -f /dev/myvg/lvdata

2、縮減邏輯邊界

# resize2fs  /dev/myvg/lvdata 2G

3、縮減物理邊界

# lvreduce -L 2G /dev/myvg/lvdata    # 縮減到了2G,注意不寫+號就是到多少G
# mount /dev/myvg/lvdata /mnt/lvmdata/  # 然後再掛載使用

4、移除空閒PV

    如果此時我們要移除sda5

[[email protected] ~]# pvs   首先檢視PV卷,看PV使用情況,此時sda5有資料在使用我們需要移動資料到其它PE
  PV         VG   Fmt  Attr PSize PFree 
  /dev/sda5  myvg lvm2 a--  1.00g 12.00m
  /dev/sda6  myvg lvm2 a--  1.01g     0 
  /dev/sda7  myvg lvm2 a--  1.01g  1.01g
[[email protected] ~]# pvmove /dev/sda5    # 移動資料到其它PE
  /dev/sda5: Moved: 0.8%
  /dev/sda5: Moved: 50.8%
  /dev/sda5: Moved: 100.0%
[[email protected] ~]# vgreduce myvg /dev/sda5  # 縮減VG卷組
[[email protected] ~]# pvremove /dev/sda5  # 移除PV
  Labels on physical volume "/dev/sda5" successfully wiped

********************end***************


擴展卷組:
    1、準備要新增的物理卷;
    2、擴展卷組:
        新增物理卷至卷組中;
        # vgextend vg_name /path/to/pv_device

縮減卷組:
    1、確定要移除的物理卷的總空間大小,要小於VG當前的可用空間大小;
    2、將要移除的物理捲上的所有PE移動至其它PV
        # pvmove /path/to/pv_device
    3、縮減vg
        # vgreduce vg_name /path/to/pv_device

 快照:
    由於 我們使用cp命令對資料進行復制,如果資料過大,而且正在使用,會造成時間戳不一致,導致資料還原不可用

    快照卷也是一個邏輯卷,通常為只讀,大小不要求和原卷一樣大小,建立後的快照不會受原卷資料的影響(原卷資料改變,快照資料不會跟

著改變),可以用來備份


 
    用快照備份完成資料後,解除安裝 ,刪除快照卷

快照卷:邏輯卷的一種,通常為止讀(-p {r|w})

建立快照卷-->掛載快照卷-->備份快照卷裡的資料-->解除安裝快照卷-->移除快照卷

          # lvcreate -s -L Size -n Name -p r /path/to/original_lv_device

                    -p 指定r 或rw

                    -L 邏輯卷的大小 ,也可以使用小寫L指定其塊大小

                    -n  指定其名

*************start******************

1、給邏輯卷/dev/vg_group1/test_lv1建立快照

[[email protected] ~]#  lvcreate -L 50M -s -p r -n my_snap /dev/vg_group1/test_lv1
 Rounding up size to full physical extent 52.00 MiB
 Volume group "vg_group1" has insufficient free space (1 extents): 13 required.

2、備份資料   (先掛載快照,再備份快照資料完成對原始卷的備份)

# mkdir /mnt/backup  
# mount /dev/vg_gruop1/my_snap  /mnt/backup
#cd /mnt/backup;    tar cjvf  /opt/mysql_data.tar.bz2

3、刪除快照卷

# lvremove /dev/vg_group1/my_snap

***************end***********************

還有一種:犧牲快照恢復原始卷

lvcreate -L +20M -s -n lv1s /dev/vg1/lv1  建立快照
[[email protected] lv1]# lvs  顯示LV卷
 LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
 lv1  vg1  owi-aos-- 80.00m                                            
 lv1s vg1  swi-a-s-- 20.00m      lv1      0.06                          
                       
[[email protected] lv1]# ls 檢視原如卷之前的內容
config-2.6.32-358.el6.i686         symvers-2.6.32-358.el6.i686.gz  vmlinuz-2.6.32-
 
358.el6.i686
initramfs-2.6.32-358.el6.i686.img  System.map-2.6.32-358.el6.i686
[[email protected] lv1]# rm -rf sy*  刪除原始卷一些內容
[[email protected] lv1]# ls
config-2.6.32-358.el6.i686         System.map-2.6.32-358.el6.i686
initramfs-2.6.32-358.el6.i686.img  vmlinuz-2.6.32-358.el6.i686
[[email protected] lv1]# umount /mnt/lv1  解除安裝原如卷
 
[[email protected] ~]# lvconvert --merge /dev/vg1/lv1s 用快照卷恢復原始卷
 
[[email protected] ~]# mount /dev/vg1/lv1 /mnt/lv1
[[email protected] ~]# ls /mnt/lv1  恢復後的資料,和之前做快照的資料一樣
config-2.6.32-358.el6.i686         System.map-2.6.32-358.el6.i686
initramfs-2.6.32-358.el6.i686.img  vmlinuz-2.6.32-358.el6.i686
symvers-2.6.32-358.el6.i686.gz