Linux LVM

Linux LVM

前言

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。無論在Linux或者其他類似的系統,都是 非常的好用。傳統分區使用固定大小分區,重新調整大小十分麻煩。但是,LVM可以創建和管理“邏輯”卷,而不是直接使用物理硬盤??梢宰尮芾韱T彈性的管理 邏輯卷的擴大縮小,操作簡單,而不損壞已存儲的數據??梢噪S意將新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷。LVM并不需重啟就可以讓內核知道分區的存在。

LVM分層結構

1.jpg

    圖中頂部,首先是實際的物理磁盤,其劃分的分區并且創建的物理卷(PV)。一個或多個物理卷可以用來創建卷組(VG)。然后基于卷組可以創建邏輯卷 (LV)。只要在卷組中有可用空間,就可以創建邏輯卷。文件系統就是在邏輯卷上創建的,然后在操作系統掛載和訪問。

LVM測試說明

    本文將介紹如何在linux中創建和管理LVM卷。我們將會分成兩個部分。第一個部分,我們首先要在一個硬盤上創建多個邏輯卷,然后將它們掛載在/lvm_data目錄。最后將對創建好的卷調整大小。而第二部分,我們將會從另外一塊硬盤增加額外的卷到LVM中。

實驗步驟

(一)準備磁盤分區

    通過使用fdisk創建3個分區,分別為3G、5G、8G。分區的大小不要求一致。注意:創建LVM需要調整分區類型為'8e'。

[root@vm227 ~]# fdisk /dev/sdb
Command (m for help): n ## 新建
Command action
     e   extended
     p   primary partition (1-4)
    p ## 主分區
    Partition number (1-4): 1 ## 分區號
    First cylinder (1-1044, default 1):  ## 回車用默認的1
    Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +3G ## 大小
    ####重復上面的操作來創建另外兩個分區### 
    Command (m for help): t ## 改變類型
    Selected partition 1
    Hex code (type L to list codes): 8e ## LVM 的分區代碼
    Changed system type of partition 1 to 8e (Linux LVM)
    Command (m for help): p ## 顯示類型
       Device Boot     Start       End      Blocks   Id    System
     /dev/sdb1            1         393      3156741   8e   LinuxLVM
    /dev/sdb2           394        1047     5253255    8e   Linux LVM
    /dev/sdb3          1048        2092     8393962+   8e   Linux LVM
    Command (m for help): w ## 保存退出
    
[root@vm227 ~]# partx -a /dev/sdb  ###使分區生效

(二)創建物理卷(PV)

    在剛創建好的分區上創建物理卷。創建PV命令:pvcreate

[root@vm227 ~]# pvcreate /dev/sdb{1,2,3}
    Physical volume "/dev/sdb1" successfully created
    Physical volume "/dev/sdb2" successfully created
    Physical volume "/dev/sdb3" successfully created
  ####使用命令pvs(簡單)和pvdisplay(詳細)查看物理卷的創建情況#####   
[root@vm227 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1      lvm2  a--   3.01g   3.01g
  /dev/sdb2      lvm2  a--   5.01g   5.01
  /dev/sdb3      lvm2  a--   8.01g   8.01g
[root@vm227 ~]# pvdisplay 
  "/dev/sdb2" is a new physical volume of "5.01 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdb2
   VG Name              
   PV Size               5.01 GiB
   Allocatable           NO
   PE Size               0  
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               N7EHil-Piij-pH85-hTTX-o5KD-iWYb-cocFA0

  ####刪除物理卷使用命令:pvremove ####
[root@vm227 ~]# pvremove /dev/sdb1

(三)創建卷組(Vg)

    在剛創建好的PV上創建名為'volume-group1'的卷組,創建卷組命令:vgcreate

    vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]
                    -s:用指定PE大小

[root@vm227 ~]# vgcreate volume-group1 /dev/sdb{1,2,3}
  ###使用下列命令可以來驗證卷組。vgs(簡單) 和vgdisplay(詳細)####
[root@vm227 ~]# vgdisplay
  --- Volume group ---
     VG Name               volume-group1
     System ID            
     Format                lvm2
     Metadata Areas        3
     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                3
     Act PV                3
     VG Size               16.02 GiB
     PE Size               4.00 MiB
     Total PE              4101
     Alloc PE / Size       0 / 0  
     Free  PE / Size       4101 / 16.02 GiB
     VG UUID               Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO

  ###以上信息可以看出創建名為volume-group1卷組的使用量/總量信息。只要卷組中還有可用(Free)空間,就可以隨意創建邏輯卷(lv)。這里沒有指定PE大小,默認為4M####

