歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> LVM原理及配置

LVM原理及配置

日期:2017/3/1 12:04:47   编辑:關於Linux

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+248)塊之間。當建立邏輯卷時,會建立邏輯塊與物理塊的一一映射關系。
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 [options] VG_name PV1 [PV2 ...]
其中的可選項包括設置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 [y|n]選項)、支持最大邏輯卷數等。
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 [LVM: 122 KB]
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 [options] -n 邏輯卷名 卷組名 [PV1 ... ]
其中的常用可選項有:
"-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/n]: 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/n]: 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
7.3 數據搬家
在移除舊硬盤前,要把其上的數據轉移到新硬盤上。在轉移數據時,不要求卸載文件系統,但建議在數據轉移前進行備份,以防轉移進程中意外導致數據丟失。
pvmove用來實現數據轉移,根據數據量的多少,它可能要使用大量的時間,並可降低邏輯卷的性能,因此要在系統不太忙時操作。
# pvmove /dev/hdb /dev/sdf
pvmove -- moving physical extents in active volume group "test_vg"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved
7.4 移除未用硬盤
當數據被轉移到其它硬盤後,就可以從卷組中刪除這塊不再使用的硬盤:
# vgreduce dev /dev/hdb
vgreduce -- doing automatic backup of volume group "test_vg"
vgreduce -- volume group "test_vg" successfully reduced by physical volume:
vgreduce -- /dev/hdb
從此,卷組test_vg不再使用IDE硬盤/dev/hdb,這塊硬盤可以從機器中拆下或用作它途。
8 遷移卷組到其它系統
把一個卷組轉移到其它系統是很容易的(如更換服務器),這要用命令vgexport與vgimport。
8.1 卸載文件系統
為整體搬遷卷組,應首先把它從文件系統中卸載,如:
# unmount /mnt/design/users
8.2 設置卷組為非活動狀態
把卷組從內核中卸載,以避免任何對它可能的操作:
# vgchange -an test_vg
vgchange -- volume group "test_vg" successfully deactivated
8.3 Export 卷組
這個操作不是必須的,便它可以防止系統對卷組的訪問:
# vgexport test_vg
vgexport -- volume group "test_vg" sucessfully exported
當機器關機後,構成卷組的硬盤就可被轉移到新的服務器上。
8.4 Import 卷組
在新的服務器上,可用pvscan查看卷組情況,如在這台計算機上,硬盤新的設備為/dev/sdb,使用pvscan可有:
# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "test_vg" [996 MB / 996 MB free]
pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "test_vg" [996 MB / 244 MB free]
pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0]
現可以import卷組test_vg (同時也激活它)以安裝其上的文件系統
# vgimport test_vg /dev/sdb1 /dev/sdb2
vgimport -- doing automatic backup of volume group "test_vg"
vgimport -- volume group "test_vg" successfully imported and activated
8.5 安裝文件系統
# mkdir -p /mnt/design/users
# mount /dev/test_vg/users /mnt/design/users
在完成以上操作後,原卷組在新的服務器上就可使用了。
9 分割卷組
這種情況是:需要在系統中加入新的卷組,但沒有其它可用新硬盤,而已有的卷組中還有大量空間可用。如向系統加入一個"design"卷組。
9.1 檢查可用空間
# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free]
pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 1.27 GB free]
pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 564 MB free]
pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free]
pvscan -- ACTIVE PV "/dev/sde" of VG "ops" [1.95 GB / 1.9 GB free]
pvscan -- ACTIVE PV "/dev/sdf" of VG "dev" [1.95 GB / 1.33 GB free]
pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 432 MB free]
pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 632 MB free]
pvscan -- total: 8 [13.67 GB] / in use: 8 [13.67 GB] / in no VG: 0 [0]
我們決定把/dev/sdg1與/dev/sdg2分配組design,但首先要把其上的物理塊移到其它卷的空閒空間中(如把卷組dev移到/dev/sdf,卷組ops移到/dev/sde)。
9.2 從選定硬盤移出數據
由於硬盤上的邏輯卷仍在使用,故首先要轉移它們的數據。
把所有在使用的物理塊從/dev/sdg1上轉移到/dev/sde,及從/dev/sdg2轉移到/dev/sdf。
# pvmove /dev/sdg1 /dev/sde
pvmove -- moving physical extents in active volume group "ops"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- doing automatic backup of volume group "ops"
pvmove -- 141 extents of physical volume "/dev/sdg1" successfully moved
# pvmove /dev/sdg2 /dev/sdf
pvmove -- moving physical extents in active volume group "dev"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- doing automatic backup of volume group "dev"
pvmove -- 91 extents of physical volume "/dev/sdg2" successfully moved
9.3 創建新卷組
現在把/dev/sdg2從卷組dev從分割出並加入到新卷組design中。我們可用vgreduce與vgcreate完成工作,但vgsplit此時更方便:
# vgsplit dev design /dev/sdg2
vgsplit -- doing automatic backup of volume group "dev"
vgsplit -- doing automatic backup of volume group "design"
vgsplit -- volume group "dev" successfully split into "dev" and "design"
9.4 移除剩余的卷
接下來的工作 把/dev/sdg1從卷組ops中分出並加入卷組design:
# vgreduce ops /dev/sdg1
vgreduce -- doing automatic backup of volume group "ops"
vgreduce -- volume group "ops" successfully reduced by physical volume:
vgreduce -- /dev/sdg1
# vgextend design /dev/sdg1
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "design"
vgextend -- volume group "design" successfully extended
9.5 建立新邏輯卷及文件系統
在卷組design上建立邏輯卷,為今後的方便,現只使用一部分空間:
# lvcreate -L750M -n users design
lvcreate -- rounding up size to physical extent boundary "752 MB"
lvcreate -- doing automatic backup of "design"
lvcreate -- logical volume "/dev/design/users" successfully created
# mke2fs /dev/design/users
mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
96384 inodes, 192512 blocks
9625 blocks (5.00<!-- ) reserved for the super user
First data block=0
6 block groups
32768 blocks per group, 32768 fragments per group
16064 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
# mkdir -p /mnt/design/users
# mount /dev/design/users /mnt/design/users/
現在就可使用卷組design。為方便使用,可把下面一行加入文件/etc/fstab中:
/dev/design/user /mnt/design/users ext2 defaults 1 2
10 轉變根文件系統為LVM
注意:強烈要求在進行下面的操作前對系統進行備份,並且把/文件系統建立在LVM上會導致系統升級很復雜。
在下面的例子中,系統除了/boot外都安裝在同一個分區中,文件系統的情況為:
/dev/hda1 /boot
/dev/hda2 swap
/dev/hda3 /
進行轉換的一個必要條件是硬盤上還有足夠的空間給分區/dev/hda4創立LVM並把/分區的內容都復制到LVM上,否則:
1./分區還有至少一半空間空閒,可以縮減/分區,並把分出的空間劃分到分區/dev/hda4;
為方便可用GNU parted工具:ftp://ftp.gnu.org/pub/gnu/parted;?...??個操作;
2.硬盤上已無足夠空間,必須使用第二塊硬盤,如/dev/hdb。
在完成以上准備及備份系統後,可繼續以下步驟:
1.確認使用的Linux內核支持LVM,並且在編譯時設置了 CONFIG BLK DEV RAM 與 CONFIG BLK DEV INITRD 。
2.設置/dev/hda4分區類型為LVM(8e):

