1. 緒論 歡迎你,親愛的讀者。 寫這個文檔的目的是為了告訴你什么是LVM,它怎樣工作,你怎樣運用它使你的生活變得更容易。雖然有一份LVM FAQ,但仍是德文的,它是從不同的角度來描寫的。它是一份“真的”HOWTO,在傳授理解(有希望的)的時候也是非常內(nèi)行的。 我要說清楚我不是一個Linux邏輯卷管理器(Logical Volume Manager)的作者。我向那些作者表示敬意,同時我希望能和他們合作。 不可思議的是我甚至不知道LVM的開發(fā)者。我希望這種情況不久會改變。我事先向他們表示道歉。 1.1 免責聲明 & 許可 分發(fā)這個文檔是希望它對你有用,但是不提供任何擔保,也沒有銷售或適應特殊目的的隱含擔保。 如果你的磁盤融化了,你公司解雇了你--這決不是我們的錯。對不起。請記得經(jīng)常做備份,在沒有重要數(shù)據(jù)的系統(tǒng)上做實驗。 此外,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 預備知識 不是太多。如果你曾經(jīng)安裝過Linux和創(chuàng)建過文件系統(tǒng)(fdisk/mkfs),那你就準備就緒了。但因為總是以root身份操作,所以一定要小心謹慎!錯誤的命令或操作設(shè)備文件都可能損壞已經(jīng)存在的數(shù)據(jù)。 如果你知道怎樣配置HP/UX LVM,那你幾乎都完成了,Linux工作得很象HP上的處理。 1.3 注意事項 關(guān)于這份文檔有幾點需要注釋。雖然我寫了大部分,但我真的不希望它停步。我堅決相信Open Source,我鼓勵你反饋、更新、打補丁等等。不要不愿意告訴我們有關(guān)排版或普通的老錯誤。 如果你感覺你更有資格來維護一部分,或者你認為你能創(chuàng)作和維護一個新的部分,歡迎你。這個HOWTO的SGML格式是通過CVS可用的。我預想這會是個合作計劃。 這份文檔里,你會發(fā)現(xiàn)許多FIXME的通知。補丁總是歡迎的!無論你在哪里發(fā)現(xiàn)FIXME,你都要明白你正踩在未知的領(lǐng)域。這不是說其他地方?jīng)]有錯誤,而是說這里是要特別注意的地方。如果你已經(jīng)驗證了什么,請告訴我,我好刪除這FIXME通知。 1.4 訪問,CVS & 更新 這份HOWTO的規(guī)范定位在 這里。 我們現(xiàn)在有匿名的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 如果你發(fā)現(xiàn)錯誤,或者想增加什么,本地修復它,并運行“cvs diff -u”,同時將結(jié)果發(fā)給我們。 提供了一個Makefile文件來幫助你創(chuàng)建postscript,dvi,pdf,html 和 plain text格式。你可能需要安裝sgml-tools,ghostscript 和 tetex 以獲得所有格式。 1.5 這份文檔的編排 我們將首先解釋一些需要的基本知識。我們盡量設(shè)法包括例子來幫助理解。 2. 什么是LVM? 傳統(tǒng)上,一個分區(qū)大小是靜態(tài)的。這要求一個系統(tǒng)安裝人員必須考慮的不是“我要在這個分區(qū)上存儲多少數(shù)據(jù)”,而是“我‘究竟’要在這個分區(qū)上存儲多少數(shù)據(jù)”。當一個用戶在這個分區(qū)上沒有空間了,他要么不得不重新分區(qū)(這可能要求整個操作系統(tǒng)重裝),要么象符號連接一樣使用組裝機。 一個分區(qū)就是物理磁盤上一系列連續(xù)數(shù)據(jù)塊的概念已經(jīng)演變了。多數(shù)類Unix系統(tǒng)現(xiàn)在有能力分解物理磁盤到許多單元。多個驅(qū)動器上的存儲單元可以匯聚成一個“邏輯卷”,它們可以分配給分區(qū)。另外,單元可以隨著空間要求的改變而從分區(qū)中添加和刪除。 這就是基本的邏輯卷管理器(LVM) 例如,假設(shè)你有一個1GB的磁盤,并且創(chuàng)建“/home”分區(qū)花了600MB。設(shè)想你沒有空間了,于是決定“/home”需要1GB。用傳統(tǒng)的分區(qū)觀念,你不得不有另外一個至少1GB大小的驅(qū)動器。接著增加這個磁盤,創(chuàng)建新的/home,并且將現(xiàn)有的數(shù)據(jù)拷貝過去。 然而,用LVM配置,你僅僅只需要增加400MB(或更大)的磁盤,并將它的存儲單元添加到“/home”分區(qū)中。其他工具可以讓你調(diào)整原來文件系統(tǒng)的大小,所以你僅僅只需要調(diào)整“/home”大小來使用更大的分區(qū),接著返回到商務中。 一個非常特殊的處理,LVM甚至可以做它自身的“快照”,這使你能對不可移動的目標做備份。我們返回到這個激動人心的可能中,稍后,有許多另外的真實應用。 以下章節(jié)中,我們解釋了LVM的基本要素,和它使用中的許多概要。 3. 基本原理 Ok,不要因為恐懼而停止,但是LVM有許多你要明白的術(shù)語,以免你危及你的文件系統(tǒng)。 我們從下面開始,或多或少。 物理介質(zhì) The physical media 你應該感受“物理”這個單詞有極大的延伸,雖然我們剛開始假設(shè)它僅僅是一個硬盤,或者一個分區(qū)。例如,/dev/hda,/dev/hda6,/dev/sda。你可以轉(zhuǎn)換一個塊設(shè)備上任何連續(xù)塊到一個。。。 物理卷 Physical Volume (PV) 一個PV只不過是有許多管理數(shù)據(jù)添加在它里面的物理介質(zhì)--一旦你添加了它,LVM就認為它是。。。的一個持有者。 物理分區(qū) Physical Extents (PE) 物理分區(qū)真的象一些大的數(shù)據(jù)塊,通常有幾MB。PE可以分配給一個。。。 卷組 Volume Group (VG) 一個VG是由許多物理分區(qū)組成的(可能來自多個物理卷或硬盤)。雖然這可能容易讓你認為一個VG就是由幾個硬盤組成的(例如/dev/hda和/dev/sda),但是更確切的說,它包含由這些硬盤提供的許多PE。 >;從這個卷組,PE可以分配給一個。。。 邏輯卷 Logical Volume (LV) Yes,我們最終到達某處。一個邏輯卷是我們工作的最終結(jié)果,這里是我們存儲信息的地方。這等同于傳統(tǒng)分區(qū)的想法。 象用通常的分區(qū)一樣,在邏輯卷上你能代表性的創(chuàng)建一個。。。 文件系統(tǒng) Filesystem 文件系統(tǒng)是你想它成為的形態(tài):標準的 ext2,ReiserFS,NWFS,XFS,JFX,NTFS,等等。。。對Linux內(nèi)核來說,在通常的分區(qū)和邏輯卷之間沒有差別。 我試著畫了一個ASCII圖來使這些形象化。 一個物理卷,包含了許多物理分區(qū): +-----[ Physical Volume ]------+ | PE | PE | PE | PE | PE | PE | +------------------------------+ 一個卷組,包含了2個物理卷(PV)有6個物理分區(qū): +------[ Volume Group ]-----------------+ | +--[PV]--------+ +--[PV]---------+ | | | PE | PE | PE | | PE | PE | PE | | | +--------------+ +---------------+ | +---------------------------------------+ 我們現(xiàn)在做更進一步擴展: +------[ Volume Group ]-----------------+ | +--[PV]--------+ +--[PV]---------+ | | | PE | PE | PE | | PE | PE | PE | | | +--+---+---+---+ +-+----+----+---+ | | | | | +-----/ | | | | | | | | | | | | +-+---+---+-+ +----+----+--+ | | | Logical | | Logical | | | | Volume | | Volume | | | | | | | | | | /home | | /var | | | +-----------+ +------------+ | +---------------------------------------+ 這個向我們展示了兩個文件系統(tǒng),它跨越兩個磁盤。/home文件系統(tǒng)包含4個物理分區(qū),/var文件系統(tǒng)包含2個。 bert hubert 正在寫一個工具來更真實的描述LVM,這里提供了一些它在屏幕上出現(xiàn)的外觀??雌饋肀華SCII圖畫要好。 3.1 Show & Tell Ok,這些概念很難理解(’We are LVM of Borg...),因此下面給出了創(chuàng)建一個邏輯卷的例子。不要粘貼這個例子到你的控制臺,因為這樣會破壞數(shù)據(jù),除非碰巧你的計算機的/dev/hda3和/dev/hdb2沒有使用。 如果有疑問,查看上面的ASCII圖畫。 你應該首先設(shè)置/dev/hda3和/dev/hdb2的分區(qū)類型為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能重建你應該丟失的配置。 通常,不需要重啟,但有些計算機卻要求。因此如果下面的例子不工作,試試重啟。 接著我們創(chuàng)建物理卷(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 現(xiàn)在我們有一個空的卷組(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 這里的許多數(shù)據(jù)--大多數(shù)現(xiàn)在都容易理解了。我們看到?jīng)]有邏輯卷(LV)定義,因此我們要補上它。我們將在“test”卷組(PV)中創(chuàng)建一個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,到這里,我們創(chuàng)建一個文件系統(tǒng): # 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),它現(xiàn)在充滿了一些東西: # 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個物理分區(qū)(PE)在用。 3.2 激活和非激活:內(nèi)核空間和用戶空間 和使用所有操作系統(tǒng)一樣,Linux劃分了兩個部分:內(nèi)核空間(kernel space)和用戶空間(user space)。用戶空間有時叫做用戶區(qū)(userland),這也是關(guān)于這個主題的一個很好的名字。 關(guān)于邏輯卷管理器的創(chuàng)建和修改都是在用戶空間做的,然后傳給內(nèi)核。一旦卷組或邏輯卷向內(nèi)核匯報,它就叫做“激活(Active)”。當它被激活時,只有某些更改可以執(zhí)行,其他的更改只有在它非激活時執(zhí)行。 4. 首要條件 LVM在很大范圍內(nèi)的內(nèi)核中都有效。在Linux 2.4,LVM將全部被集成。內(nèi)核2.3.47和以前的,LVM要經(jīng)過處理來合并到主內(nèi)核中。 4.1 內(nèi)核 Linux 2.4 包含了你需要的所有內(nèi)容。希望大多數(shù)的發(fā)行版都將LVM當成模塊集成來發(fā)行。如果你需要編譯,僅僅是當你選擇塊設(shè)備時打勾LVM選項。 Linux 2.3.99.* 一旦內(nèi)核向前發(fā)展穩(wěn)定了,這部分就不會存在了。但是現(xiàn)在,我們還是要描述一下。 當我們寫這篇文檔時,Linux最新的內(nèi)核版本是2.3.99pre5,它仍然需要一些小的補丁才能使LVM工作。 對于Linux 2.3.99pre3,有兩個補丁發(fā)行: 一個補丁是張貼在linux-kernel,在這里可以找到。 Andrea Arcangeli改進了這個補丁,提供了一個增量的補丁,它應用于2.3.99pre3 LVM補丁和這之上。 對于Linux 2.3.99pre5,bert hubert將這兩個補丁合并成一個了,并且主要針對2.3.99pre5。在這里可以找到這個補丁。使用它要小心。 2.3.99pre6-1,是的,是補丁的一個預覽版,特色是第一次完成了LVM的支持!它仍然遺漏了Andreas的補丁,但我們確信它不久真的會發(fā)行的。 2.3.99pre4-ac1缺省有一個小的補丁在,并且能工作。雖然它不包括Andreas的補丁。 Linux 2.2 FIXME: write this Linux 2.3 FIXME: write this 4.2 用戶余地 你需要從LVM站點下載有效的工具。用glibc2.1編譯系統(tǒng)要求的一些補丁。即使這樣,在Debian 2.2上仍會出錯。 5. 增長文件系統(tǒng) 你可以用一個預備好的腳本做大量的工作,也可以根據(jù)你的需要手工做 5.1 使用e2fsadm 如果在你的卷組中有剩余空間,并且你使用的是ext2文件系統(tǒng)(大多數(shù)人都是這樣的),你就可以使用這個便捷的工具。 e2fsadm命令利用商業(yè)的resize2fs工具。雖然人們都感覺resize2fs是一個很好的軟件,但是它并沒有被廣泛的安裝。 如果你想使用FSF的ext2resize命令,你需要告訴e2fsadm以下內(nèi)容: # 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功能實現(xiàn)的,它很象餡餅一樣容易。你首先需要創(chuàng)建一個物理卷。這要用pvcreate來實現(xiàn)。使用這個工具,你轉(zhuǎn)換任何塊設(shè)備為一個物理卷。 這樣做了之后,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 請注意,為了要做這些,你的卷組必須是激活的。你可以通過執(zhí)行象“vgchange -a y webgroup”來使它激活。 5.4 增長文件系統(tǒng) 如果你想手工做,有兩條路徑可以實現(xiàn)。 ext2離線,使用ext2resize 離線,就意味著你必須umount這個文件系統(tǒng)來做這些改變。在做這些改變的時候,這個文件系統(tǒng)和它上面的數(shù)據(jù)暫時不可用。如果你想擴充根分區(qū)或其他重要的分區(qū),你必須用其他的啟動介質(zhì)來引導。 ext2resize工具可以在GNU ftp站點找到,但大多數(shù)的發(fā)行版都將它作為一個包來發(fā)行。它的語法也簡單易懂: # ext2resize /dev/HOWTO/small 40000 這里40000是文件系統(tǒng)已經(jīng)增長或收縮之后的塊的數(shù)目。 ext2在線 FIXME: write this 6. 替換磁盤 這是LVM的好處之一。一旦你發(fā)現(xiàn)某個磁盤有錯誤,那就是要移動你的數(shù)據(jù)的時候了。使用LVM它很象餡餅一樣容易。我們首先舉一個明顯的替換例子,你先添加一個磁盤到系統(tǒng)中,它至少要和你想要替換的磁盤一樣大。 要移動數(shù)據(jù),我們移動卷組的物理分區(qū)到另一個磁盤上,或者更準確的說,到另一個物理卷上。要做這些,LVM給我們提供了pvmove功能。 假設(shè)我們懷疑的那塊磁盤叫/dev/hda1,并且我們想用/dev/sdb3來替換它。我們首先將/dev/sdb3添加到包含/dev/hda1的那個卷組中。 在這之前,umount這個卷組上的所有文件系統(tǒng)看來是明智的。有一個全備份也不會損壞什么。 FIXME: is this necessary? 接下來我們執(zhí)行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 請留意這個警告。而且看來至少有些內(nèi)核或LVM的版本在使用這個命令時有問題。我是用2.3.99pre6-2來測試的,它可以工作,但要警告。 現(xiàn)在,/dev/hda1沒有包含任何物理分區(qū)了,我們可以將它從卷組中刪除: # 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 當事情發(fā)生在晚期時 如果一個磁盤沒有出現(xiàn)警告就失敗了,你就不能移走它上面的物理分區(qū)到另一個物理卷上,這樣你可能會丟失數(shù)據(jù),除非在這個失敗的PV上的邏輯卷是鏡像了的。正確的行為是用一個同樣的PV或者至少同樣大小的分區(qū)來替換這個失敗的PV。 /etc/lvmconf目錄包含了LVM數(shù)據(jù)和結(jié)構(gòu)的備份,包括哪些磁盤做成了PV,每個PV屬于哪個VG,每個VG中有哪些LV。 替換了出錯的磁盤之后,你可以用vgcfgrestor命令來恢復LVM數(shù)據(jù)到新的PV上。它恢復卷組和所有它的信息,但是不會恢復在邏輯卷上的數(shù)據(jù)。這是因為當LVM數(shù)據(jù)做一些更改時,LVM命令自動做備份。 -------------------------------------------------------------------------------- 7. 為一致性備份做快照 這是更加難以置信的一個可能性。假設(shè)你有一個非常繁忙的服務器,有許多東西運行。為了一個有用的備份,你需要停止大量的程序,否則,你將以數(shù)據(jù)不一致告終。 一個規(guī)范的例子是從/tmp移動一個文件到/root下,而且/root將先備份。當/root被讀的時候,這個文件還不在那里。當/tmp被備份時,這個文件已經(jīng)不在了。 另一個事例是保存數(shù)據(jù)庫或目錄。如果一個文件在使用狀態(tài),我們就沒有任何線索了,除非我們給應用程序時間做一個清除的關(guān)閉。 這樣的話,新的問題又出現(xiàn)了。我們關(guān)閉程序,做我們的備份,接著重新啟動它們。如果備份只花幾分鐘這是很好的,但是,如果它要花數(shù)小時,或者你根本不確定它到底要花多久的時候,事情就真的痛苦了。 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,我們現(xiàn)在有些事情要用它一起做。讓我們產(chǎn)生這個快照: # 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”參數(shù)以后再詳述。讓我們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 現(xiàn)在我們從原處刪除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 它是如何工作的? 記得我們不得不設(shè)置“--size”參數(shù)嗎?真正發(fā)生的事情是,“snap”卷需要有那些當LVM調(diào)用時,在原處要被改變的所有塊的一個拷貝。 當我們刪除a.test.file時,它的i節(jié)點被刪除。這引起64KB要被標注成“臟的”--同時原始數(shù)據(jù)的一個拷貝被寫到“snap”卷。這個例子中,我們分配了16MB給快照,因此如果多于16MB的塊要被修改,快照就會無效了。 要決定一個快照分區(qū)的正確大小,你將不得不推測基于主LV的使用模式、快照要激活的總時間。例如,在午夜,當無人使用系統(tǒng)的情況下,一個幾小時的備份可能要求很小的空間。 請注意,快照不是永久的。如果你卸下LVM或重啟,它們就丟失了,需要重新創(chuàng)建。 -------------------------------------------------------------------------------- 8. 冗余 & 性能 為了性能的考慮,可以將數(shù)據(jù)分散在幾個條塊化的磁盤上。這意味著塊1在PV A上,塊2在PV B上,塊3又在PV A上。你也可以條塊化跨多余2塊磁盤。 這樣的安排意味著你有更多有效的磁盤帶寬。也就是說包含了更多的“軸”。以后會詳述。 除此之外,為了提高性能,也可以將你的數(shù)據(jù)在多個磁盤上有多份拷貝。這叫做鏡像。目前,LVM本身還不支持它,但是有多種方法能實現(xiàn)鏡像。 8.1 為何要條塊化? 磁盤的性能至少受三種因素的影響。最明顯的是一塊磁盤上的數(shù)據(jù)能連續(xù)被讀或?qū)懙乃俣取_@是當讀或?qū)憙H連接了一個單一的磁盤的SCSI/IDE總線上的一個大文件時的限制因素。 接著是到磁盤的有效帶寬。如果你在一個SCSI總線上有7塊盤,這也許會小于你的磁盤本身寫的速度。如果你愿意花足夠的錢,你可以避免這個瓶頸成為一個問題。 然后是響應時間。當成諺語說,響應時間總是壞消息。甚至更壞的是,你不可能通過花更多的錢來降低響應時間!現(xiàn)在出產(chǎn)的大多數(shù)磁盤有一個大約7ms的響應時間。還有SCSI響應時間,通常是大約25ms。 FIXME: need recent numbers! 這意味著什么?在一個典型情形,總的響應時間大約是30ms。因此你每秒鐘只能執(zhí)行大約33個磁盤操作。如果你想每秒鐘能做數(shù)千個查詢,并且你沒有大量的緩存,那么你就非常不走運了。 如果你有多個磁盤,或者“軸”,在并行工作,那么你可以有多個命令很好地圍繞你的響應問題同時執(zhí)行。有些應用程序,比如一個大的新聞服務器,如果沒有條塊化或其它I/O敏捷性它甚至不再工作。 這就是條塊化做的事。如果你的總線能勝任,甚至連續(xù)的讀和寫可能會更快。 8.2 為何不條塊化 條塊化沒有進一步的措施來解除你的錯誤機會,按一個“每次一比特”的基本原則。如果你的磁盤任一塊死了,你全部的邏輯卷都會丟失。如果你正好連接數(shù)據(jù),僅僅文件系統(tǒng)部分丟失。 最終的選項是鏡像的條塊化。 FIXME: make a mirrored stripe with LVM and md 8.3 LVM本身的條塊化 當用lvcreate創(chuàng)建LV時,指定條塊化配置項。有兩個相關(guān)參數(shù)。-i參數(shù)告訴LVM應該在多少個PV上分散數(shù)據(jù)。條塊化不是真的按一次一比特的基礎(chǔ)來做的,而是按塊。-I參數(shù)指定單位為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 性能注意事項 如果跨同一塊磁盤的兩個分區(qū)來條塊化,性能的“增加”可能會是非常消極的--注意避免這樣。跨單一的IDE總線上的兩個磁盤來條塊化也是沒用的--除非IDE已經(jīng)改進了我所記憶的。 FIXME: is this still true? 很老的主板可能有兩個IDE總線,但是第二個通常是用于一個相對慢的cdrom驅(qū)動器。你可以用幾個工具來執(zhí)行基準,最令人注目的是“Bonnie”。ReiserFS人們已經(jīng)發(fā)布了Bonnie++,它可以用來測試性能數(shù)據(jù)。 8.4 硬件RAID 多數(shù)高速的Inter x86服務器有硬件RAID控制器。它們中大部分至少有2個獨立的SCSI通道。幸運的是,這些在LVM上很少有關(guān)系。在 Linux能看到如此一個控制器上的任何東西之前,管理員必須在RAID控制器自身里定義一個邏輯驅(qū)動器。舉一個例子,他(她)可能選擇條塊化在SCSI 通道A上的兩個磁盤,然后鏡像它們到通道B上的兩塊磁盤上。這是一個典型的RAID 0/1配置,最佳化性能和數(shù)據(jù)安全。當Linux在一臺采用這種配置的機器上啟動時,它只能“看”到在RAID控制器上的一塊磁盤,那就是包含了RAID 0/1條塊組上四塊磁盤的邏輯驅(qū)動器。這就是說,至于LVM關(guān)心的,僅僅是在這臺機器上的一塊磁盤,它將被同樣地使用。如果這些磁盤中的一個失敗了,LVM甚至不知道。當管理員替換了磁盤(甚至很快的用熱備硬件),LVM也不知道任一種情況發(fā)生了??刂破鲿匦峦界R像的數(shù)據(jù),一切都良好。這里多數(shù)人會退一步來詢問“那么使用這個RAID控制器,LVM為我?guī)硎裁春锰幠兀?#8221;最容易的回答是,多數(shù)情況下,你在RAID控制器里定義了一個邏輯驅(qū)動器后,你不可能在以后添加更多的磁盤到那個驅(qū)動器了。因此,如果你誤算了所要求的空間,或者你只是需要更多的空間,你都不可能添加一個新的磁盤或一組磁盤到原來的條塊組里。這意味著你必須在這個控制器里創(chuàng)建一個新的 RAID條塊組,然后用LVM你可以簡單的擴展LVM的LV,以致它無縫的跨越RAID控制器里的兩個條塊組。 FIXME: Is there more needed on this subject ? 8.5 Linux軟件RAID Linux 2.4 帶著一個非常好的RAID代替出現(xiàn)了。Linux 2.2缺省的,當被Alan Cox發(fā)布時,是一個初期的RAID版本的特寫,它沒有被很好的重視。 2.2仍然是早期版本特色的原因是寫內(nèi)核的人們不想在一個穩(wěn)定的版本里做改動,那樣會要求使用者更新。 更多的人們,包括Red Hat,Mandrake和SuSE,選擇用表現(xiàn)得很完美的0.90版本來替換它。 這里我們只論述0.90版本。 FIXME: write more of this -------------------------------------------------------------------------------- 9. Cookbook 9.1 在計算機之間移動LVM磁盤 使用這些新技術(shù),簡單的任務象從一臺計算機移動磁盤到另一臺計算機就變得有些機警了。在用LVM之前,用戶只需要把這塊盤放到新的機器上并且 mount這些文件系統(tǒng)。使用LVM,就多一點事情要做。LVM結(jié)構(gòu)既保存在磁盤上也保存在/etc/lvmconf目錄里,因此,移動一個或一組包含了一個VG的磁盤所要做的唯一的事情是確保這個VG屬于的機器不會破壞它的數(shù)據(jù)。這是通過vgexport命令來實現(xiàn)的。vgexport僅僅從/etc /lvmconf刪除關(guān)于這個VG的結(jié)構(gòu),而不會更改磁盤上的任何內(nèi)容。一旦磁盤放到新的機器上(他們沒必要有相同的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 如果你能讀懂德文,它就已經(jīng)包含了許多信息 德文HOWTO的翻譯 Peter.Wuestefeld@resnova.de正在將德文HOWTO翻譯成英語。看來他們會花許多時間在上面。如果你懷疑我們的HOWTO,或者想知道些什么,請試試他們的努力。 HP/UX管理磁盤向?qū)? 因為Linux LVM幾乎就是HP/UX執(zhí)行的一個原樣,他們的文檔對我們也是非常有用的。是一個很好的資料。 11. 致謝 我們嘗試在這里列出所有幫助我們寫這篇HOWTO的人。包括呈報更新、修復或投稿的人,還有幫助我們理解這個主題的人。 Axel Boldt Sean Reifschneider Alexander Talos Eric Maryniak |
聯(lián)系客服