天天看點

LVM詳細講解

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:[email protected]:/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 | | 

| +--------------+ +---------------+ | 

+---------------------------------------+ 

我們現在做更進一步擴充: 

| +--+---+---+---+ +-+----+----+---+ | 

| | | | +-----/ | | | 

| | | | | | | | 

| +-+---+---+-+ +----+----+--+ | 

| | 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 

/dev/hda3 601 607 56227+ 8e Unknown 

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) 

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 

Cur LV 1 

Open LV 1 

Alloc PE / Size 13 / 52 MB 

Free PE / Size 33 / 132 MB 

--- Logical volume --- 

LV Name /dev/test/HOWTO 

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 

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 

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 

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 

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線上 

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它,再備份它。 

讓我們試驗一下: 

# 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 

對于“--size”參數以後再詳述。讓我們mount這個快照: 

# mount /dev/test/snap /snap 

# ls /snap 

現在我們從原處删除a.test.file,并且檢查它是否仍然在快照裡: 

# rm /mnt/a.test.file 

太令人驚訝了! 

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的翻譯 

[email protected]正在将德文HOWTO翻譯成英語。看來他們會花許多時間在上面。如果你懷疑我們的HOWTO,或者想知道些什麼,請試試他們的努力。 

HP/UX管理磁盤向導 

因為Linux LVM幾乎就是HP/UX執行的一個原樣,他們的文檔對我們也是非常有用的。是一個很好的資料。 

11. 緻謝 

我們嘗試在這裡列出所有幫助我們寫這篇HOWTO的人。包括呈報更新、修複或投稿的人,還有幫助我們了解這個主題的人。 

Axel Boldt 

Sean Reifschneider 

Alexander Talos 

Eric Maryniak

上一篇: IPC$詳細介紹
下一篇: sed 詳細使用

繼續閱讀