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
下一篇 2016-04-25

相關推薦

  • Linux文件系統的創建、檢測、修復、分區等工具的使用

    一、文件系統管理 什么是文件系統?     我的理解是文件系統是對磁盤上的數據和文件結構的管理規范。     如果文件系統沒有繼承性,那么以前文件系統的數據就無法傳到新的文件系統中。     Linux的文件系統有這么幾種:ext2, ex…

    系統運維 2016-03-03
  • BT雷人的程序語言

    這個世界從來都不會缺少另類的東西,人類自然世界如此,計算機世界也一樣。編程語言方面,看過本站《6個變態的C語言Hello World程序》的朋友們一定對BT和另類不會陌生,但那都是些小兒科,真正的BT和另類要是從語言級上來完成。讓我們來看看其中一個比較另類的語言BrainFuck??吹竭@個程序語言的名字,請不要以為這是一個搞笑的語言,這是一個“嚴肅事情”,請…

    Linux干貨 2015-04-03
  • 如何理解云計算中IaaS、PaaS和SaaS?很簡單,就像吃貨想吃披薩了…

                                                      &nbsp…

    2015-04-17
  • Linux磁盤及文件系統管理

    磁盤(Hard Disk Drive,簡稱HDD)是一種存儲介質,傳統的機械硬盤由一個或多個鋁制或玻璃制的碟片組成,碟片外覆蓋有鐵磁性材料。 磁盤的物理結構一般由磁頭與碟片、電動機、主控芯片與排線等部件組成;當主電動機帶動碟片旋轉時,副電動機帶動一組(磁頭)到相對應的碟片上并確定讀取正面還是反面的碟面,磁頭懸浮在碟面上畫出一個與碟片同心的圓形軌道(磁軌或稱柱…

    Linux干貨 2015-04-20
  • 恐怖的C++語言

    Linus曾經(2007年9月)在新聞組gmane.comp.version-control.git里和一個微軟的工程師(Dmitry Kakurin)爭執過用C還是用C++,當時的那個微軟的工程師主要是在做Git的Windows版,但他卻發現Git的源碼居然是C語言寫的,而不是C++,于是他(Dmitry Kakurin)在Linux社區里發貼表示對Lin…

    Linux干貨 2015-04-03
  • linux 基礎命令(四)

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。 [root@localhost home]# cp -r /etc/skel/ /home/tuser1 [root@localhost home]# c…

    Linux干貨 2016-10-16

評論列表(1條)

  • stanley
    stanley 2016-04-26 09:53

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

欧美性久久久久