LVM管理

一、簡介


LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。


LVM的工作原理是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。


LVM最大的特點就是可以對磁盤進行動態管理。因爲邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作爲一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。


基本的邏輯卷管理概念:


PV(Physical Volume)- 物理卷 

物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。


VG(Volumne Group)- 卷組 

卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。


LV(Logical Volume)- 邏輯卷 

邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。

關係圖如下:

wKiom1fEHyWD2tzoAACJRcxUYzs495.jpg

PE(Physical Extent)- 物理塊


LVM 默認使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此默認的LVM的LV最大容量爲4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像文件系統裏面的block 大小。所以調整PE 會影響到LVM 的最大容量!

wKioL1fEH0yyh3gAAAAOnK_uTos844.gif


二,系統環境及磁盤準備

系統平臺:CentOS release 7

LVM版本:lvm2-2.02.130-5.el7.x86_64

設備類型:分區、物理磁盤

磁盤準備:新增一塊磁盤做實驗


三,安裝LVM管理工具

1,檢查系統中是否安裝了LVM管理工具

  # rpm -qa | grep lvm

2,如果未安裝,則使用yum方式安裝

  # yum -y install lvm*

[root@localhost ~]# rpm -qa lvm2
lvm2-2.02.130-5.el7.x86_64

四,新建一個分區

1,使用/dev/sdb模擬分區

  # fdisk /dev/sdb

   文件系統類型爲:8e (Linux LVM)

  # fdisk -l /dev/sdb

wKioL1fFMz3BTJmvAAA7ufTQWaw282.png


五,創建PV

  命令介紹:

    # pvcreate  將物理分區新建成爲PV

    # pvscan  查詢目前系統裏面任何具有PV的磁盤

    # pvdisplay  顯示出目前系統上面的PV狀態

    # pvremove  將PV屬性移除,讓該分區不具有PV屬性

1,查詢目前系統裏面是否有PV的磁盤

wKioL1fFNLDSVo5XAAArrazlAZM426.png


2,將/dev/sdb5-/dev/sdb8新建成爲PV格式

wKioL1fFNRqAq0lWAAAqjzV1NJU252.png


3,查詢目前系統裏面任何具有PV的磁盤

wKioL1fFNV_DcNGNAAArrazlAZM968.png


六,創建VG

  命令介紹:

    # vgcreate  新建VG

     vgcreate [-s N[mgt]] VG名稱 VG名稱

      -s  接PE的大小

    # vgscan  查詢目前系統裏面是否有VG的磁盤

    # vgdisplay  顯示出目前系統上面的VG狀態

    # vgextend  在VG內增加額外的PV

    # vgreduce  在VG內刪除PV

    # vgchange  設置VG是否啓動(active)

    # vgremove  刪除一個VG

  PV的名稱是分區的設備文件名字,VG名稱可以自定義的,我將VG的名稱定義爲myvg

1,將/dev/sdb5-/dev/sdb7新建爲一個VG,且指定PE爲15MB

wKiom1fFOVmz88T1AAATAfkyn8Y342.png


2,查看系統上的VG狀態

wKioL1fFOPLweo5fAAAzMQZJBzg163.png


3,顯示出目前系統上面的VG狀態

  # vgdisplay

wKioL1fFOtvi5wODAAAXz0W1aHg170.png


4,新增PV給myvg

wKiom1fFPB_h_BfwAAARDwb5nmE325.png


5,顯示出目前系統上面的VG狀態

  # vgdisplay

wKioL1fFPGHjqWzIAAAXRzkTvso611.png


七,創建LV

  命令介紹:

   # lvcreate  新建LV

     lvcreate [-L N[mgt]] [-n LV名稱] VG名稱

     lvcreate [-l N] [-n LV名稱] VG名稱

注意: -L 後面接容量,最小單位爲PE, 數量必須是PE的倍數,若不相符,系統會自行計算最相近的容量

    -l 後面接PE的“個數”,而不是數量

    -n 後面接LV的名稱

   # lvscan  查詢系統LV

   # lvdisplay  顯示系統LV狀態

   # lvextend  在LV裏增加容量

   # lvreduce  在LV裏減少容量

   # lvremove  刪除一個LV

   # lvresize  對LV進行容量大小的調整

1,將整個myvg全部分配給mglv

