在 Linux 中使用动态磁盘
生活随笔
收集整理的這篇文章主要介紹了
在 Linux 中使用动态磁盘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?是否遇到過這樣的問題,劃分了 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />10G 的一個分區,掛接到 /home 下,可是隨著時間的流逝,10G 的空間開始不夠用了,需要把它擴充。假設要擴充到 12G,那么唯一的方法就是建立一個 12G 的新分區,然后將原來的 10G 分區中的數據全部移動到新分區中,再修改掛接配置。這樣不僅麻煩而且浪費時間。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> Linux 2.4 開始支持 LVM(Logical Volume Manager,邏輯卷管理器),通過 LVM,可以動態地改變“分區”(準確地說應當稱之為卷)的大小,而不必擔心數據移動的問題。LVM 的原理是,首先在硬盤上創建 PV(Physical Volume: 物理卷)。PV 可以創建在一個分區上,也可以創建在整個硬盤上,它由許多的 PE(Physical Extent)組成,每個 PE 的默認值為 4MB。之后將數個 PV 合在一起組成一個 VG(Volume Group: 卷組)。最后在 VG 中創建 LV(Logical Volume: 邏輯卷),它也由許多的 LE(Logical Extent)組成,LE 的大小與 PE 相同,并與 PE 一一對應。LV 就可以像普通的分區一樣掛接在任何地方了。 下面我們總結一下這里出現的詞匯:
LVM (Logical Volume Manager,邏輯卷管理器):Linux 中用于管理邏輯卷的功能。
PV(Physical Volume,物理卷):數據實際保存的位置,由許多 PE 組成。
VG(Volume Group,卷組):多個 PV 組合在一起。
LV(Logical Volume,邏輯卷):LVM 創建的虛擬卷,由許多 LE 組成,可以像普通分區一樣進行掛接,可以動態修改大小。
PE(Physical Extent):LVM 管理的最小單位,默認為 4MB。
LE(Logical Extent):大小與 PE 相同,并與 PE 一一對應。
制作 LVM 下面我們嘗試在 Linux 下使用 LVM 來管理分區。以下操作使用的系統為 Fedora Core 3。 1. 首先用 fdisk 創建兩個分區 /dev/hda7 和 /dev/hda8,選擇分區大小為 1G。結果如下:
??? Device Boot????? Start???????? End????? Blocks?? Id? System
?/dev/hdb1?????????????? 1??????? 2117???? 1000251?? 83? Linux
?/dev/hdb2??????????? 2118??????? 4234???? 1000282+? 83? Linux 2. 使用 pvcreate 命令將分區建立為 PV。
?# pvcreate /dev/hdb1
?? Physical volume "/dev/hdb1" successfully created
?# pvcreate /dev/hdb2
?? Physical volume "/dev/hdb2" successfully created 3. 使用 vgcreate 命令將新建的兩個 PV 組合成 VG。
?# vgcreate newvg /dev/hdb1 /dev/hdb2
?? Volume group "newvg" successfully created 之后我們可以發現在 /dev 目錄下多了一個名為 newvg 的目錄,這就是我們建立的 VG。 4. 使用 lvcreate 命令在 newvg 中建立一個 LV,名為 lv01,大小為 256M。
?# lvcreate -L 256M -n lv01 newvg
?? Logical volume "lv01" created 可以發現在 /dev/newvg 下多了一個名為 lv01 的符號鏈接,這就是 LV。 5. 在 lv01 上建立文件系統。
?# mke2fs /dev/newvg/lv01 6. 掛接該文件系統。
?# mount -t ext2 /dev/newvg/lv01 /root/lv 至此一個 LV 已經建立完畢。我們可以試著增大該 LV 的容量。使用 lvextend 命令將剛剛建立的 LV 增大 128M。擴大容量之后需要使用 resize2fs 命令來擴大原有的文件系統到新的容量。
?# lvextend -L+128M /dev/newvg/lv01
?? Extending logical volume lv01 to 384.00 MB
?? Logical volume lv01 successfully resized
?
?# umount /dev/newvg/lv01
?
?# e2fsck -f /dev/newvg/lv01
?e2fsck 1.36 (05-Feb-2005)
?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/newvg/lv01: 12/65536 files (8.3% non-contiguous), 10336/262144 blocks
?
?# resize2fs /dev/newvg/lv01
?resize2fs 1.36 (05-Feb-2005)
?Resizing the filesystem on /dev/newvg/lv01 to 393216 (1k) blocks.
?The filesystem on /dev/newvg/lv01 is now 393216 blocks long.
?
?# mount -t ext2 /dev/newvg/lv01 /root/lv 之后馬上就可以利用 df -h 命令看到文件系統的容量改變了。 我們也可以利用 vgdisplay 命令來查看 VG 的信息。
?# vgdisplay newvg
?? --- Volume group ---
?? VG Name?????????????? newvg
?? System ID
?? Format??????????????? lvm2
?? Metadata Areas??????? 2
?? Metadata Sequence No? 3
?? 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?????????????? 1.91 GB
?? PE Size?????????????? 4.00 MB
?? Total PE????????????? 488
?? Alloc PE / Size?????? 96 / 384.00 MB
?? Free? PE / Size?????? 392 / 1.53 GB
?? VG UUID?????????????? YAlPwY-Vlfa-ZBa7-4jPQ-60Gk-Fzwi-jUW8BM 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+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
------------------------------------------------------------------
[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 124.00 MB free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 100.00 MB free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 3.16 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MB
Current LE 25
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
---------------------------------------------------------------------
可以看出rhcelv的大小為100M,VG還有很多未分配空間;
二、增加rhcelv大小至3.26G,即增加3.16G
[root@rhce tmp]# lvresize -L +3.16G rhcevg/rhcelv
Rounding up size to full physical extent 3.16 GB
Extending logical volume rhcelv to 3.26 GB
Logical volume rhcelv successfully resized
[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
97M 5.6M 87M 7% /mnt/rhcelv
# 增加后大小容量未更變,執行ext2online命令
[root@rhce tmp]# ext2online /dev/rhcevg/rhcelv
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
[root@rhce tmp]# df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv
[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 1
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
# 可以看到容量已增加
三、在減小LV大小,如下:
[root@rhce tmp]# umount /mnt/rhcelv/;lvresize -L -2G rhcevg/rhcelv
WARNING: Reducing active logical volume to 1.26 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce rhcelv? [y/n]: y
Reducing logical volume rhcelv to 1.26 GB
Logical volume rhcelv successfully resized
# 可以看到大小已減小2G,rhcelv現大小為1.26G,查看
[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 0 free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 0 free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 2.22 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 1.26 GB
Current LE 322
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
----------------------------------
# 可以看出大小在pvdisplay中已顯示為1.26G,
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/
[root@rhce tmp]# df -h|grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv
# 可以看出,容量未改;
[root@rhce tmp]# umount /mnt/rhcelv/
[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (28-Feb-2004)
The filesystem size (according to the superblock) is 3416064 blocks
The physical size of the device is 1318912 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>?
# 卸載后fsck發現報錯,重新格式化
[root@rhce tmp]# mkfs.ext3 /dev/rhcevg/rhcelv
mke2fs 1.35 (28-Feb-2004)
max_blocks 337641472, rsv_groups = 10304, rsv_gdb = 80
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
165088 inodes, 329728 blocks
16486 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=339738624
11 block groups
32768 blocks per group, 32768 fragments per group
15008 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
inode.i_blocks = 3848, i_size = 4243456
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (28-Feb-2004)
/dev/rhcevg/rhcelv: clean, 11/165088 files, 13881/329728 blocks
-----------------------------------------------------------------
重新格式化后,fsck無誤,掛載
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
1.3G 34M 1.2G 3% /mnt/rhcelv
# 容量改變
#BTW,說實在的,搞了很多次再明白;
# 增加容量只需掛載的狀態下ext2online ,(man ext2online發現這一句話,It is only possible to enlarge a mounted filesystem.)
# 減小容量卻需重建文件系統,不知可否有其它操作方式?
1.準備一個分區
?? fdisk /dev/hda (或/dev/sda) 本案例中創建的分區為/dev/hda15 2.創建PV
?? pvcreate /dev/hda15 如果有多少分區/dev/hda15,/dev/hda16,/dev/hda17,則可以 pvcreae /dev/hda1[5-7] 3.創建VG(vg_name是VG的名稱)
vgcreate vg_name /dev/hda15
如果有多少分區/dev/hda15,/dev/hda16,/dev/hda17創建一個VG,則可以 vgcreate vg_name /dev/hda1[5-7]
4.創建LV(lv_name是LV的名稱)
lvcreate -n lv_name -L 10M vg_name
5.格式化LV
mkfs.ext3 /dev/vg_name/lv_name
6.掛載文件系統
mount /dev/vg_name/lv_name /lvm
二 LVM管理
1.擴大LV
?? 在擴大LV時,必須增大文件系統?
1.1擴大LV
? lvextend -L 20M /dev/vg_name/lv_name (擴大LV到20M空間)??
? lvextend -L +20M /dev/vg_name/lv_name (增加LV20M空間,LV現空間是30M)
1.2增大文件系統(這一步容易疏忽)
假設原來文件系統大小為100M,那又新增20M,故新的文件系統為120M ext2online /dev/vg_name/lv_name 120M
2.縮小LV
?[假設文件系統是10M,LV是30M,準備把LV縮小到20M] 在縮小LV空間時,務必考慮真實的文件系統大小,可能導致文件不可用。
2.1縮小文件系統(必先卸載文件系統)
umount /lvm
fsck.ext3 /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name 20M
2.2縮小文件系統(在線操作,不用卸載)--在配置過程中好像不好使 ext2online /dev/vg_name/lv_name 20M
2.3縮小LV
lvreduce -L 20M /dev/vg_name/lv_name
3.擴大VG
vgextend /dev/hda1[8-9] (后面的分區務必先進行pvcreate方可使用)
4.刪除VG 刪除VG前必須先刪除LV,在刪除LV前請先備份數據!!!
4.1刪除LV
? lvremove /dev/vg_name/lv_name
4.2刪除VG
? vgremove
案例:在RAID5上建LVM
1.準備三個容量相同的分區
/dev/hda7 509 744 1895638+? fd Linux raid autodetect
/dev/hda8 745 980 1895638+? fd Linux raid autodetect
/dev/hda9 981 1216 1895638+ fd Linux raid autodetect
2.建RAID5
mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/hda[7-9]
3.創建PV
pvcreate /dev/md0
4.創建VG
vgcreate vg0 /dev/md0
5.創建LV
lvcreate -L 1024M -n opt vg0 (1G空間)
lvcreate -L 500M -n train vg0 (500M空間)
6.格式化LV
mkfs.ext3 /dev/vg0/opt mkfs.ext3 /dev/vg0/train 7.新建掛載點
cd /
mkdir opt train
8.修改fstab文件,加其中加入如下兩行
? ...??????????? ...?????????????...???????????? ...???????? ...???? ...
/dev/vg0/opt???? /opt??????????? ext3???????????defaults????? 1?????? 2
/dev/vg0/train?? /train????????? ext3?????????? defaults????? 1?????? 2 測試成功
使用lfs livecd(redhat的rescue模式也是會提示lv在mount狀態)
用livecd引導
使用"vgscan"搜索到硬盤的vg
然后用"vgchange -a y"激活vg
我是要縮小分區所以執行下面的命令:
e2fsck -f /dev/VolGroup00/LogVol00??(redhat默認的vg名字好難打<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />)
resize2fs /dev/VolGroup00/LogVol00 3000M??(這個數值不能小于lv中的數據所占空間)
lvreduce -L3000M /dev/VolGroup00/LogVol00
如果要增大lv:
lvextend -L5000M /dev/VolGroup00/LogVol00??(注意先查看vg的剩余空間)
e2fsck -f /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00 5000M? ?如果是rhel4,增大lv的時候可以使用ext2online,可以在線增大,不需要關機的
LVM (Logical Volume Manager,邏輯卷管理器):Linux 中用于管理邏輯卷的功能。
PV(Physical Volume,物理卷):數據實際保存的位置,由許多 PE 組成。
VG(Volume Group,卷組):多個 PV 組合在一起。
LV(Logical Volume,邏輯卷):LVM 創建的虛擬卷,由許多 LE 組成,可以像普通分區一樣進行掛接,可以動態修改大小。
PE(Physical Extent):LVM 管理的最小單位,默認為 4MB。
LE(Logical Extent):大小與 PE 相同,并與 PE 一一對應。
制作 LVM 下面我們嘗試在 Linux 下使用 LVM 來管理分區。以下操作使用的系統為 Fedora Core 3。 1. 首先用 fdisk 創建兩個分區 /dev/hda7 和 /dev/hda8,選擇分區大小為 1G。結果如下:
??? Device Boot????? Start???????? End????? Blocks?? Id? System
?/dev/hdb1?????????????? 1??????? 2117???? 1000251?? 83? Linux
?/dev/hdb2??????????? 2118??????? 4234???? 1000282+? 83? Linux 2. 使用 pvcreate 命令將分區建立為 PV。
?# pvcreate /dev/hdb1
?? Physical volume "/dev/hdb1" successfully created
?# pvcreate /dev/hdb2
?? Physical volume "/dev/hdb2" successfully created 3. 使用 vgcreate 命令將新建的兩個 PV 組合成 VG。
?# vgcreate newvg /dev/hdb1 /dev/hdb2
?? Volume group "newvg" successfully created 之后我們可以發現在 /dev 目錄下多了一個名為 newvg 的目錄,這就是我們建立的 VG。 4. 使用 lvcreate 命令在 newvg 中建立一個 LV,名為 lv01,大小為 256M。
?# lvcreate -L 256M -n lv01 newvg
?? Logical volume "lv01" created 可以發現在 /dev/newvg 下多了一個名為 lv01 的符號鏈接,這就是 LV。 5. 在 lv01 上建立文件系統。
?# mke2fs /dev/newvg/lv01 6. 掛接該文件系統。
?# mount -t ext2 /dev/newvg/lv01 /root/lv 至此一個 LV 已經建立完畢。我們可以試著增大該 LV 的容量。使用 lvextend 命令將剛剛建立的 LV 增大 128M。擴大容量之后需要使用 resize2fs 命令來擴大原有的文件系統到新的容量。
?# lvextend -L+128M /dev/newvg/lv01
?? Extending logical volume lv01 to 384.00 MB
?? Logical volume lv01 successfully resized
?
?# umount /dev/newvg/lv01
?
?# e2fsck -f /dev/newvg/lv01
?e2fsck 1.36 (05-Feb-2005)
?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/newvg/lv01: 12/65536 files (8.3% non-contiguous), 10336/262144 blocks
?
?# resize2fs /dev/newvg/lv01
?resize2fs 1.36 (05-Feb-2005)
?Resizing the filesystem on /dev/newvg/lv01 to 393216 (1k) blocks.
?The filesystem on /dev/newvg/lv01 is now 393216 blocks long.
?
?# mount -t ext2 /dev/newvg/lv01 /root/lv 之后馬上就可以利用 df -h 命令看到文件系統的容量改變了。 我們也可以利用 vgdisplay 命令來查看 VG 的信息。
?# vgdisplay newvg
?? --- Volume group ---
?? VG Name?????????????? newvg
?? System ID
?? Format??????????????? lvm2
?? Metadata Areas??????? 2
?? Metadata Sequence No? 3
?? 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?????????????? 1.91 GB
?? PE Size?????????????? 4.00 MB
?? Total PE????????????? 488
?? Alloc PE / Size?????? 96 / 384.00 MB
?? Free? PE / Size?????? 392 / 1.53 GB
?? VG UUID?????????????? YAlPwY-Vlfa-ZBa7-4jPQ-60Gk-Fzwi-jUW8BM 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+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
?
?
一、在RHEL 4 中建有名為rhcevg的VG,名為rhcelv的LV,輸出如下:------------------------------------------------------------------
[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 124.00 MB free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 100.00 MB free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 3.16 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MB
Current LE 25
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
---------------------------------------------------------------------
可以看出rhcelv的大小為100M,VG還有很多未分配空間;
二、增加rhcelv大小至3.26G,即增加3.16G
[root@rhce tmp]# lvresize -L +3.16G rhcevg/rhcelv
Rounding up size to full physical extent 3.16 GB
Extending logical volume rhcelv to 3.26 GB
Logical volume rhcelv successfully resized
[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
97M 5.6M 87M 7% /mnt/rhcelv
# 增加后大小容量未更變,執行ext2online命令
[root@rhce tmp]# ext2online /dev/rhcevg/rhcelv
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
[root@rhce tmp]# df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv
[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 1
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
# 可以看到容量已增加
三、在減小LV大小,如下:
[root@rhce tmp]# umount /mnt/rhcelv/;lvresize -L -2G rhcevg/rhcelv
WARNING: Reducing active logical volume to 1.26 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce rhcelv? [y/n]: y
Reducing logical volume rhcelv to 1.26 GB
Logical volume rhcelv successfully resized
# 可以看到大小已減小2G,rhcelv現大小為1.26G,查看
[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 0 free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 0 free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 2.22 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb0M
LV Write Access read/write
LV Status available
# open 0
LV Size 1.26 GB
Current LE 322
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0
----------------------------------
# 可以看出大小在pvdisplay中已顯示為1.26G,
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/
[root@rhce tmp]# df -h|grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv
# 可以看出,容量未改;
[root@rhce tmp]# umount /mnt/rhcelv/
[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (28-Feb-2004)
The filesystem size (according to the superblock) is 3416064 blocks
The physical size of the device is 1318912 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>?
# 卸載后fsck發現報錯,重新格式化
[root@rhce tmp]# mkfs.ext3 /dev/rhcevg/rhcelv
mke2fs 1.35 (28-Feb-2004)
max_blocks 337641472, rsv_groups = 10304, rsv_gdb = 80
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
165088 inodes, 329728 blocks
16486 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=339738624
11 block groups
32768 blocks per group, 32768 fragments per group
15008 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
inode.i_blocks = 3848, i_size = 4243456
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (28-Feb-2004)
/dev/rhcevg/rhcelv: clean, 11/165088 files, 13881/329728 blocks
-----------------------------------------------------------------
重新格式化后,fsck無誤,掛載
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
1.3G 34M 1.2G 3% /mnt/rhcelv
# 容量改變
#BTW,說實在的,搞了很多次再明白;
# 增加容量只需掛載的狀態下ext2online ,(man ext2online發現這一句話,It is only possible to enlarge a mounted filesystem.)
# 減小容量卻需重建文件系統,不知可否有其它操作方式?
?
?
?
一 LVM配置步驟1.準備一個分區
?? fdisk /dev/hda (或/dev/sda) 本案例中創建的分區為/dev/hda15 2.創建PV
?? pvcreate /dev/hda15 如果有多少分區/dev/hda15,/dev/hda16,/dev/hda17,則可以 pvcreae /dev/hda1[5-7] 3.創建VG(vg_name是VG的名稱)
vgcreate vg_name /dev/hda15
如果有多少分區/dev/hda15,/dev/hda16,/dev/hda17創建一個VG,則可以 vgcreate vg_name /dev/hda1[5-7]
4.創建LV(lv_name是LV的名稱)
lvcreate -n lv_name -L 10M vg_name
5.格式化LV
mkfs.ext3 /dev/vg_name/lv_name
6.掛載文件系統
mount /dev/vg_name/lv_name /lvm
二 LVM管理
1.擴大LV
?? 在擴大LV時,必須增大文件系統?
1.1擴大LV
? lvextend -L 20M /dev/vg_name/lv_name (擴大LV到20M空間)??
? lvextend -L +20M /dev/vg_name/lv_name (增加LV20M空間,LV現空間是30M)
1.2增大文件系統(這一步容易疏忽)
假設原來文件系統大小為100M,那又新增20M,故新的文件系統為120M ext2online /dev/vg_name/lv_name 120M
2.縮小LV
?[假設文件系統是10M,LV是30M,準備把LV縮小到20M] 在縮小LV空間時,務必考慮真實的文件系統大小,可能導致文件不可用。
2.1縮小文件系統(必先卸載文件系統)
umount /lvm
fsck.ext3 /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name 20M
2.2縮小文件系統(在線操作,不用卸載)--在配置過程中好像不好使 ext2online /dev/vg_name/lv_name 20M
2.3縮小LV
lvreduce -L 20M /dev/vg_name/lv_name
3.擴大VG
vgextend /dev/hda1[8-9] (后面的分區務必先進行pvcreate方可使用)
4.刪除VG 刪除VG前必須先刪除LV,在刪除LV前請先備份數據!!!
4.1刪除LV
? lvremove /dev/vg_name/lv_name
4.2刪除VG
? vgremove
案例:在RAID5上建LVM
1.準備三個容量相同的分區
/dev/hda7 509 744 1895638+? fd Linux raid autodetect
/dev/hda8 745 980 1895638+? fd Linux raid autodetect
/dev/hda9 981 1216 1895638+ fd Linux raid autodetect
2.建RAID5
mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/hda[7-9]
3.創建PV
pvcreate /dev/md0
4.創建VG
vgcreate vg0 /dev/md0
5.創建LV
lvcreate -L 1024M -n opt vg0 (1G空間)
lvcreate -L 500M -n train vg0 (500M空間)
6.格式化LV
mkfs.ext3 /dev/vg0/opt mkfs.ext3 /dev/vg0/train 7.新建掛載點
cd /
mkdir opt train
8.修改fstab文件,加其中加入如下兩行
? ...??????????? ...?????????????...???????????? ...???????? ...???? ...
/dev/vg0/opt???? /opt??????????? ext3???????????defaults????? 1?????? 2
/dev/vg0/train?? /train????????? ext3?????????? defaults????? 1?????? 2 測試成功
使用lfs livecd(redhat的rescue模式也是會提示lv在mount狀態)
用livecd引導
使用"vgscan"搜索到硬盤的vg
然后用"vgchange -a y"激活vg
我是要縮小分區所以執行下面的命令:
e2fsck -f /dev/VolGroup00/LogVol00??(redhat默認的vg名字好難打<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />)
resize2fs /dev/VolGroup00/LogVol00 3000M??(這個數值不能小于lv中的數據所占空間)
lvreduce -L3000M /dev/VolGroup00/LogVol00
如果要增大lv:
lvextend -L5000M /dev/VolGroup00/LogVol00??(注意先查看vg的剩余空間)
e2fsck -f /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00 5000M? ?如果是rhel4,增大lv的時候可以使用ext2online,可以在線增大,不需要關機的
?
?
轉載于:https://blog.51cto.com/442911/89223
總結
以上是生活随笔為你收集整理的在 Linux 中使用动态磁盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到了前夫是怎么回事
- 下一篇: 做梦梦到表妹结婚是什么意思