近來,隨着課程的深入,開始接觸到lvm邏輯卷。由開始的不懂,到現在的半知半懂,慢慢的感受到了lvm邏輯卷由內而外散發出的魅力。作爲一個小白,爲了能更好地學習和理解lvm邏輯卷的知識,特趁着難得的休息時間,總結一下自己所學的關於lvm邏輯卷的知識,有錯誤的地方,請各位大神指正,共同學習!
本人認爲lvm邏輯卷主要有兩大魅力:
1、邏輯卷的邊界是可變化的。
2、lvm支持快照(snapshot)。
各位看官彆着急,且聽小生慢慢說來:
前言
首先,讓我們思考一個問題:爲什麼會出現LVM技術?
本人是這樣認爲的:對於我們常用PC的人來說,我們總是不得不對磁盤執行分區。硬盤分區是一種令人厭煩,但公認是使操作系統設置和運行進程不可或缺的一部分。因爲要做好工作,就要精確地估計每個分區需要的空間,所以硬盤分區很煩人。如果估計失誤了,分得太大,會浪費空間;分得太少了,空間又不夠用。爲了解決這個問題,你甚至可能需要執行整個系統備份、將硬盤清除乾淨,然後將所有數據恢復到新的(可能比原來好一些)分區佈局中。對於服務器來說,也是如此。傳統的這種方法極爲不便,不能動態地擴展或縮減分區的大小,所以就有了後來的lvm的出現。
一、lvm、相關概念以及兩大魅力簡介
1、lvm簡介
LVM: Logical Volumn Manager (邏輯卷管理器),它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本爲:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。它於1998年發佈到Linux社區中,它允許你在Linux系統上用簡單的命令行管理一個完整的邏輯卷管理環境。
LVM實質上是將一個或多個底層塊設備組織一個邏輯的工具。
2、lvm重要概念
重要的概念有:Physical volume (PV):物理卷, Physical extent (PE):盤區,Volume group (VG):卷組,Logical volume(LV) :邏輯卷
以下是概念的詳細解釋:
物理存儲介質(The physical media):這裏指系統的存儲設備,如硬盤/分區,是存儲系統最低層的存儲單元。
物理卷(PV) : LVM的基本存儲邏輯塊,一般會把硬盤/分區做成物理卷,甚至底層塊設備是raid也能被做成物理卷。PV不同於基本的物理存儲介質(如分區、磁盤等),它包含有與LVM相關的管理參數。(物理卷不能被格式化,它沒有文件系統的概念。)
物理盤區(PE) : 就是一塊磁盤空間,物理卷被劃分成多個同等大小的PE。大小固定,一般爲4M或8M(一個PE只能屬於一個邏輯卷)。
卷組(VG):LVM卷組完全類似於擴展分區,不能被直接使用必須進行再次劃分。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),卷組由多個物理卷(PV)組成。
邏輯卷(LV):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統,也就是從VG中劃分的邏輯分區。
下面以一個簡單的圖說明一下物理卷、卷組、邏輯卷之間的關係:
創建邏輯卷的過程說明:
(1)先把磁盤/分區轉換爲pv(物理卷)。由於物理卷沒有文件系統的概念,不能被格式化,所以轉換爲物理卷後,原磁盤/分區的文件系統不能被保留。
(2)創建卷組,把多個物理卷添加到卷組中。實質上,創建卷組會默認或可指定PE的大小,物理卷加入卷組後,會被分割成一個個固定大小的PE。
(3)卷組相當於擴展分區,不能被直接使用,於是要在卷組中創建邏輯卷。實質上,創建指定大小的邏輯卷是在卷組中把可用的多個PE分配給邏輯卷,由於PE的大小是固定的,所以創建出的邏輯卷的大小會有偏差。由此可知,邏輯卷只能看到卷組中的PE,而無法看不到底層中有多少塊物理卷。邏輯卷相當於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統。
3、lvm的兩大魅力簡介
到這裏,我們可以知道:
(1)由於lvm可把物理卷分割成PE和劃分邏輯卷的特性,可知lvm邏輯卷的邊界是可以動態擴展和縮減的。實質上,邏輯卷邊界的動態擴展和縮減是分爲兩層的:物理邊界和邏輯邊界各自的擴展和縮減。這裏不細講,以下會有詳細事例進一步說明。
(2)lvm如果僅有邏輯卷這麼一個功能,就不可能那麼受歡迎了。lvm令人興奮的是,它還支持快照的功能。有了快照後,我們對於數據庫的備份就會變得非常簡單+easy了。這裏也不細說,以下會進一步說明。
二、lvm邏輯卷創建過程詳解
lvm邏輯卷創建的整個過程大致如下:
分區 --> PV --> VG --> LV --> 將分區格式化(爲分區創建文件系統)--> 掛載邏輯分區
下面,用一個實例來加深各位對lvm的理解。
1、分區
使用分區工具fdisk分區,爲了使其能被lvm支持,需要把分區的系統ID改爲8e(注:不把分區的系統ID設爲8e也能將其轉換爲物理卷)。
另一個分區的創建就不貼圖了,各位小夥伴可以去嘗試一下,很好玩的!-_-
2、創建物理卷(PV)
[root@localhost ~]# pvcreate /dev/sda3 /dev/sdb1 Physical volume "/dev/sda3" successfully created Physical volume "/dev/sdb1" successfully created
物理卷(pv)相關命令介紹:
pvcreate : 創建pv(物理卷)
pvs, pvdisplay : 查看pv
pvremove : 移除pv
pvmove : 移動pv(把該物理捲上的數據移到卷組的其他物理捲上)
pvscan : 掃描有哪些pv
3、創建卷組(VG)
[root@localhost ~]# vgcreate -s 8 myvg /dev/sda3 /dev/sdb1 Volume group "myvg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 10.02g 10.02g vg0 1 4 0 wz--n- 59.99g 7.99g [root@localhost ~]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 10.02 GiB PE Size 8.00 MiB #指定PE的大小爲8M Total PE 1282 Alloc PE / Size 640 / 5.00 GiB Free PE / Size 642 / 5.02 GiB VG UUID 5cHXI4-WSz9-ACFQ-IiQj-iUIW-vcxd-gahSK8
卷組(VG)相關命令介紹:
vgcreate : 創建卷組,-s 選項可以指定PE的大小
vgs, vgdisplay :查看卷組的信息
vgremove : 移除卷組
vgextend : 擴展卷組的空間
vgreduce : 縮減卷組的空間
縮減卷組中的空間,一般都是通過移除某一個物理捲來完成的。
需要注意的是:
移除卷組中的某一物理卷時,應該先使用pvmove命令把該物理捲上的數據移到卷組上別的分區,然後才用vgreduce命令指定移除該物理卷
vgscan:掃描有哪些卷組
4、創建邏輯卷(LV)
邏輯卷(LV)相關命令介紹:
lvcreate : 創建邏輯卷(lv)
-n lv_name (指定邏輯卷的名稱)
-L #UNIT{mMgGtT} (指定邏輯卷的大小)
lvs,lvdisplay :查看邏輯卷的信息
lvremove : 移除指定的邏輯卷
lvextend : 擴展邏輯卷
lvreduce : 縮減邏輯卷
lvscan :掃描有哪些邏輯卷
5、格式化邏輯卷
mke2fs:用來格式化分區(爲分區創建文件系統)
-t 指定文件系統類型
6、掛載分區
mount :用於掛載分區
掛載mylv邏輯分區後,就能在該邏輯分區上存儲數據了!
怎樣?是不是很簡單啊!好了,下面讓我們進一步深入lvm 吧!
以下所講的是我們高級班的內容,要學請轉入我們的高級班,只要999元!!!
-_- ,說笑的~
三、邏輯卷的擴展與縮減
lvm存儲空間邊界分爲兩類:
物理邊界:物理磁盤的存儲大小
邏輯邊界:邏輯卷的空間大小
如下圖所示:
內圓範圍是文件系統(邏輯),外圓範圍是存儲空間(物理)。
文件系統是在存儲空間上抹上一層軟件級別的管理方案。因而文件系統空間大小不能大於存儲空間的大小。
因此我們知道邏輯卷擴展和縮減是有要求的:
擴展:物理 --> 邏輯(先擴展物理卷,然後才擴展邏輯卷。)
縮減:邏輯 --> 物理(先縮減邏輯卷,然後才縮減物理卷。)
縮減不能少於已經存儲的所有數據空間的大小!!!(縮減須謹慎!!!)
1、擴展邏輯卷
(1)先確定擴展的目標大小;並確保對應的卷組中有足夠的空閒空間可用;
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 10.02g 5.02g vg0 1 4 0 wz--n- 59.99g 7.99g
(2)擴展物理邊界
增加新的分區:
把分區轉換成PV:
把新的物理卷加入卷組:
[root@localhost ~]# vgextend myvg /dev/sdb2 # vgextend擴展邏輯卷的大小 Volume group "myvg" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 15.02g 10.02g vg0 1 4 0 wz--n- 59.99g 7.99g
擴展物理邊界:
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 5.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g [root@localhost ~]# lvextend -L 10G /dev/myvg/mylv # 注意:-L 10G 是指定擴展後的邏輯卷大小爲10G,並不是+10G的意思 Extending logical volume mylv to 10.00 GiB # -L指定的擴展後的邏輯卷大小不能比原來邏輯卷的大小還小 Logical volume mylv successfully resized [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 10.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g
(3)擴展邏輯邊界
[root@localhost ~]# blkid /dev/myvg/mylv # blkid命令可以查看塊設備的UUID號,也可以查看該塊設備的文件系統類型 /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" [root@localhost ~]# resize2fs /dev/myvg/mylv # resize2fs命令表示重新調整文件系統的大小(根據物理邊界的大小,自動調整) resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks. The filesystem on /dev/myvg/mylv is now 2621440 blocks long. [root@localhost ~]# blkid /dev/myvg/mylv /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" [root@localhost ~]# ls /mnt # 擴展邏輯卷mylv後,數據沒丟失 fstab lost+found
2、縮減邏輯卷
注意:a、縮減邏輯卷的操作是很危險的,操作不當,很有可能會使得數據丟失。請慎重!!!
b、縮減邏輯卷時,邏輯卷要離線,不能處在掛載當中!
(1)先確定縮減後的目標大小;並確保對應的目標邏輯卷大小中有足夠的空間可容納原有所有數據;
[root@localhost ~]# lvs /dev/myvg/mylv LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 10.00g
(2)先卸載文件系統,並要執行強制檢測
[root@localhost ~]# mount # mount命令能查看當前系統中掛載的設備 /dev/mapper/myvg-mylv on /mnt type ext4 (rw) [root@localhost ~]# umount /dev/myvg/mylv # umount命令可卸載所指定的已掛載的設備 [root@localhost ~]# e2fsck -f /dev/myvg/mylv # e2fsck -f ,強制檢測邏輯卷mylv的文件系統 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/mylv: 12/655360 files (0.0% non-contiguous), 76784/2621440 blocks
(3)縮減邏輯邊界
[root@localhost ~]# resize2fs /dev/myvg/mylv 5G # 這表示自動調整邏輯卷mylv的文件系統大小到5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks. The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
(4)縮減物理邊界
[root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv # 這表示縮減邏輯卷mylv的存儲空間到5G WARNING: Reducing active logical volume to 5.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y # 注意:這裏會提示你當前的操作有可能會使得數據丟失,問你是否要繼續?(想清楚額,後果自付!!!) Reducing logical volume mylv to 5.00 GiB Logical volume mylv successfully resized
(5)重新把邏輯卷掛載上去,查看數據是否丟失
呼!!!看到這裏,各位看官是不是都有點視覺疲勞了?
革命尚未成功,同志仍須繼續!
不過,寫到這裏篇幅已經不夠了,本人決定另起一篇博客(是這篇博客的續寫)繼續寫下去。
欲知後事如何,且聽下回分解!