LVM基礎

什麼是LVM

LVM是邏輯盤卷管理(LogicalVolumeManager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和 分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理員可以輕鬆管理磁盤分區,如:將若干個磁盤分區連接爲一個整塊的卷組 (volumegroup),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logicalvolumes),並進一步在邏輯卷組上創建文件系統。    

管理員通過LVM可以方便的調整存儲卷組的大小,並且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:"development"和"sales",而不是使用物理磁盤名"sda"和"sdb"。而且當系統添加了新的磁盤,通過LVM管理員就不必將磁盤的 文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。

如何管理磁盤

如果使用邏輯卷管理磁盤,需要如下的步驟:

  1. 將磁盤設置成爲物理卷,一個磁盤可以是物理卷,一個分區可以是物理卷,RAID也可以是物理卷
  2. 將物理卷組成卷組,這就相當於把底層的磁盤無論是分區還是RAID還是單個磁盤,進行組合,讓我們看起來他就像是一塊盤一樣。
  3. 接下來,我們可以在卷組中分出一部分邏輯卷,格式化,掛載,使用。

實驗操作

接下來我們通過實驗來說明如何通過邏輯捲來管理我們的磁盤,實現在不關機的情況下,對磁盤的容量進行增加或減少。

    我們先介紹命令,在實現各種操作:

物理卷PV管理

創建物理卷

    命令:pvcreate

        -y:自動yes

        -u:通過UUID創建

    一般我們可以直接創建,及pvcreate /dev/sdv

查看物理卷:

    pvs :顯示簡略信息,可以跟設備,也可以不跟

    pvdisplay:顯示詳細信息

卷組vg管理

創建卷組

    命令:vgcreate

    格式:vgcreate [option] volumeGroup physicalDevicePath [+]

    參數:

        -s:設置物理捲上PE的大小

-l:卷組上允許創建的最大邏輯卷數

-p:卷組中允許添加的最大物理卷數

查看卷組

    vgs:查看卷組的大概信息

    vgdisplay:查看卷組的詳細信息

    如:vgs /dev/vg0

管理卷組

    vgextend:卷組擴展

    vgreduce:卷組縮減

    如:vgextend /dev/vg0 /dev/sdb /dev/sdc

    vgreduce /dev/vg0 /dev/sdb /dev/sdd

刪除卷組

    先刪除物理卷pvmove

    再刪除卷組vgmove

邏輯卷lv管理

創建邏輯卷

    命令:lvcreate

    格式:

        lvcreate –L [MGT] –n lv_name VolumeGroup

        lvcreate –l 60%VG –n lv_name VolumeGroup

        lvcreate –l 100%FREE –n lv_name VolumeGroup

查看邏輯卷

    lvs:查看lv大概信息

    lvdisplay:查看lv詳細信息

邏輯卷管理

    lvextend:邏輯卷擴展

    lvreduce:邏輯捲縮減

刪除邏輯卷

    lvremove:刪除邏輯卷

    例如:

lvremove /dev/vg0/lv0

上面的命令並不是我們需要的所有命令,還有一部分的明林我們在實驗過程中在來介紹。接下來我們進行幾個實驗,包括基本的邏輯卷的創建掛載,擴展邏輯卷,減少邏輯卷,將某塊硬盤從LVM中剝離,將LVM遷移。

實驗一 基本邏輯卷的創建掛載

在創建可用的邏輯卷之前,我們需要幾塊硬盤,我的是實驗硬盤是一個RAID5的一個分區(50G)一個獨立硬盤(50G)

第一步:

    創建物理卷,在我們創建物理卷之前,如果我們使用的是一個分區,我們需要將其轉換成Linux LVM,方式如下:

接下來創建物理卷:

    pvcreate /dev/md0p1

    pvcreate /dev/sdg

物理卷創建完成後,我們可以看一個物理卷的詳細信息:以/dev/sdg爲例:

物理卷創建完成後我們將這兩個物理卷合併成一個卷組:

    命令:vgcreate -s 8M –n /dev/vg0 /dev/md0p1 /dev/sdg

接下來,我們查看一下卷組的詳細信息:

    命令:vgdisplay

接下來,我們從卷組裏要創建一個邏輯卷,讓後分區掛載,使用。

    命令:lvcreate –L 60G –n /dev/vg0/lv0 /dev/vg0

            mke2fs –t ext4 /dev/vg0/lv0

我們查看一下:

前面的步驟我們都完成了,接下來,我們將這個創建完文件系統的邏輯卷掛載到目錄下看看:

這時候我們已經算是完成了,可以盡情的使用我們剛剛掛載的文件系統的(LVM創建)的。但是,我們發現了一個問題,我們創建的明明是/dev/vg0/lv0,

爲啥掛載上之後變成了/dev/mapper/vg0-lv0呢?很奇怪,我們查看一下這個邏輯捲到底是咋回事:

我們發現,無論是/dev/vg0/lv0,還是/dev/mapper/vg0-lv0,都只是一個鏈接文件,最終連接的都是一個dm-0的設備,因爲在實際中,LVM只是一個管理工具,最終都是在管理/dev/dm-X設備。