# fdisk /dev/hda
Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Unknown)
Command (m for help): w
3.設置LVM:
"初始化LVM (vgscan)
# vgscan
"轉變分區為PV:
# pvcreate /dev/hda4
"建立卷組:
# vgcreate vg /dev/hda4
"建立邏輯卷用以存放根系統:(這裡假設空間為250MB)
# lvcreate -L250M root vg
4.在邏輯卷上建立文件系統並把系統復制到其上:
# mke2fs /dev/vg/root
# mount /dev/vg/root /mnt/
# find / -xdev | cpio -pvmd /mnt
5.修改新系統的fstab文件/mnt/etc/fstab,使/安裝到/dev/vg/root:
/dev/hda3 / ext2 defaults 1 1
改變為:
/dev/vg/root / ext2 defaults 1 1
6.創建LVM初始化RAM盤:
# lvmcreate_initrd
此處要確認為lvmcreate_init給出正確的initrd image文件名,它應在/boot/ 目錄下。
7. 在/etc/lilo.conf 中為LVM加入新入口項,其形式如下:
image = /boot/KERNEL_IMAGE_NAME
label = lvm
root = /dev/vg/root
initrd = /boot/INITRD_IMAGE_NAME
ramdisk = 8192
此處 KERNEL IMAGE NAME是支持LVM的內核,INITRD IMAGE NAME 指由lvmcreate_initrd建立的initrd image。如果LVM的配置很多,可以把ramdisk設置的大一些:此處為8192,缺省為4096。在lvmcrate_initrd的輸出中有如下一行:
lvmcreate_initrd -- making loopback file (6189 kB)
其中括號中的數值為實際所需大小。
8.運行LILO,設置BOOT扇區:
# lilo
9.重啟計算機,在LILO提示符處輸入"lvm" 啟動計算機,此時系統的根文件系統是新建立的邏輯卷。此後可在LILO配置文件/etc/lilo.conf中加入以下一行:
default=lvm
並運行lilo設置缺省啟動項為lvm。
如果系統未能正常啟動,可能的原因是內核不支持LVM、initrd image不正確等等。
10.在正常啟動後,就可把硬盤其它分區:/dev/hda3加入LVM。
"首先設置分區類型為 8e(LVM)
# fdisk /dev/hda
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Unknown)
Command (m for help): w
"把它初始化為PV,並加入卷組中:
# pvcreate /dev/hda3
# vgextend vg /dev/hda3
11 共享LVM卷
LVM不支持物理共享訪問,這會導致數據的丟失。
在使用fibre-channel 或shared-SCSI 的環境中,多台計算機以物理方式直接訪問一組硬盤,於是可以使用LVM把這些硬盤分為不同的邏輯卷。如果需要共享數據,則應使用GFS。

Copyright © Linux教程網 All Rights Reserved