####刪除卷組使用vgremove####
[root@vm227 ~]# vgremove volume-group1

(四)創建邏輯卷(LV)

    在創建好的VG上創建名為'mysqldata'、大小為2GB的邏輯卷。創建卷組命令:vgcreate

    lvcreate -L #[mMgGtT] -n LV_NAME VolumeGroupName
     

            -L: 指定創建lv容量大小
     

            -n: 指定lv卷組名字

[root@vm227 ~]# lvcreate -L 2G -n mysqldata volume-group1 
  ####邏輯卷可使用lvs(簡單)和lvdisplay(詳細)命令查看####
[root@vm227 ~]# lvdisplay 
 --- Logical volume ---
  LV Path                /dev/volume-group1/mysqldata
  LV Name                mysqldata
  VG Name                volume-group1
  LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
  LV Write Access        read/write
  LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  ###創建成功,命名格式為:/dev/volume-group1/mysqldata####

邏輯卷命令格式:

  在/dev目錄下/dev/mapper/VG_NAME-LV_NAME和/dev/VG_NAME/LV_NAME分別為/dev/dm-# 入口

格式化掛

[root@vm227 ~]# mkfs.ext4 /dev/volume-group1/mysqldata
[root@vm227 ~]# mkdir /lvm-data
[root@vm227 ~]# mount /dev/volume-group1/mysqldata /lvm-mount/ 
[root@vm227 ~]# cd /lvm-data/
[root@vm227 lvm-data]# ll
total 16
drwx------ 2 root root 16384 Apr 24 12:59 lost+found
[root@vm227 lvm-data]# cp /etc/issue .
[root@vm227 lvm-data]# ll
total 20
-rw-r--r-- 1 root root    47 Apr 24 14:47 issue
drwx------ 2 root root 16384 Apr 24 12:59 lost+found
  ####邏輯卷掛載完成,并且可以讀寫了####
  ####要創建和掛載其它的邏輯卷,我們重復以上過程####
  ####使用lvremove我們可以刪除邏輯卷####
[root@vm227 ~]# umount /lvm-data/
[root@vm227 ~]# lvremove /dev/volume-group1/mysqldata

(五)擴展卷組(LV)

    調整邏輯卷大小的功能是LVM最有用的功能。下面我們將會把先前創建的邏輯卷‘mysqldata’擴大至6G。擴展邏輯卷,首先擴展物理邊界,然后擴展文件系統邊界。

    擴展物理使用命令:vgextend

   lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

    擴展文件系統使用命令:resize2fs

   resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

[root@vm227 ~]# lvextend -L 6G /dev/volume-group1/mysqldata 
  		Extending logical volume mysqldata to 6.00 GiB
 		Logical volume mysqldata successfully resized
[root@vm227 ~]# lvdisplay 
  	--- Logical volume ---
  	LV Path                /dev/volume-group1/mysqldata
  	LV Name                mysqldata
  	VG Name                volume-group1
 	LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
    LV Write Access        read/write
  	LV Creation host, time m227.happy.local, 2016-04-24 11:45:16 +0800
  	LV Status              available
	# open                 1
	LV Size                6.00 GiB
	Current LE             1536
	Segments               2
	Allocation             inherit
	Read ahead sectors     auto
	- currently set to     256
	Block device           253:1
[root@vm227 ~]# df -h
	Filesystem                            Size  Used Avail Use% Mounted on
	/dev/sda3                 				19G  1.3G   17G   8% /
	tmpfs                                 491M     0  491M   0% /dev/shm
	/dev/sda1                             194M   29M  155M  16% /boot
	/dev/mapper/volume--group1-mysqldata  2.0G   68M  1.9G   4% /lvm-data
	#####可以看到已經成功提擴展成6G了,但是文件系統還是2G,下面擴展文件系統####