dm: device mapper: 將一個或多個底層塊設備組織成一個邏輯設備的模塊

實驗二 擴展邏輯卷

有時候我們的分區會不夠用,特別是作爲一個數據盤的時候,如果是一個普通的硬盤直接分區,我們如果想擴展分區大小,我們必須先停掉業務,卸載分區,讓後拷貝數據,新建分區大小,但是如果我們是在用LVM管理我們的硬盤的話,我們可以直接在不停機的狀態下直接將我們使用的分區進行擴展,接下來,我們就來看一下如何操作的。

首先,我們看一下我們的卷組VG還有沒有可用的空間:

我們可以看到,卷組還有40G的可用空間,所以我們可以使用卷組剩餘的空間直接擴展:

    命令:lvextend –l +100%FREE /dev/vg0/lv0

雖然我們已經將邏輯卷擴展了,但是我們可以發現分區的實際大小並沒有變化,這是由於我們雖然已經擴容,但是擴容的這部分並沒有文件系統,我們需要給剩餘的空間進行格式化,創建文件系統,接下來我們講一個命令:resize2fs

resize2fs命令被用來增大或者收縮未加載的"ext2/ext3"文件系統的大小。如果文件系統是處於mount狀態下,那麼它只能做到擴容,前提條件是內核支持在線resize。

所以,我們可以使用這個命令對我們的分區進行在線擴容,而不必卸載文件系統。

如:resize2fs /dev/vg0/lv0

擴容成功。

可是有時候,我們的卷組VG並沒有多餘的空間,此時我們在查看是否有多餘的物理卷,如果沒有多餘的物理卷,我們就需要添加硬盤,創建物理卷,添加到卷組,在從卷組對我們的分區進行擴容,我演示一遍:

我先是添加一塊硬盤/dev/sdf,創建物理卷:

添加到卷組VG:

    命令:vgextend

擴展分區:

    命令:

lvextend -L +20G -r /dev/vg0/lv0

可在lvextend 時加-r 直接一步到位,先擴展邏輯卷大小後直接增加文件系統大小

擴容成功

 

 

實驗四 減小邏輯卷

邏輯卷的縮減,餓哦們值作爲一個演示,因爲在實際的生產環境中很少有人去縮減邏輯卷。只有我們的磁盤不夠用的時候我們往上天磁盤,或者我們的磁盤壞了的話我們會跟換新磁盤,要麼就是數據遷移。這幾種情況除了更換就是增加,幾乎沒有需要減小容量的情況,並且,減小邏輯卷僅是ext文件系統支持,但是作爲學習,我們進行演示。

首先第一步,我們需要卸載掛載,我們就以上一個實驗所創建的分區來做實驗。

然後我們對文件系統進行檢測,防止有壞掉的分區信息,不然那,一會我們在減去一部分邏輯卷之後會造成無法使用。還有就是我們剪掉的大小必須小於分區剩餘大小。

接下來我們使用resize2fs命令重新對分區進行調整:

保留90G

接下來我們再講去格式化的邏輯卷空間從邏輯卷中移除:

此時我們將邏輯卷分區重新掛載在目錄下,就可以繼續使用了。

 

實驗五 將某塊硬盤從LVM中剝離

本次實驗我使用的是兩塊50G的硬盤,在硬盤上會有數據,完成數據的移動並刪除一塊硬盤將硬盤取出。

我把此分區掛載在/bakup下並將/etc/下的數據全部拷到了此文件系統下,由於我們使用的是兩塊盤,如果我想剝離的是/dev/sdf這塊盤的話,我們並不知道數據是否會在這個盤上存有一部分,此時我們需要將數據進行遷移到同邏輯卷的其他磁盤上去。

    我們看到,我們想要剝離sdf,需要將sdf上面的PE數據塊轉移到sdg上去,我們才能剝離sdf,這樣可以方式數據丟失。

命令:pvmove

    如:pvmove /dev/sdf [/dev/sdg]

然後我們在看物理卷的情況:

此時我已經將數據塊全部遷移到了sdg上面來,接下來,我們一步一步剝離sdf:

先是將物理卷從卷組中移出去:

    vgreduce /dev/vg0 /dev/sdf

卷組大小已經變化,但是物理卷還在,接下來我們移除物理卷:

在我們移除物理卷之後已經相當於把硬盤給卸掉了,此時我們的硬盤sdf可以隨時拔掉,接下來,我們將此文件系統重新掛載,看看數據是否損壞:

我們的數據都還在,沒有丟失。完成。

LVM數據遷移

由於我在實驗環境下安裝的全部都是50G的硬盤(虛擬機中),爲了防止無法找不到硬盤,所以我就重新在加一塊80G的硬盤。

由於是在一個主機裏,所以我們一定要注意我們放進去的這個30G硬盤創建LVM時,千萬不能和目標系統的vg名一樣,這樣會導致錯誤發生,lv名一樣不一樣就無所謂了。

    首先我們需要對目標磁盤進行創建LVM格式和要遷移數據的盤一樣。

 

文件系統:

 