wKioL1fFQlvhQRBDAAA4ZWjgY6k746.png  

 實驗中報錯,說是空閒空間不夠,可以接受545個,但只有544個,其原因是-L選項後面接的容量必須是PE的倍數,一個PE的容量爲15M,總容量爲7.97G,不能被15整除,故報錯,下面的是 解決方法,只要將總容量改爲能被15整除的數就好,因爲PE的大小已經確定,VG的容量是由若干個PE組成的,故VG的大小可以改變


2,查看LV情況

wKiom1fFRRCCvZZ7AABg8j35isc728.png


3,進行格式化與掛載

 # mke2fs -t ext4 /dev/myvg/mglv

 # mkdir /mnt/lvm

 # mount /dev/myvg/mglv /mnt/lvm

wKioL1fFR0HgBUEhAABjuX8bqP0709.png


4,複製文件

wKioL1fFSAGxziPBAAAT0vqt6Mo091.png


八,放大LV容量

   步驟:

  1,利用fdisk設置新的額具有8e /systemID的分區

  2,利用pvcreate構建PV

  3,利用vgextend將PV加進myvg

  4,利用lvresize將新加入的PV內的PE加入mglv中

  5,通過resize2fs將文件系統的容量增加

1,原先已經創建好/dev/sdb9分區

2,新建新的PV

wKioL1fFSYvSC7cYAABO8xEE2Fg383.png

3,增加VG容量

wKioL1fFTRWT7q-MAAAROVCcFcw544.png


wKioL1fFTZrizsztAABhDS99GkE519.png


4,增加LV容量

wKioL1fFToPR1t8zAACEsdiQ5E4409.png


5,查看

wKiom1fFTwfy-_lTAAAcLaPWk0g833.png


6,將LV的容量擴充到整個文件系統

  # dumpe2fs /dev/myvg/mglv  查看文件系統內的superblock記錄情況

  # resize2fs [-f] [device] [size]  將LV的容量擴充到整個文件系統

wKioL1fFUDrjG1KjAAAr27VgUDA312.png


7,查看

wKiom1fFUIbjD3d5AAAcPz1yNhs236.png

wKiom1fFUOKAPiGxAAAcoeeJxo4202.png


九,縮小LV容量

1,先卸載

wKiom1fFaomDo-WyAAAHLeU9-f4399.png


2,降低文件系統的容量

wKioL1fFasfRxIh4AACFnF9Z7Fg267.png


3,重新掛載並查看容量大小

wKioL1fFa0zDAfLgAAAkVx1Pi-E879.png


4,降低LV容量,抽離/dev/sdb5,這個PV有136個PE

wKioL1fFa5eyfvOQAABAzAz-ReI280.png


5,查看容量大小

wKioL1fFbIeShrruAABHAKICYSQ414.png


6,將/dev/sdb5從mgvg中移除

wKioL1fFbIfSAvsJAABBTTwfr7Q401.png


wKiom1fFbIjRX7pLAAA2xoHd2bc833.png


wKiom1fFbIjhDJzXAAAUuzrR444030.png


wKioL1fFbIiBbS81AACjNA2wzRo973.png


總結:

1,LVM最主要的用處是在實現一個可以彈性調整容量的文件系統上,而不是在新建一個性能爲主的磁盤上。LVM默認的讀寫模式是線性模式

2,實現的流程:

wKioL1fM57Si4yT0AACPliHkZzo864.png

3,刪除系統內的LVM

 1)先卸載系統上面的 LVM 文件系統(包括快照與所有LV)

 2)使用 lvremove 刪除 LV

 3)使用 vgchange -an VGname 讓 VGname 這個 VG 不具有 Active 的標誌

 4)使用 vgremove 刪除VG

 5)使用 pvremove 刪除PV

 6)使用 fdisk 將 ID 修改回來

4,PV, VG, LV 常用命令的總結

wKioL1fMveLCVRKSAAAZ0fi5pXU831.png


作業:

1:創建一個可用空間爲1G的RAID1設備,文件系統爲ext4,有一個空閒盤,開機可自動掛載至/backup目錄

[root@localhost ~]# fdisk /dev/sdb    fdisk /dev/sdc    fdisk /dev/sdd
/dev/sdb1   20975616    23072767     1048576   fd  Linux raid autodetect
/dev/sdc1    23074816    25171967     1048576   fd  Linux raid autodetect
/dev/sdd1    25174016    27271167     1048576   fd  Linux raid autodetect
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1
 Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb1
       1       8       22        1      active sync   /dev/sdc1
       2       8       23        -      spare   /dev/sdd1
