歡迎您光臨本站 註冊首頁

LVM使用手冊

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

LVM使用手冊

LVM使用手冊


1 簡介
1.1 什麼是LVM?
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。
與傳統的磁碟與分區相比,LVM為計算機提供了更高層次的磁碟存儲。它使系統管理員可以更方便的為應用與用戶分配存儲空間。在LVM管理下的存儲卷可以按需要隨時改變大小與移除(可能需對文件系統工具進行升級)。LVM也允許按用戶組對存儲卷進行管理,允許管理員用更直觀的名稱(如"sales'、 'development')代替物理磁碟名(如'sda'、'sdb')來標識存儲卷。
1.2 為什麼使用LVM?
LVM通常用於裝備大量磁碟的系統,但它同樣適於僅有一、兩塊硬碟的小系統。
1.2.1 小系統使用LVM的益處
傳統的文件系統是基於分區的,一個文件系統對應一個分區。這種方式比較直觀,但不易改變:
1.不同的分區相對獨立,無相互聯繫,各分區空間很易利用不平衡,空間不能充分利用;
2.當一個文件系統/分區已滿時,無法對其擴充,只能採用重新分區/建立文件系統,非常麻煩;或把分區中的數據移到另一個更大的分區中;或採用符號連接的方式使用其它分區的空間。
3.如果要把硬碟上的多個分區合併在一起使用,只能採用再分區的方式,這個過程需要數據的備份與恢復。
當採用LVM時,情況有所不同:
1.硬碟的多個分區由LVM統一為卷組管理,可以方便的加入或移走分區以擴大或減小卷組的可用容量,充分利用硬碟空間;
2.文件系統建立在邏輯卷上,而邏輯卷可根據需要改變大小(在卷組容量範圍內)以滿足要求;
3.文件系統建立在LVM上,可以跨分區,方便使用;
1.2.2 大系統使用LVM的益處
在使用很多硬碟的大系統中,使用LVM主要是方便管理、增加了系統的擴展性。
在一個有很多不同容量硬碟的大型系統中,對不同的用戶的空間分配是一個技巧性的工作,要在用戶需求與實際可用空間中尋求平衡。
用戶/用戶組的空間建立在LVM上,可以隨時按要求增大,或根據使用情況對各邏輯卷進行調整。當系統空間不足而加入新的硬碟時,不必把用戶的數據從原硬碟遷移到新硬碟,而只須把新的分區加入卷組並擴充邏輯卷即可。同樣,使用LVM可以在不停服務的情況下。把用戶數據從舊硬碟轉移到新硬碟空間中去。
2 LVM構成
LVM的結構簡圖如下:
    hda1  hdc1  sdc     (PV:s  物理卷,一般為分區或整個硬碟)                        
       \   |   /                                                                    
        \  |  /                                                                     
        diskvg          (VG 卷組由物理卷組成)                                                      
       /  |  \                                                                  
       /   |   \                                                                 
   usrlv rootlv varlv   (LV:s 邏輯卷在卷組上創建)
     |      |     |                                                              
ext2  reiserfs  xfs   (建立在邏輯卷上的文件系統)  
2.1 卷組volume group (VG)
卷組是LVM中最高抽象層,是由一個或多個物理卷所組成的存儲器池。
2.2 物理卷physical volume (PV)
典型的物理卷是硬碟分區,但也可以是整個硬碟或已創建的Software RAID 卷。
2.3 邏輯卷logical volume (LV)
邏輯卷相當於非LVM系統中的分區,它在卷組上建立,是一個標準的塊設備,可以在其上建立文件系統。
2.4 物理塊physical extent (PE)
物理卷按大小相等的「塊」為單位存儲,塊的大小與卷組中邏輯卷塊的大小相同。
2.5 邏輯塊logical extent (LE)
邏輯卷按「塊」為單位存儲,在一卷組中的所有邏輯卷的塊大小是相同的。
2.6 總述
例子:有一個卷組VG1,它的物理塊大小為4MB。在這個卷組中為2個硬碟分區:/dev/hda1與/dev/hdb1,它們分別成為物理卷PV1與PV2。物理卷將按4MB為單位分塊,如PV1與PV2分別可分為99與248塊。在VG1上建立邏輯卷,它的大小可在1至347(99+24塊之間。當建立邏輯卷時,會建立邏輯塊與物理塊的一一映射關係。
2.7 映射模式 (linear/striped)
在建立邏輯卷時,可以選擇邏輯塊與物理塊映射的策略:
1.線性映射-將把一定範圍的物理塊按順序分配給邏輯卷,如 LV的LE 1 ? 99映射到PV1,LE 100 ? 347映射到PV2。
2.交錯模式-將把邏輯塊交錯映射到不同的物理卷中,如 LV的LE 1映射為PV1的PE1,LE 2映射為PV2的PE1,LE 3映射為PV1的PE2...。這種方式可以提高邏輯卷的性能,但是採用這種方式建立的邏輯卷將不能在它們所在的物理卷中擴展。
2.8 Snapshots (快照)
LVM提供了一個非常好的特性:snapshots。它允許管理員建立一個塊設備:該設備是一邏輯卷在某一時刻凍結的精確拷貝。這個特性通常用於批處理過程(如備份)需要處理邏輯卷,但又不能停止系統。當操作完成時,snapshot設備可以被移除。這個特性要求在建立snapshot設備時邏輯卷處於相容狀態。
3 LVM的一般操作
3.1 建立PV
為把一個磁碟或分區作為PV,首先應使用 pvcreate 對其初始化,如對IDE硬碟/dev/hdb,
"使用整個磁碟,
# pvcreate /dev/hdb
這將在磁碟上建立VG的描述符。
"使用磁碟分區,如/dev/hdb1。
使用fdisk 的t 命令把/dev/hda1的分區類型設為0x8e,然後運行:
# pvcreate /dev/hdb1
這將在分區/dev/hda1上建立VG的描述符。
PV初始化命令pvcreate的一般用法為:
pvcreate PV1 [ PV2 ... ]
它的參數可以是整個磁碟、分區,也可以是一loop設備。
3.2 建立VG
在使用pvcreate 建立了PV后,可以用vgcreate 建立卷組,如有PV1、PV2分別是/dev/hda1與/dev/hdb1,使用
# vgcreate testvg /dev/hda1 /dev/hdb1
將建立一個名為testvg的卷組,它由兩個PV:/dev/hda1與/dev/hdb1組成。vgcreate的一般用法為:
# vgcreate   VG_name  PV1
其中的可選項包括設置VG最大支持的LV數、PE大小(預設為4MB)等。
注意:當使用devfs系統時,應使用設備的全名而不能是Symbol Link,如對上例應為:
# vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1\
                   /dev/ide/host0/bus0/target1/lun0/part1
3.3 激活VG
在被激活之前,VG與LV是無法訪問的,這時可用命令:
# vgchange -a y  testvg
激活所要使用的卷組。當不再使用VG時,可用
# vgchange -a n  testvg
使之不再可用。
vgchange可用來設置VG的一些參數,如是否可用( -a 選項)、支持最大邏輯卷數等。
3.4 移除VG
在移除一卷組前應確認卷組中不再有邏輯卷,首先休眠卷組:
# vgchange -a n testvg
然後可用vgremove移除該卷組:
# vgremove testvg
3.5 為VG增加新PV
當卷組空間不足時,可以加入新的物理捲來擴大容量,這時可用命令vgextend,如
# vgextend testvg /dev/hdc1
其中/dev/hdc1是新的PV,當然在這之前,它應使用pvcreate初始化。
3.6 從VG移除PV
在移除PV之前,應確認該PV沒用被LV使用,這可用命令pvdisplay查看,如:
# pvdisplay /dev/hda1
--- Physical volume ---
PV Name               /dev/hda1
VG Name               testvg
PV Size               1.95 GB / NOT usable 4 MB
PV#                   1
PV Status             available
Allocatable           yes (but full)
Cur LV                1
PE Size (KByte)       4096
Total PE              499
Free PE               0
Allocated PE          499
PV UUID               Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
如這個PV仍在被使用,則應把數據傳移到其它PV上。在確認它未被使用后,可用命令vgreduce把它從VG中刪除,如:
# vgreduce testvg /dev/hda1
3.7 創建LV
在創建邏輯卷前,應決定LV使用哪些PV,這可用命令vgdisplay與pvdisplay查看當前卷組與PV的使用情況。在已有的卷組上創建邏輯卷使用命令lvcreate,如:
# lvcreate -L1500 -ntestlv testvg
將在卷組testvg上建立一個1500MB的線性LV,其命名為testlv,對應的塊設備為/dev/testvg/testlv。
# lvcreate -i2 -I4 -l100 -nanothertestlv testvg
將在卷組testvg上建立名為anothertestlv的LV,其大小為100LE,採用交錯方式存放,交錯值為2,塊大小為4KB。
如果需要LV使用整個VG,可首先用vgdisplay 查找 Total PE 值,然後在運行lvcreate時指定,如:
# vgdisplay testvg | grep "Total PE"
Total PE              10230
# lvcreate -l 10230 testvg -n mylv
將使用卷組testvg的全部空間創建邏輯卷mylv。
在創建邏輯卷后,就可在其上創建文件系統並使用它。
命令lvcreate的常用方法:
lvcreate   -n 邏輯卷名  卷組名
其中的常用可選項有:
"-i Stripes :採用交錯(striped)方式創建LV,其中Stripes指卷組中PV的數量。
"-I Stripe_size :採用交錯方式時採用的塊大小(單位為KB),Stripe_size必須為2的指數:2N ,N=2,3...9。
"-l LEs :指定LV的邏輯塊數。
"-L size :指定LV的大小,其後可以用K、M、G表示KB、MB、GB。
"-s :創建一已存在LV的snapshot卷。
"-n name :為LV指定名稱。
3.8 刪除LV
為刪除一個邏輯卷,必須首先從系統卸載其上的文件系統,然後可用lvremove刪除,如:
# umount /dev/testvg/testlv
# lvremove /dev/testvg/testlv
lvremove -- do you really want to remove "/dev/testvg/testlv"? : y
lvremove -- doing automatic backup of volume group "testvg"
lvremove -- logical volume "/dev/testvg/testlv" successfully removed
3.9 擴展LV
為邏輯卷增加容量可用使用lvextend,即可以指定要增加的尺寸也可以指定擴容后的尺寸,如
# lvextend -L12G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 12 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
將擴大邏輯卷testlv的容量為12GB。
# lvextend -L+1G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 13 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
將為LV testlv再增大容量1GB至13GB。
為LV擴容的一個前提是:LV所在的VG有足夠的空閑存儲空間可用。
在為LV擴容之後,應同時為LV之上的文件系統擴容,使二者相匹配。對不同的文件系統有相對應的擴容方法。
3.9.1 ext2/ext3
除非內核已有ext2online 補丁,否則在改變ext2/ext3文件系統的大小時應卸載它:
# umount /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
# mount /dev/testvg/testlv /home
這裡假設testlv安裝點為/home。在es2fsprogs-1.19或以上版本中包含resize2fs命令。
在LVM發行包中有一個稱為e2fsadm的工具,它同時包含了lvextend與resize2fs的功能,如:
# e2fsadm -L+1G /dev/testvg/testlv
等價於下面兩條命令:
# lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用戶仍需首先卸載文件系統。
3.9.2 reiserfs
與ext2不同,Reiserfs不必卸載文件系統,如:
# resize_reiserfs -f /dev/testvg/testvl
3.9.3  xfs
SGI XFS文件系統必須在安裝的情況下才可改變大小,並且要使用安裝點而不是塊設備,如:
# xfs_growfs /home
3.10 縮小LV
邏輯卷可擴展同樣也可縮小,但應在縮小LV之前首先減小文件系統,否則將可能導致數據丟失。
3.10.1 ext2/ext3
可以使用LVM的工具e2fsadm操作,如:
# umount /home
# e2fsadm -L-1G /dev/testvg/testvl
# mount /home
如果採用resize2fs,就必須知道縮少后卷的塊數:
# umount /home
# resize2fs /dev/testvg/testvl 524288
# lvreduce -L-1G /dev/testvg/testvl
# mount /home
3.10.2 reiserfs
在縮小reiserfs時,應首先卸載它,如:
# umount /home
# resize_reiserfs -s-1G /dev/testvg/testvl
# lvreduce -L-1G /dev/testvg/testvl
# mount -treiserfs /dev/testvg/testvl /home
3.10.3 xfs
無法實現。
3.11 在PV間轉移數據
若要把一個PV從VG中移除,應首先把其上所有活動PE中的數據轉移到其它PV上,而新的PV必須是本VG的一部分,有足夠的空間。如要把PV1:/dev/hda1上的數據移到PV2:/dev/sda1上可用命令:
# pvmove /dev/hdb1 /dev/sdg1
如果在該PV之上的LV採用交錯方式存放,則這個轉移過程不能被打斷。
建議在轉移數據之前備份LV中的數據。
3.12 系統啟動/關閉
"為使系統啟動時可自動激活並使用LVM,可將以下幾行添加到啟動 rc 腳本中:
/sbin/vgscan
/sbin/vgchange -a y
這些行將瀏覽所有可用的卷組並激活它們。要注意的是,它們應在安裝卷組上的文件系統操作之前被執行,否則將無法正常安裝文件系統。
"在系統關機時,要關閉LVM,這可將以下這行添加到關機 rc 腳本中,並確保它在卸裝了所有文件系統后執行:
/sbin/vgchange -a n
4 磁碟分區問題
4.1 一個磁碟上的多個分區
LVM允許PV建立在幾乎所有塊設備上,如整個硬碟、硬碟分區、Soft RAID:
# pvcreate /dev/sda1
# pvcreate /dev/sdf
# pvcreate /dev/hda8
# pvcreate /dev/hda6
# pvcreate /dev/md1
所以在一塊硬碟上可以有多個PV/分區,但一般建議一塊硬碟上只有一個PV:
"便於管理,易於處理錯誤
"避免交錯方式中性能下降。LVM不能辨別兩個PV是否在同一硬碟上,故當採用交錯方式時,會導致性能更差。
但在某些情況下可採用:
"把已存在的系統合併到LVM中。在一個只有少數硬碟的系統中,轉換為LVM時需在在各分區之間轉移數據。
"把一個大硬碟分給不同的VG使用。
當一個VG的有不同的PV在同一硬碟時,創建交錯方式的LV時應注意使用哪一個PV。
4.2 Sun disk labels
僅在SUN的SPARC系統中有此問題。
5 建立LVM用例
在本節中,將在3塊SCSI硬碟:/dev/sda,/dev/sdb,/dev/sdc上按步建立LVM。
5.1 準備分區
首先要做的是初始化硬碟,建立PV,這將會刪除硬碟上的原有數據。在此,用整個硬碟為PV:
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate在每個硬碟的起始端建立卷組描述區( volume group descriptor area, VGDA)。
5.2 創建卷組
利用上面三個PV建立卷組:
# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/
然後可用vgdisplay 查看/驗證卷組的信息:
# vgdisplay
--- Volume Group ---
VG Name               test_vg
VG Access             read/write
VG Status             available/resizable
VG #                  1
MAX LV                256
Cur LV                0
Open LV               0
MAX LV Size           255.99 GB
Max PV                256
Cur PV                3
Act PV                3
VG Size               1.45 GB
PE Size               4 MB
Total PE              372
Alloc PE / Size       0 / 0
Free  PE / Size       372/ 1.45 GB
VG UUID               nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
其中最重要的前三條要正確,且VS size是以上三個硬碟容量之和。
5.3  建立LV
在確定卷組test_vg正確后,就可在其上創建LV。LV的大小可在VG大小範圍內任意選擇,如同在硬碟上分區。
5.3.1  建立線性方式LV
在test_vg上建立一個大小為1GB的線性方式LV:
# lvcreate -L1G -ntest_lv test_vg
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
5.3.2  建立交錯方式LV
在test_vg上建立一個大小為1GB的交錯方式LV,交錯參數為4KB:
# lvcreate -i3 -I4 -L1G -ntest_lv test_vg
lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
注意:如果使用 -i2參數,則LV將僅使用test_vg中的兩塊硬碟。
5.4 建立文件系統
在LV test_lv創建后,就可在其上建立文件系統,
如,ext2/ext3系統:
# mke2fs /dev/test_vg/test_lv
如,reiserfs:
# mkreiserfs /dev/test_vg/test_lv
5.5 測試文件系統
安裝LV:
# mount /dev/test_vg/test_lv /mnt
# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1              1311552    628824    616104  51% /
/dev/test_vg/test_lv   1040132        20    987276   0% /mnt
則可以通過/mnt訪問LV。
6 使用snapshot 做備份
例如我們要對卷組"test_vg"每晚進行資料庫備份,就要採用snapshot類型的卷組。這種卷組是其它卷組的一個只讀拷貝,它含有在創建snapshot卷組時原卷組的所有數據,這意味你可以備份這個卷組而不用擔心在備份過程中數據會改變,也不需要暫時關閉資料庫卷以備份。
6.1 建立snapshot卷
一個snapshot卷可大可小,但必須有足夠的空間存放所有在本snapshot卷生存期間改變的數據,一般最大要求是原卷組的1.1倍。如空間不夠,snapshot卷將不能使用。
# lvcreate -L592M -s -n dbbackup /dev/test_vg/databases
lvcreate -- WARNING: the snapshot must be disabled if it gets full
lvcreate -- INFO: using default snapshot chunk size of 64 KB for  "/dev/test_vg/dbbackup"
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/dbbackup" successfully created
6.2 安裝snapshot卷
現在可以安裝該卷:
# mkdir /mnt/test_vg/dbbackup
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup
mount: block device /dev/test_vg/dbbackup is write-protected, mounting read-only
從上面可以看出,snapshot卷是只讀的。
當使用XFS文件系統時,mount命令要使用nouuid與norecovery選項:
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup -o nouuid,norecovery,ro
6.3 備份數據
如採用tar向磁帶備份:
# tar -cf /dev/rmt0 /mnt/test_vg/dbbackup         
6.4 刪除snapshot 卷
在完成備份后,就可卸載並刪除snapshot卷。
# umount /mnt/test_vg/dbbackup
# lvremove /dev/test_vg/dbbackup
lvremove -- do you really want to remove "/dev/test_vg/dbbackup"? : y
lvremove -- doing automatic backup of volume group "test_vg"
lvremove -- logical volume "/dev/test_vg/dbbackup" successfully removed
7 更換卷組硬碟
由於某種原因,需要用新的硬碟替代卷組中的舊硬碟,如用一SCSI硬碟替換IDE硬碟,其步驟為:
7.1 準備/初始化新硬碟
首先用pvcreate命令初始化新的硬碟,如使用整個硬碟:
# pvcreate /dev/sdf
pvcreate -- physical volume "/dev/sdf" successfully created
7.2 加入卷組
把新硬碟加入卷組:
# vgextend test_vg /dev/sdf
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "test_vg"
vgextend -- volume group "test_vg" successfully extended
《解決方案》

謝謝分享

[火星人 ] LVM使用手冊已經有793次圍觀

http://coctec.com/docs/service/show-post-1286.html