[root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 6G
	resize2fs 1.41.12 (17-May-2010)
	Filesystem at /dev/volume-group1/mysqldata is mounted on /lvm-data; on-line resizing required
	old desc_blocks = 1, new_desc_blocks = 1
	Performing an on-line resize of /dev/volume-group1/mysqldata to 1572864 (4k) blocks.
	The filesystem on /dev/volume-group1/mysqldata is now 1572864 blocks long.
[root@vm227 ~]# df -h
	Filesystem                            Size  Used Avail Use% Mounted on
	/dev/sda3                  			  19G  1.3G   17G   8% /
	tmpfs                                 491M     0  491M   0% /dev/shm
	/dev/sda1                             194M   29M  155M  16% /boot
	/dev/mapper/volume--group1-mysqldata  6.0G   68M  5.6G   2% /lvm-data

	####已經成功擴成功#####

(六)縮減邏輯卷(LV)

    縮減LVM卷大小,命令的順序相當重要。注意:縮減危險系統很高,操作請謹慎。減少邏輯卷的空間大小一定要大于儲存的數據大小,否則存儲在后面的數據會丟失或者損壞。

    減小邏輯卷大小使用命令:lvreduce
     lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
 

[root@vm227 ~]# df -h ###查看空間使用情況
[root@vm227 ~]# umount /dev/volume-group1/mysqldata   ###卸載掛載卷。
[root@vm227 ~]# e2fsck -f /dev/volume-group1/mysqldata ###檢測磁盤錯誤。 
[root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 4G  #### 縮小文件系統。
[root@vm227 ~]# lvreduce -L 4G /dev/volume-group1/mysqldata   ####減少邏輯卷大小
WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to mysqldata to 4.00 GiB Logical volume mysqldata successfully resized

  #####最后,驗證調整后的邏輯卷大小####

[root@vm227 ~]# lvdisplay
  --- Logical volume ---
    LV Path                /dev/volume-group1/mysqldata
    LV Name                mysqldata
    VG Name                volume-group1
    LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
    LV Write Access        read/write
    LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800
    LV Status              available
    # open                 0
    LV Size                4.00 GiB
    Current LE             1024
    Segments               2
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:1
[root@vm227 ~]# df -h
  Filesystem               Size  Used Avail Use% Mounted on
  /dev/sda3                19G  1.3G   17G   8% /
  tmpfs                    491M     0  491M   0% /dev/shm
  /dev/sda1                194M   29M  155M  16% /boot
  /dev/mapper/volume--group1-mysqldata   4.0G   68M  5.6G   2% /lvm-data

 ####縮減成功####

(七)擴展卷組(VG)

    下面介紹擴展卷組的方法,將一個物理卷添加到卷組。假設我們的卷組'volume-group1'已經滿了需要擴大。但硬盤(sdb)已經沒有空閑容量,增加了另外一個硬盤(sdc),如何把sdc的分區添加到卷組以擴展。

[root@vm227 ~]# vgdisplay volume-group
 --- Volume group ---
   VG Name               volume-group1
   System ID            
   Format                lvm2
   Metadata Areas        3
   Metadata Sequence No  4
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                1
   Open LV               0
   Max PV                0
   Cur PV                3
   Act PV                3
   VG Size               16.02 GiB
   PE Size               4.00 MiB
   Total PE              4101
   Alloc PE / Size       1024 / 4.00 GiB
   Free  PE / Size       3077 / 12.02 GiB
   VG UUID                Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO

  ####硬盤/dev/sdc分區/dev/sdc1###
  ####如何給硬盤/dev/sdc分區,就不介紹了###

[root@vm227 ~]# # pvcreate /dev/sdc1

    物理卷已經準備好了,將它增加到已存在的卷組'volume-group1'上。

    增加VG使用命令:vgextend 

    vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]

[root@vm227 ~]# vgextend volume-group1 /dev/sdc1 
  ####使用vgdisplay來驗證(可以看到卷組大小已經增大)####
[root@vm227 ~]# vgdisplay 
   --- Volume group ---
    VG Name               volume-group1
    System ID            
    Format                lvm2
    Metadata Areas        4
    Metadata Sequence No  5
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                1
    Open LV               0
    Max PV                0
    Cur PV                4
    Act PV                4
    VG Size               19.03 GiB
    PE Size               4.00 MiB
    Total PE              4871
    Alloc PE / Size       1024 / 4.00 GiB
    Free  PE / Size       3847 / 15.03 GiB
    VG UUID               Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO
 
以上看到卷組已經成功擴展了。

(八)縮減卷組(VG)

    縮減VG使用命令:vgreduce

   vgreduce之前先做pvmove 移動PE

   pvmove PhysicalDevicePath [PhysicalDevicePath…]

     vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]