[root@localhost ~]# mke2fs -j /dev/md0
[root@localhost ~]# mke2fs -t ext4 /dev/md0
[root@localhost ~]# mount /dev/md0 /backup
[root@localhost ~]# cat /etc/fstab 
UUID=1026f9f2-27e5-4e34-be98-6e75eb1e633d  /backup   ext4  defaults 0 0


2:創建由三塊硬盤組成的可用空間爲2G的RAID5設備,要求其chunk大小爲256k,文件系統爲ext4,開機可自動掛載至/mydata目錄

[root@localhost ~]# fdisk /dev/sdb  fdisk /dev/sdc  fdisk /dev/sdd
/dev/sdb5      20975616    25169919     2097152   fd  Linux raid autodetect
/dev/sdc6      25171968    29366271     2097152   fd  Linux raid autodetect
/dev/sdd7      29368320    33562623     2097152   fd  Linux raid autodetect
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 5 -n 3 -c 256 /dev/sdb5 /dev/sdc6 /dev/sdd7
[root@localhost ~]# mke2fs -j /dev/md1
[root@localhost ~]# mke2fs -t ext4 /dev/md1
[root@localhost ~]# mount /dev/md1 /mydata
[root@localhost ~]# mdadm -D /dev/md1
[root@localhost ~]# cat /etc/fstab 
UUID=3ef9776c-97dc-4b28-991b-43086a06b3ed  /mydata   ext4  defaults 0 0


1、創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG;要求PE大小爲16MB,而後在卷組中創建大小爲5G的邏輯卷testlv;掛載至/users目錄

[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb1
[root@localhost ~]# pvcreate /dev/sdb2
[root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2}
[root@localhost ~]# lvcreate -n textlv -L 5G /dev/testvg
[root@localhost ~]# mkfs.ext4 /dev/testvg/testlv
[root@localhost ~]# mkdir /users
[root@localhost ~]# mount /dev/testvg/testlv /users/

wKiom1fM6bCxrVi4AAA1ViQWCMs449.png

wKioL1fM6jfQjd0kAABF9KNXX6s719.png

wKioL1fNBanw6i2GAABKnv2_o3g877.png


2、新建用戶archlinux,要求其家目錄爲/users/archlinux,後su切換至archlinux用戶,複製/etc/pam.d目錄至自己的家目錄中

[root@localhost ~]# useradd -d /users/archlinux archlinux
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ pwd
/users/archlinux
[archlinux@localhost ~]$ cp -r  /etc/pam.d .
[archlinux@localhost ~]# ll pam.d/ | wc
     46     419    2386


3、擴展testlv至7G,要求archlinux用戶的文件不能丟失

[root@localhost ~]# lvextend -L 7G /dev/testvg/textlv
[root@localhost ~]# resize2fs /dev/testvg/textlv
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ ll pam.d/ | wc
     46     419    2836

wKiom1fNBr3TUxfaAABKdeND0Wg409.png


4、收縮testlv至3G,要求archlinux用戶的文件不能丟失

[root@localhost ~]# umount /dev/testvg/testlv
[root@localhost ~]# e2fsck -f /dev/testvg/testlv 
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
[root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv 
[root@localhost ~]# mount /dev/testvg/testlv /users/
[root@localhost ~]# ll /users/archlinux/pam.d/ | wc

     46     419    2836

wKioL1fNB3-AQPgFAABKKBtiQoE730.png


5、對testlv創建快照,並嘗試基於快照備份數據,驗正快照的功能

[root@localhost ~]#  lvcreate -L 1G -p r -s  -n testlv-snap  /dev/testvg/testl
[root@localhost ~]# mkdir /mnt/snap
[root@localhost ~]# mount /dev/testvg/testlv-snap /mnt/snap/
[root@localhost ~]# rm -f /users/archlinux/pam.d/c*
[root@localhost ~]# ls /users/archlinux/pam.d/c*
ls: cannot access /users/archlinux/pam.d/c*: No such file or directory
[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/c*
/mnt/snap/archlinux/pam.d/chfn         /mnt/snap/archlinux/pam.d/crond
/mnt/snap/archlinux/pam.d/chsh         /mnt/snap/archlinux/pam.d/cups
/mnt/snap/archlinux/pam.d/config-util

wKioL1fNCC_yYBveAABRrcb1j7I285.png

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