接下來,我在原文件系統中寫入一個文件dudu.txt內容是/etc/passwd的內容,然後卸載文件系統,第一步轉移PE數據塊:

將數據移到目標磁盤對應的PV上。(該磁盤不要有其他與該PV無關的分區

然後我們再移動除要移動的PV以外的其他PV

    vgreduce vg名 /dev/pv(多餘)

移除後,我們先掛載一下,看數據是否還在

數據還在,沒問題

接下來,我們需要卸載,禁用卷組,設置導出標記禁止訪問

vgchange命令用於修改卷組的屬性,經常被用來設置卷組是處於活動狀態或非活動狀態。處於活動狀態的卷組無法被刪除,必須使用vgchange命令將卷組設置爲非活動狀態後才能刪除。

vgexport / vgimport不需要將驅動器從一個系統移動到另一個系統。它是一個管理策略工具,以防止在移動卷時需要訪問卷

禁用卷組:vgchange –an /dev/vg0

設置導出標記禁止訪問:vgexport /dev/vg0

接下來我們需要做的是關閉此係統,將磁盤轉移到其他機器上繼續使用,由於我是用的虛擬機,需要將系統關機才能使用,如果是物理機,磁盤支持熱插拔,可以不關閉系統,直接將數據轉移。

 

接下來我們將其安裝在centOS 7上,並執行以下操作

pvscan

pvscan

pvscan

vgimport /dev/vg0設置導出標記開啓訪問

vgchange –ay /dev/vg0 起用卷組

pvscan指令會掃描系統中連接的所有硬盤,列出找到的物理卷列表

pvscan指令會掃描系統中連接的所有硬盤,列出找到的卷組列表

pvscan指令會掃描系統中連接的所有硬盤,列出找到的邏輯卷列表

接下來我們把它掛載於/bakup下,看看文件是否還在

實驗完成。

LVM快照

LVM對LV提供的快照功能,只對LVM有效。

 

當一個snapshot創建的時候,僅拷貝原始卷裏數據的元數據(meta-data)。創建的時候,並不會有數據的物理拷貝,因此snapshot的創建幾乎是實時的,當原始捲上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始捲上將要改變的數據在改變之前被拷貝到snapshot預留的空間裏,因此這個原理的實現叫做寫時複製(copy-on-write)。

在寫操作寫入塊之前,將原始數據移動到 snapshot空間裏,這樣就保證了所有的數據在snapshot創建時保持一致。而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始捲上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。

創建snapshot的大小並不需要和原始卷一樣大,其大小僅僅只需要考慮兩個方面:從shapshot創建到釋放這段時間內,估計塊的改變量有多大;數據更新的頻率。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那麼這個snapshot立刻被釋放,從而無法使用,從而導致這個snapshot無效。

注意:採取CoW實現方式時,snapshot的大小並不需要和原始卷一樣大,其大小僅僅只需要考慮兩個方面:從shapshot創建到釋放這段時間內,估計塊的改變量有多大;數據更新的頻率。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那麼這個snapshot立刻被釋放,從而無法使用,從而導致這個snapshot無效。所以,非常重要的一點,一定要在snapshot的生命週期裏,做完你需要做得事情。

 

我創建一個10G的邏輯卷,並在裏面寫入數據,創建一個快照

然後我在原始卷裏寫入數據:LiuDehua.mp4

讓後我們可以看看快照的一些變化:

我們可以發現,快照的數據區發生了變化,比着之前有所增加,我們把快照掛載起來,看看裏面的是否有Liudehua.mp4

我們發現快照區內依然保存的是原始數據,並沒有發生變化,接下來我們將快照還原,我們在還原之前,必須卸載要恢復的文件系統和快照:

lvconvert --merge /dev/vg0/lv0-snap

我們可以知道,恢復快照以後,不僅是數據恢復了快照時的狀態,快照也消失不見了。

除了恢復快照外,如果我們不想要快照了,我們也可以手動刪除:

lvremove /dev/vg0/lv0-snap

 


補充(2108-3-1)

 

1)ext2/ext3/ext4文件系統的調整命令是resize2fs(增大和減小都支持)

lvextend -L 120G /dev/mapper/centos-home//增大至120G
lvextend -L +20G /dev/mapper/centos-home//增加20G
lvreduce -L 50G /dev/mapper/centos-home//減小至50G
lvreduce -L -8G /dev/mapper/centos-home//減小8G
resize2fs /dev/mapper/centos-home            //執行調整

  

 

2)xfs文件系統的調整命令是xfs_growfs(只支持增大)

lvextend -L 120G /dev/mapper/centos-home    //增大至120G
lvextend -L +20G /dev/mapper/centos-home    //增加20G
xfs_growfs /dev/mapper/centos-home          //執行調整
 
就是說:xfs文件系統只支持增大分區空間的情況,不支持減小的情況(切記!!!!!)。
硬要減小的話,只能在減小後將邏輯分區重新通過mkfs.xfs命令重新格式化才能掛載上,這樣的話這個邏輯分區上原來的數據就丟失了。如果有重要文件,那就歇菜嘍~~~

  

 

 

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