1. 緒論
歡迎你,親愛的讀者。
寫這個文檔的目的是為了告訴你什么是LVM,它怎樣工作,你怎樣運用它使你的生活變得更容易。雖然有一份LVM FAQ,但仍是德文的,它是從不同的角度來描寫的。它是一份“真的”HOWTO,在傳授理解(有希望的)的時候也是非常內行的。
我要說清楚我不是一個Linux邏輯卷管理器(Logical Volume Manager)的作者。我向那些作者表示敬意,同時我希望能和他們合作。
不可思議的是我甚至不知道LVM的開發者。我希望這种情況不久會改變。我事先向他們表示道歉。
1.1 免責聲明 & 許可
分發這個文檔是希望它對你有用,但是不提供任何擔保,也沒有銷售或适應特殊目的的隱含擔保。
如果你的磁盤融化了,你公司解雇了你--這決不是我們的錯。對不起。請記得經常做備份,在沒有重要數据的系統上做實驗。
此外,Richard Allen不代表他老板說話。
Linux是Linus Torvalds的注冊商標。
英文原文(若翻譯有誤,以原文為准)
This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
If your disks melt and your company fires you - its never our fault. Sorry. Make frequent backups and do your experiments on non-mission critical systems.
Furthermore, Richard Allen does not speak for his employer.
Linux is a registered trademark of Linus Torvalds.
1.2 預備知識
不是太多。如果你曾經安裝過Linux和創建過文件系統(fdisk/mkfs),那你就准備就緒了。但因為總是以root身份操作,所以一定要小心謹慎﹗錯誤的命令或操作設備文件都可能損坏已經存在的數据。
如果你知道怎樣配置HP/UX LVM,那你几乎都完成了,Linux工作得很象HP上的處理。
1.3 注意事項
關于這份文檔有几點需要注釋。雖然我寫了大部分,但我真的不希望它停步。我堅決相信Open Source,我鼓勵你反饋、更新、打補丁等等。不要不愿意告訴我們有關排版或普通的老錯誤。
如果你感覺你更有資格來維護一部分,或者你認為你能創作和維護一個新的部分,歡迎你。這個HOWTO的SGML格式是通過CVS可用的。我預想這會是個合作計划。
這份文檔里,你會發現許多FIXME的通知。補丁總是歡迎的﹗無論你在哪里發現FIXME,你都要明白你正踩在未知的領域。這不是說其他地方沒有錯誤,而是說這里是要特別注意的地方。如果你已經驗証了什么,請告訴我,我好刪除這FIXME通知。
1.4 訪問,CVS & 更新
這份HOWTO的規范定位在 這里。
我們現在有匿名的CVS訪問,對全世界普遍有效。這使你更容易獲得最新版的HOWTO,并提供改變和增強。
如果你想通過CVS獲得這份HOWTO,下面教你怎樣做﹕
$ export CVSROOT=:pserver:anon@outpost.ds9a.nl:/var/cvsroot
$ cvs login
CVS password: [enter cvs (without s)]
$ cvs co lvm-howto
cvs server: Updating lvm-howto
U lvm-howto/lvm-howto.sgml
如果你發現錯誤,或者想增加什么,本地修复它,并運行“cvs diff -u”,同時將結果發給我們。
提供了一個Makefile文件來幫助你創建postscript,dvi,pdf,html 和 plain text格式。你可能需要安裝sgml-tools,ghostscript 和 tetex 以獲得所有格式。
1.5 這份文檔的編排
我們將首先解釋一些需要的基本知識。我們盡量設法包括例子來幫助理解。
2. 什么是LVM﹖
傳 統上,一個分區大小是靜態的。這要求一個系統安裝人員必須考慮的不是“我要在這個分區上存儲多少數据”,而是“我‘究竟’要在這個分區上存儲多少數据”。 當一個用戶在這個分區上沒有空間了,他要么不得不重新分區(這可能要求整個操作系統重裝),要么象符號連接一樣使用組裝机。
一個分區就是物理磁盤上一系列連續數据塊的概念已經演變了。多數類Unix系統現在有能力分解物理磁盤到許多單元。多個驅動器上的存儲單元可以匯聚成一個“邏輯卷”,它們可以分配給分區。另外,單元可以隨著空間要求的改變而從分區中添加和刪除。
這就是基本的邏輯卷管理器(LVM)
例如,假設你有一個1GB的磁盤,并且創建“/home”分區花了600MB。設想你沒有空間了,于是決定“/home”需要1GB。用傳統的分區觀念,你不得不有另外一個至少1GB大小的驅動器。接著增加這個磁盤,創建新的/home,并且將現有的數据拷貝過去。
然而,用LVM配置,你僅僅只需要增加400MB(或更大)的磁盤,并將它的存儲單元添加到“/home”分區中。其他工具可以讓你調整原來文件系統的大小,所以你僅僅只需要調整“/home”大小來使用更大的分區,接著返回到商務中。
一個非常特殊的處理,LVM甚至可以做它自身的“快照”,這使你能對不可移動的目標做備份。我們返回到這個激動人心的可能中,稍后,有許多另外的真實應用。
以下章節中,我們解釋了LVM的基本要素,和它使用中的許多概要。
3. 基本原理
Ok,不要因為恐懼而停止,但是LVM有許多你要明白的術語,以免你危及你的文件系統。
我們從下面開始,或多或少。
物理介質 The physical media
你應該感受“物理”這個單詞有极大的延伸,雖然我們剛開始假設它僅僅是一個硬盤,或者一個分區。例如,/dev/hda,/dev/hda6,/dev/sda。你可以轉換一個塊設備上任何連續塊到一個。。。
物理卷 Physical Volume (PV)
一個PV只不過是有許多管理數据添加在它里面的物理介質--一旦你添加了它,LVM就認為它是。。。的一個持有者。
物理分區 Physical Extents (PE)
物理分區真的象一些大的數据塊,通常有几MB。PE可以分配給一個。。。
卷組 Volume Group (VG)
一個VG是由許多物理分區組成的(可能來自多個物理卷或硬盤)。雖然這可能容易讓你認為一個VG就是由几個硬盤組成的(例如/dev/hda和/dev/sda),但是更确切的說,它包含由這些硬盤提供的許多PE。
>從這個卷組,PE可以分配給一個。。。
邏輯卷 Logical Volume (LV)
Yes,我們最終到達某處。一個邏輯卷是我們工作的最終結果,這里是我們存儲信息的地方。這等同于傳統分區的想法。
象用通常的分區一樣,在邏輯卷上你能代表性的創建一個。。。
文件系統 Filesystem
文件系統是你想它成為的形態﹕標准的 ext2,ReiserFS,NWFS,XFS,JFX,NTFS,等等。。。對Linux內核來說,在通常的分區和邏輯卷之間沒有差別。
我試著畫了一個ASCII圖來使這些形象化。
一個物理卷,包含了許多物理分區﹕
+-----[ Physical Volume ]------+
| PE | PE | PE | PE | PE | PE |
+------------------------------+
一個卷組,包含了2個物理卷(PV)有6個物理分區﹕
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--------------+ +---------------+ |
+---------------------------------------+
我們現在做更進一步擴展﹕
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--+---+---+---+ +-+----+----+---+ |
| | | | +-----/ | | |
| | | | | | | |
| +-+---+---+-+ +----+----+--+ |
| | Logical | | Logical | |
| | Volume | | Volume | |
| | | | | |
| | /home | | /var | |
| +-----------+ +------------+ |
+---------------------------------------+
這個向我們展示了兩個文件系統,它跨越兩個磁盤。/home文件系統包含4個物理分區,/var文件系統包含2個。
bert hubert 正在寫一個工具來更真實的描述LVM,這里提供了一些它在屏幕上出現的外觀。看起來比ASCII圖畫要好。
3.1 Show & Tell
Ok,這些概念很難理解(’We are LVM of Borg...),因此下面給出了創建一個邏輯卷的例子。不要粘貼這個例子到你的控制台,因為這樣會破坏數据,除非碰巧你的計算机的/dev/hda3和/dev/hdb2沒有使用。
如果有疑問,查看上面的ASCII圖畫。
你應該首先設置/dev/hda3和/dev/hdb2的分區類型為0x8e,它表示”Linux LVM”。請注意你的fdisk的版本可能仍不認識這种類型,因此它顯示為“Unknown”﹕
# fdisk /dev/hda
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 2 16033+ 83 Linux
/dev/hda2 3 600 4803435 83 Linux
/dev/hda3 601 607 56227+ 83 Linux
/dev/hda4 608 614 56227+ 83 Linux
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 2 16033+ 83 Linux
/dev/hda2 3 600 4803435 83 Linux
/dev/hda3 601 607 56227+ 8e Unknown
/dev/hda4 608 614 56227+ 83 Linux
Command (m for help): w
我們對/dev/hdb2做同樣的操作,在此就不演示了。這是需要的,以至LVM能重建你應該丟失的配置。
通常,不需要重啟,但有些計算机卻要求。因此如果下面的例子不工作,試試重啟。
接著我們創建物理卷(PV),如下﹕
# pvcreate /dev/hda3
pvcreate -- physical volume "/dev/hda3" successfully created
# pvcreate /dev/hdb2
pvcreate -- physical volume "/dev/hdb2" successfully created
我們再將這兩個物理卷(PV)加到一個叫做“test”的卷組(VG)中﹕
# vgcreate test /dev/hdb2 /dev/hda3
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "test"
vgcreate -- volume group "test" successfully created and activated
現在我們有一個空的卷組(VG),讓我們來檢查一下﹕
# vgdisplay -v test
--- Volume group ---
VG Name test
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 184 MB
PE Size 4 MB
Total PE 46
Alloc PE / Size 0 / 0
Free PE / Size 46 / 184 MB
--- No logical volumes defined in test ---
--- Physical volumes ---
PV Name (#) /dev/hda3 (2)
PV Status available / allocatable
Total PE / Free PE 13 / 13
PV Name (#) /dev/hdb2 (1)
PV Status available / allocatable
Total PE / Free PE 33 / 33
這里的許多數据--大多數現在都容易理解了。我們看到沒有邏輯卷(LV)定義,因此我們要補上它。我們將在“test”卷組(PV)中創建一個50MB的邏輯卷,叫做“HOWTO”﹕
# lvcreate -L 50M -n HOWTO test
lvcreate -- rounding up size to physical extent boundary "52 MB"
lvcreate -- doing automatic backup of "test"
lvcreate -- logical volume "/dev/test/HOWTO" successfully created
Ok,到這里,我們創建一個文件系統﹕
# mke2fs /dev/test/HOWTO
mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
13328 inodes, 53248 blocks
2662 blocks (5.00%) reserved for the super user
First data block=1
7 block groups
8192 blocks per group, 8192 fragments per group
1904 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
# mount /dev/test/HOWTO /mnt
# ls /mnt
lost+found
我們做完了﹗讓我們回顧我們的卷組(VG),它現在充滿了一些東西﹕
# vgdisplay test -v
--- Volume group ---
VG Name test
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 1
Open LV 1
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 184 MB
PE Size 4 MB
Total PE 46
Alloc PE / Size 13 / 52 MB
Free PE / Size 33 / 132 MB
--- Logical volume ---
LV Name /dev/test/HOWTO
VG Name test
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 52 MB
Current LE 13
Allocated LE 13
Allocation next free
Read ahead sectors 120
Block device 58:0
--- Physical volumes ---
PV Name (#) /dev/hda3 (2)
PV Status available / allocatable
Total PE / Free PE 13 / 13
PV Name (#) /dev/hdb2 (1)
PV Status available / allocatable
Total PE / Free PE 33 / 20
好,這就是了。/dev/hda3完全沒用,而/dev/hdb2有13個物理分區(PE)在用。
3.2 激活和非激活﹕內核空間和用戶空間
和使用所有操作系統一樣,Linux划分了兩個部分﹕內核空間(kernel space)和用戶空間(user space)。用戶空間有時叫做用戶區(userland),這也是關于這個主題的一個很好的名字。
關于邏輯卷管理器的創建和修改都是在用戶空間做的,然后傳給內核。一旦卷組或邏輯卷向內核匯報,它就叫做“激活(Active)”。當它被激活時,只有某些更改可以執行,其他的更改只有在它非激活時執行。
4. 首要條件
LVM在很大范圍內的內核中都有效。在Linux 2.4,LVM將全部被集成。內核2.3.47和以前的,LVM要經過處理來合并到主內核中。
4.1 內核
Linux 2.4
包含了你需要的所有內容。希望大多數的發行版都將LVM當成模塊集成來發行。如果你需要編譯,僅僅是當你選擇塊設備時打勾LVM選項。
Linux 2.3.99.*
一旦內核向前發展穩定了,這部分就不會存在了。但是現在,我們還是要描述一下。
當我們寫這篇文檔時,Linux最新的內核版本是2.3.99pre5,它仍然需要一些小的補丁才能使LVM工作。
對于Linux 2.3.99pre3,有兩個補丁發行﹕
一個補丁是張貼在linux-kernel,在這里可以找到。
Andrea Arcangeli改進了這個補丁,提供了一個增量的補丁,它應用于2.3.99pre3 LVM補丁和這之上。
對于Linux 2.3.99pre5,bert hubert將這兩個補丁合并成一個了,并且主要針對2.3.99pre5。在這里可以找到這個補丁。使用它要小心。
2.3.99pre6-1,是的,是補丁的一個預覽版,特色是第一次完成了LVM的支持﹗它仍然遺漏了Andreas的補丁,但我們确信它不久真的會發行的。
2.3.99pre4-ac1缺省有一個小的補丁在,并且能工作。雖然它不包括Andreas的補丁。
Linux 2.2
FIXME: write this
Linux 2.3
FIXME: write this
4.2 用戶余地
你需要從LVM站點下載有效的工具。用glibc2.1編譯系統要求的一些補丁。即使這樣,在Debian 2.2上仍會出錯。
5. 增長文件系統
你可以用一個預備好的腳本做大量的工作,也可以根据你的需要手工做
5.1 使用e2fsadm
如果在你的卷組中有剩余空間,并且你使用的是ext2文件系統(大多數人都是這樣的),你就可以使用這個便捷的工具。
e2fsadm命令利用商業的resize2fs工具。雖然人們都感覺resize2fs是一個很好的軟件,但是它并沒有被廣泛的安裝。
如果你想使用FSF的ext2resize命令,你需要告訴e2fsadm以下內容﹕
# export E2FSADM_RESIZE_CMD=ext2resize
# export E2FSADM_RESIZE_OPTS=""
余下的就簡單了,e2fsadm使用時很象其他的LVM命令﹕
# e2fsadm /dev/test/HOWTO -L+50M
e2fsadm -- correcting size 102 MB to physical extent boundary 104 MB
e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
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/test/HOWTO: 11/25688 files (0.0% non-contiguous), 3263/102400 blocks
lvextend -- extending logical volume "/dev/test/howto" to 104 MB
lvextend -- doing automatic backup of volume group "test"
lvextend -- logical volume "/dev/test/HOWTO" successfully extended
ext2_resize_fs
ext2_grow_fs
ext2_block_relocate
ext2_block_relocate_grow
ext2_grow_group
ext2_add_group
ext2_add_group
ext2_add_group
ext2_add_group
ext2_add_group
ext2_add_group
direct hits 4096 indirect hits 0 misses 1
e2fsadm -- ext2fs in logical volume "/dev/test/HOWTO" successfully extended to 104 MB
5.2 增長邏輯卷
e2fsadm命令為你做了這些工作。然而,了解怎樣手工來做可能會有用的。
如果在你的卷組中有剩余空間,那么只需要一行﹕
# lvextend -L+12M /dev/test/HOWTO
lvextend -- rounding size to physical extent boundary
lvextend -- extending logical volume "/dev/test/HOWTO" to 116 MB
lvextend -- doing automatic backup of volume group "test"
lvextend -- logical volume "/dev/test/HOWTO" successfully extended
5.3 增長卷組
這是用vgextend功能實現的,它很象餡餅一樣容易。你首先需要創建一個物理卷。這要用pvcreate來實現。使用這個工具,你轉換任何塊設備為一個物理卷。
這樣做了之后,vgextend做余下的任務﹕
# pvcreate /dev/sda1
pvcreate -- physical volume "/dev/sda1" successfully created
# vgextend webgroup /dev/sda1
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "webgroup"
vgextend -- volume group "webgroup" successfully extended
請注意,為了要做這些,你的卷組必須是激活的。你可以通過執行象“vgchange -a y webgroup”來使它激活。
5.4 增長文件系統
如果你想手工做,有兩條路徑可以實現。
ext2离線,使用ext2resize
离線,就意味著你必須umount這個文件系統來做這些改變。在做這些改變的時候,這個文件系統和它上面的數据暫時不可用。如果你想擴充根分區或其他重要的分區,你必須用其他的啟動介質來引導。
ext2resize工具可以在GNU ftp站點找到,但大多數的發行版都將它作為一個包來發行。它的語法也簡單易懂﹕
# ext2resize /dev/HOWTO/small 40000
這里40000是文件系統已經增長或收縮之后的塊的數目。
ext2在線
FIXME: write this
6. 替換磁盤
這是LVM的好處之一。一旦你發現某個磁盤有錯誤,那就是要移動你的數据的時候了。使用LVM它很象餡餅一樣容易。我們首先舉一個明顯的替換例子,你先添加一個磁盤到系統中,它至少要和你想要替換的磁盤一樣大。
要移動數据,我們移動卷組的物理分區到另一個磁盤上,或者更准确的說,到另一個物理卷上。要做這些,LVM給我們提供了pvmove功能。
假設我們怀疑的那塊磁盤叫/dev/hda1,并且我們想用/dev/sdb3來替換它。我們首先將/dev/sdb3添加到包含/dev/hda1的那個卷組中。
在這之前,umount這個卷組上的所有文件系統看來是明智的。有一個全備份也不會損坏什么。
FIXME: is this necessary?
接下來我們執行pvmove。非常簡單的,我們僅僅提到我們想要移走的那塊磁盤,就象這樣﹕
# pvmove /dev/hda1
pvmove -- moving physical extents in active volume group "test1"
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 "test1"
pvmove -- 12 extents of physical volume "/dev/hda1" successfully moved
請留意這個警告。而且看來至少有些內核或LVM的版本在使用這個命令時有問題。我是用2.3.99pre6-2來測試的,它可以工作,但要警告。
現在,/dev/hda1沒有包含任何物理分區了,我們可以將它從卷組中刪除﹕
# vgreduce test1 /dev/hda1
vgreduce -- doing automatic backup of volume group "test1"
vgreduce -- volume group "test1" successfully reduced by physical volume:
vgreduce -- /dev/hda1
FIXME: we need clarity on a few things. Should the volume group be active? When do we get data loss?
6.1 當事情發生在晚期時
如果一個磁盤沒有出現警告就失敗了,你就不能移走它上面的物理分區到另一個物理卷上,這樣你可能會丟失數据,除非在這個失敗的PV上的邏輯卷是鏡像了的。正确的行為是用一個同樣的PV或者至少同樣大小的分區來替換這個失敗的PV。
/etc/lvmconf目錄包含了LVM數据和結构的備份,包括哪些磁盤做成了PV,每個PV屬于哪個VG,每個VG中有哪些LV。
替換了出錯的磁盤之后,你可以用vgcfgrestor命令來恢复LVM數据到新的PV上。它恢复卷組和所有它的信息,但是不會恢复在邏輯卷上的數据。這是因為當LVM數据做一些更改時,LVM命令自動做備份。
--------------------------------------------------------------------------------
7. 為一致性備份做快照
這是更加難以置信的一個可能性。假設你有一個非常繁忙的服務器,有許多東西運行。為了一個有用的備份,你需要停止大量的程序,否則,你將以數据不一致告終。
一個規范的例子是從/tmp移動一個文件到/root下,而且/root將先備份。當/root被讀的時候,這個文件還不在那里。當/tmp被備份時,這個文件已經不在了。
另一個事例是保存數据庫或目錄。如果一個文件在使用狀態,我們就沒有任何線索了,除非我們給應用程序時間做一個清除的關閉。
這樣的話,新的問題又出現了。我們關閉程序,做我們的備份,接著重新啟動它們。如果備份只花几分鐘這是很好的,但是,如果它要花數小時,或者你根本不确定它到底要花多久的時候,事情就真的痛苦了。
LVM可以營救。
使用LVM,我們可以做一個LV瞬間的快照,然后mount它,再備份它。
讓我們試驗一下﹕
# mount /dev/test/HOWTO /mnt
# echo > /mnt/a.test.file
# ls /mnt/
a.test.file lost+found
# ls -l /mnt/
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
Ok,我們現在有些事情要用它一起做。讓我們產生這個快照﹕
# lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO
lvcreate -- WARNING: all snapshots will be disabled if more than 16 MB are changed
lvcreate -- INFO: using default snapshot chunk size of 64 KB
lvcreate -- doing automatic backup of "test"
lvcreate -- logical volume "/dev/test/HOWTO" successfully created
對于“--size”參數以后再詳述。讓我們mount這個快照﹕
# mount /dev/test/snap /snap
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
現在我們從原處刪除a.test.file,并且檢查它是否仍然在快照里﹕
# rm /mnt/a.test.file
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
太令人惊訝了﹗
7.1 它是如何工作的﹖
記得我們不得不設置“--size”參數嗎﹖真正發生的事情是,“snap”卷需要有那些當LVM調用時,在原處要被改變的所有塊的一個拷貝。
當我們刪除a.test.file時,它的i節點被刪除。這引起64KB要被標注成“臟的”--同時原始數据的一個拷貝被寫到“snap”卷。這個例子中,我們分配了16MB給快照,因此如果多于16MB的塊要被修改,快照就會無效了。
要決定一個快照分區的正确大小,你將不得不推測基于主LV的使用模式、快照要激活的總時間。例如,在午夜,當無人使用系統的情況下,一個几小時的備份可能要求很小的空間。
請注意,快照不是永久的。如果你卸下LVM或重啟,它們就丟失了,需要重新創建。
--------------------------------------------------------------------------------
8. 冗余 & 性能
為了性能的考慮,可以將數据分散在几個條塊化的磁盤上。這意味著塊1在PV A上,塊2在PV B上,塊3又在PV A上。你也可以條塊化跨多余2塊磁盤。
這樣的安排意味著你有更多有效的磁盤帶寬。也就是說包含了更多的“軸”。以后會詳述。
除此之外,為了提高性能,也可以將你的數据在多個磁盤上有多份拷貝。這叫做鏡像。目前,LVM本身還不支持它,但是有多种方法能實現鏡像。
8.1 為何要條塊化﹖
磁盤的性能至少受三种因素的影響。最明顯的是一塊磁盤上的數据能連續被讀或寫的速度。這是當讀或寫僅連接了一個單一的磁盤的SCSI/IDE總線上的一個大文件時的限制因素。
接著是到磁盤的有效帶寬。如果你在一個SCSI總線上有7塊盤,這也許會小于你的磁盤本身寫的速度。如果你愿意花足夠的錢,你可以避免這個瓶頸成為一個問題。
然后是響應時間。當成諺語說,響應時間總是坏消息。甚至更坏的是,你不可能通過花更多的錢來降低響應時間﹗現在出產的大多數磁盤有一個大約7ms的響應時間。還有SCSI響應時間,通常是大約25ms。
FIXME: need recent numbers!
這意味著什么﹖在一個典型情形,總的響應時間大約是30ms。因此你每秒鐘只能執行大約33個磁盤操作。如果你想每秒鐘能做數千個查詢,并且你沒有大量的緩存,那么你就非常不走運了。
如果你有多個磁盤,或者“軸”,在并行工作,那么你可以有多個命令很好地圍繞你的響應問題同時執行。有些應用程序,比如一個大的新聞服務器,如果沒有條塊化或其它I/O敏捷性它甚至不再工作。
這就是條塊化做的事。如果你的總線能胜任,甚至連續的讀和寫可能會更快。
8.2 為何不條塊化
條塊化沒有進一步的措施來解除你的錯誤机會,按一個“每次一比特”的基本原則。如果你的磁盤任一塊死了,你全部的邏輯卷都會丟失。如果你正好連接數据,僅僅文件系統部分丟失。
最終的選項是鏡像的條塊化。
FIXME: make a mirrored stripe with LVM and md
8.3 LVM本身的條塊化
當用lvcreate創建LV時,指定條塊化配置項。有兩個相關參數。-i參數告訴LVM應該在多少個PV上分散數据。條塊化不是真的按一次一比特的基礎來做的,而是按塊。-I參數指定單位為KB的塊大小。注意它必須是2的一個冪,而且最大的塊大小為128KB。
例如﹕
# lvcreate -n stripedlv -i 2 -I 64 mygroup -L 20M
lvcreate -- rounding 20480 KB to stripe boundary size 24576 KB / 6 PE
lvcreate -- doing automatic backup of "mygroup"
lvcreate -- logical volume "/dev/mygroup/stripedlv" successfully created
性能注意事項
如果跨同一塊磁盤的兩個分區來條塊化,性能的“增加”可能會是非常消极的--注意避免這樣。跨單一的IDE總線上的兩個磁盤來條塊化也是沒用的--除非IDE已經改進了我所記憶的。
FIXME: is this still true?
很老的主板可能有兩個IDE總線,但是第二個通常是用于一個相對慢的cdrom驅動器。你可以用几個工具來執行基准,最令人注目的是“Bonnie”。ReiserFS人們已經發布了Bonnie++,它可以用來測試性能數据。
8.4 硬件RAID
多 數高速的Inter x86服務器有硬件RAID控制器。它們中大部分至少有2個獨立的SCSI通道。幸運的是,這些在LVM上很少有關系。在Linux能看到如此一個控制器 上的任何東西之前,管理員必須在RAID控制器自身里定義一個邏輯驅動器。舉一個例子,他(她)可能選擇條塊化在SCSI通道A上的兩個磁盤,然后鏡像它 們到通道B上的兩塊磁盤上。這是一個典型的RAID 0/1配置,最佳化性能和數据安全。當Linux在一台采用這种配置的机器上啟動時,它只能“看”到在RAID控制器上的一塊磁盤,那就是包含了RAID 0/1條塊組上四塊磁盤的邏輯驅動器。這就是說,至于LVM關心的,僅僅是在這台机器上的一塊磁盤,它將被同樣地使用。如果這些磁盤中的一個失敗 了,LVM甚至不知道。當管理員替換了磁盤(甚至很快的用熱備硬件),LVM也不知道任一种情況發生了。控制器會重新同步鏡像的數据,一切都良好。這里多 數人會退一步來詢問“那么使用這個RAID控制器,LVM為我帶來什么好處呢﹖”最容易的回答是,多數情況下,你在RAID控制器里定義了一個邏輯驅動器 后,你不可能在以后添加更多的磁盤到那個驅動器了。因此,如果你誤算了所要求的空間,或者你只是需要更多的空間,你都不可能添加一個新的磁盤或一組磁盤到 原來的條塊組里。這意味著你必須在這個控制器里創建一個新的RAID條塊組,然后用LVM你可以簡單的擴展LVM的LV,以致它無縫的跨越RAID控制器 里的兩個條塊組。
FIXME: Is there more needed on this subject ?
8.5 Linux軟件RAID
Linux 2.4帶著一個非常好的RAID代替出現了。Linux 2.2缺省的,當被Alan Cox發布時,是一個初期的RAID版本的特寫,它沒有被很好的重視。2.2仍然是早期版本特色的原因是寫內核的人們不想在一個穩定的版本里做改動,那樣 會要求使用者更新。
更多的人們,包括Red Hat,Mandrake和SuSE,選擇用表現得很完美的0.90版本來替換它。
這里我們只論述0.90版本。
FIXME: write more of this
--------------------------------------------------------------------------------
9. Cookbook
9.1 在計算机之間移動LVM磁盤
使 用這些新技術,簡單的任務象從一台計算机移動磁盤到另一台計算机就變得有些机警了。在用LVM之前,用戶只需要把這塊盤放到新的机器上并且mount這些 文件系統。使用LVM,就多一點事情要做。LVM結构既保存在磁盤上也保存在/etc/lvmconf目錄里,因此,移動一個或一組包含了一個VG的磁盤 所要做的唯一的事情是确保這個VG屬于的机器不會破坏它的數据。這是通過vgexport命令來實現的。vgexport僅僅從/etc/lvmconf 刪除關于這個VG的結构,而不會更改磁盤上的任何內容。一旦磁盤放到新的机器上(他們沒必要有相同的ID),唯一要做的事情就是修改/etc /lvmconf。這是通過vgimport來做的。
例如﹕
在机器#1﹕
vgchange -a n vg01
vgexport vg01
在机器#2﹕
vgimport vg01 /dev/sda1 /dev/sdb1
vgchange -a y vg01
注意你沒必要為這個VG使用相同的名字。如果vgimport命令沒有保存配置的備份,那就用vgcfgbackup來做。
9.2 重建/etc/lvmtab 和/etc/lvmtab.d
FIXME: write about more neat stuff
--------------------------------------------------------------------------------
10. 進一步閱讀
LVM站點
主要的有效LVM資源
德文LVM HOWTO
如果你能讀懂德文,它就已經包含了許多信息
德文HOWTO的翻譯
Peter.Wuestefeld@resnova.de正在將德文HOWTO翻譯成英語。看來他們會花許多時間在上面。如果你怀疑我們的HOWTO,或者想知道些什么,請試試他們的努力。
HP/UX管理磁盤向導
因為Linux LVM几乎就是HP/UX執行的一個原樣,他們的文檔對我們也是非常有用的。是一個很好的資料。
11. 致謝
我們嘗試在這里列出所有幫助我們寫這篇HOWTO的人。包括呈報更新、修复或投稿的人,還有幫助我們理解這個主題的人。
Axel Boldt
Sean Reifschneider
Alexander Talos
Eric Maryniak
沒有留言:
張貼留言