(九)快照組(snapshot)

    快照卷是將元數據重新復制一份做為快照卷訪問入口,當數據本身發生變化時,將數據復制一份到快照空間,然后修改原數據,快照卷主要用于數據備份,創建的快照卷必須要和邏輯卷在同一卷組上,并且快照卷大小要大于等于快照卷存在周期內數據增長量。

    創建快照使用命令:lvcreate

  lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name(快照卷名字) original_lv_name(原卷名字)

    -L:指定快照卷大小

    -p: 指權限,一般為只讀

    -s: 指創建為快照卷

    -n:指定快照卷名字

如:# lvcreate -L 6G -p r -s -n snap_mysql /dev/volume-group1/mysqldata

    刪除快照使用命令:lvremove

  lvremove  snapshot_lv_name

總結

總結一下,LVM是一個非常給力的工具,用來創建和管理可變大小的分區。本文中,我們介紹了動態分區如何在LVM中創建和使用。我們也介紹了擴展/縮小邏輯卷和卷組的方法和如何增加一個新的磁盤到LVM。

水平有限, 還有許多不足之處,以后慢慢改進,如果有錯誤及時指出,謝謝!!!~ 
作者: chrony QQ: 840595308 
感謝: MageEdu

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

(0)
chronychrony
上一篇 2016-04-24 16:37
下一篇 2016-04-25 21:13

相關推薦

  • Elasticsearch 5.0 集群

    IT運維 www.chinasa.net 下載地址:https://www.elastic.co/downloads/elasticsearch 1、JDK 安裝略過 node1 部署 2、Elasticsearch安裝 #tar zxvf elasticsearch-5.0.0.tar.gz -C /opt/ #cd /opt #mv elast…

    系統運維 2016-12-27
  • DNS服務器之理論基礎

    一、什么是DNS     DNS全稱為Domain Name System,即域名系統,其作用就是將我們經常使用的“網址”解析為IP地址。     在互聯網上通信需要借助于IP地址,但人類對于數字的記憶能力遠不如文字,那么將IP地址轉換成容易記憶的文字是個好辦法,可是計算機只能識…

    Linux干貨 2015-04-29
  • LAMP基于rsyslog+loganalyzer實現日志集中管理及分析

    前言 作為一名運維工程師,查看分析系統日志是每天必做的功課,但每次查看日志都得一臺服務器一臺服務器的看,幾臺服務器還可以這么對付,但如果管理成百上千臺線上服務器,這種方法就捉襟見肘了。于是我們就需要用到日志服務器了,但是如何能讓它更直觀的顯示呢?loganalyzer是一個不錯的選擇,本文將講解如何使用rsyslog+loganalyze實現日志統一管理及分…

    Linux干貨 2015-04-27
  • 接51CTO:13 用戶組和權限管理3

    用戶組和權限管理3 一、雜項知識整理 1、硬鏈接:寫源文件可以是相對地址,相對于鏈接文件。例如 [root@localhost testdir]# ln ../etc/fstab aaa ln: 無法創建硬鏈接"aaa" => "../etc/fstab…

    Linux干貨 2016-08-04
  • Bob大叔和Jim Coplien對TDD的論戰

    今年春節時,我寫了一篇《TDD并不是看上去的那么美》,在這篇文章中我列舉了一些關于使用TDD的一些難點和對TDD的質疑,后來出現了一些爭論(可參見那篇文章的評論),以及Todd同學的《TDD到底美不美》,還有infoQ中文上的那個幾乎沒有營養離線討論。今天,有網友給我推來一個英文版infoQ的視頻——“Coplien and Martin Debate TD…

    Linux干貨 2016-08-15
  • 淺談篩選日志中的IP地址信息

    作為運維人員,經常會需要會對日志中的某些重要信息進行篩選,比如說ip等參數。 案例一:篩選出IP地址信息 日志信息如下: [root@C67-X64-A1 hanghang]# cat test.txt  Jul 13 08:13:09 localhost sshd[14678]…

    系統運維 2016-07-22

評論列表(1條)

  • stanley
    stanley 2016-04-26 09:53

    最后的聯系方式亮了,不擔心被爬蟲抓?

欧美性久久久久