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

原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/43716

(0)
pingskypingsky
上一篇 2016-09-06
下一篇 2016-09-06

相關推薦

  • 搭建最基礎的DNS服務

    搭建一個簡單的DNS為了更方便和清晰的了解DNS的作用,通過搭建一個簡單的DNS服務來學習。 在搭建之前,先簡單了解一下DNS的工作原理 客戶端把訪問的域名傳遞給DNS服務器a,如果有記錄,則將IP傳遞給客戶端 DNS服務器a沒有記錄,則以遞歸方式訪問其他服務器。首先訪問根域 根域將匹配的一級域名DNS服務器b地址傳遞給DNS服務器a DNS服務器a再去訪問…

    Linux干貨 2017-07-26
  • 網絡基礎

    計算機網絡     計算機網絡,是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。 1、網絡通信設備     網絡通信設備種類繁多,且日新月異,網絡通信設備通常由網絡線纜、網卡、集線器、中繼器、網橋、交換機、路由器等組成。 網橋(Bri…

    Linux干貨 2016-12-16
  • N_28 linux基礎知識

    1.計算機的組成
    2.linux的各發行版
    3.linux的哲學思想
    4.一些linux的基本命令
    5.幫助信息
    6.FHS

    2017-12-01
  • rpm和yum的使用,程序包編譯安裝以及編譯apache過程中出現的問題

    一、rpm包管理          用法: rpm [選項…]              查詢/驗證軟件包選項:   &nbsp…

    Linux干貨 2016-03-19
  • N25第六周博客作業

    第六周博客作業   請詳細總結vim編輯器的使用并完成以下練習題 1、 復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; :%s@^\([[:space:]]\+\)@#\1@ig    2、 復制/boot/grub/grub.con…

    Linux干貨 2017-01-10
  • C語言結構體里的成員數組和指針

    單看這文章的標題,你可能會覺得好像沒什么意思。你先別下這個結論,相信這篇文章會對你理解C語言有幫助。這篇文章產生的背景是在微博上,看到@Laruence同學出了一個關于C語言的題,微博鏈接。微博截圖如下。我覺得好多人對這段代碼的理解還不夠深入,所以寫下了這篇文章。 為了方便你把代碼copy過去編譯和調試,我把代碼列在下面: final void&n…

    Linux干貨 2016-05-29
欧美性久久久久