在 我前一篇 LVM 文章 中,我解釋了 LVM 背后的概念?,F(xiàn)在該是發(fā)揮 LVM 作用的時(shí)候了。在本文中,我將在官方 Gentoo Linux web/cvs/email 服務(wù)器 -- cvs.gentoo.org -- 上設(shè)置 LVM。盡管 cvs.gentoo.org 只有一個(gè)硬盤,但靈活性很強(qiáng)的 LVM 仍然令人難以置信地提供了比標(biāo)準(zhǔn)靜態(tài)分區(qū)方法好得多的改進(jìn)。我將為您介紹 LVM 轉(zhuǎn)換過程的的所有步驟,這樣,如果您有興趣,可以在自己的機(jī)器上執(zhí)行類似的轉(zhuǎn)換。
在開始之前有一個(gè)告誡。因?yàn)閷?shí)現(xiàn) LVM 是對系統(tǒng)進(jìn)行的一項(xiàng)重要的變動(dòng)(包括創(chuàng)建新分區(qū)和其它一些潛在的冒險(xiǎn)操作),所以在開始這一過程之前備份整個(gè)系統(tǒng) 不失為 一個(gè)好主意。如果您不想進(jìn)行備份,我希望您能使用一臺沒有什么重要數(shù)據(jù)的測試機(jī)器 :) 應(yīng)該說我在轉(zhuǎn)換到 LVM 時(shí)并沒有遇到任何問題,但最好做好準(zhǔn)備以防萬一。
那么,讓我們繼續(xù)。在開始轉(zhuǎn)換過程之前,我對 cvs.gentoo.org 進(jìn)行了升級,讓它使用下列軟件包。在我執(zhí)行 LVM 轉(zhuǎn)換的時(shí)候,這些是當(dāng)時(shí)的最新版本(請參閱本文稍后部分的 參考資料):
現(xiàn)在輪到硬盤驅(qū)動(dòng)器了。cvs.gentoo.org 有一個(gè)不錯(cuò)的新的 IBM 45 GB 硬盤驅(qū)動(dòng)器;不過,當(dāng)我在 cvs 上安裝 Gentoo Linux 時(shí),我只對驅(qū)動(dòng)器中的 10 GB 進(jìn)行了分區(qū),而將余下的 35 GB 留作“將來的分區(qū)”使用。這些是在不使用 LVM 時(shí)耍的一點(diǎn)小計(jì)謀 -- 將部分驅(qū)動(dòng)器保留不分區(qū)是一種為今后的擴(kuò)充作準(zhǔn)備的簡單但有效的方式。不過,如果使用 LVM,會有更好的方法。
在過去的幾個(gè)星期中,我注意到我的根 ReiserFS 分區(qū)在被緩慢地填滿,這可以從下面的 "df" 輸出中看出:
Filesystem 1k-blocks Used Available Use% Mounted on/dev/hda3 9765200 6989312 2775888 72% /tmpfs 269052 0 269052 0% /dev/shm |
現(xiàn)在,72% 被占滿的根分區(qū)并不構(gòu)成什么危機(jī),但也決不是一種良好的狀況。ReiserFS 和許多其它文件系統(tǒng)一樣,隨著它越來越滿而開始逐漸減慢速度,在根文件系統(tǒng)被完全填滿、文件系統(tǒng)的性能遭到重創(chuàng)之前,這只是時(shí)間問題。
我決定在硬盤驅(qū)動(dòng)器的結(jié)尾處使用 LVM,從 35 GB 的當(dāng)前未分區(qū)空間中創(chuàng)建新邏輯卷來解決這一問題。然后,我會在這個(gè)卷上創(chuàng)建一個(gè)文件系統(tǒng),并將 /dev/hda3 的大部分內(nèi)容轉(zhuǎn)移到其中。
如果您考慮在自己的機(jī)器上進(jìn)行類似的轉(zhuǎn)換,首先需要做的就是在根文件系統(tǒng)上找一個(gè)合適的部分轉(zhuǎn)移到邏輯卷上。對我來說,選擇很容易 -- 我的 /home 樹占用了大約 5.7 GB。通過將 /home 轉(zhuǎn)移到它自己的 LVM 邏輯卷,我的根文件系統(tǒng)處于大約 20% 容量的位置。因?yàn)榇蠖鄶?shù)新數(shù)據(jù)被添加到 /home,所以我的根文件系統(tǒng)很可能也停留在大約 20% 容量的位置 -- 一種非常健康的狀態(tài)。
在開始轉(zhuǎn)換之前,首先在硬盤驅(qū)動(dòng)器的結(jié)尾處對未使用的空間進(jìn)行分區(qū)。我使用 cfdisk 創(chuàng)建了一個(gè) 35 GB 的分區(qū) (/dev/hda5),然后將分區(qū)的分區(qū)類型設(shè)置成 "8E"(正規(guī) LVM 分區(qū)類型)。在這一更改后,我進(jìn)行了重新引導(dǎo)以強(qiáng)制重新讀取分區(qū)表。在重新引導(dǎo)后,我的分區(qū)表如下:
# sfdisk -lDisk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/trackUnits = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System/dev/hda1 * 0+ 247 248- 124960+ 83 Linux/dev/hda2 248 743 496 249984 82 Linux swap/dev/hda3 744 20119 19376 9765504 83 Linux/dev/hda4 20120 89354 69235 34894440 5 Extended/dev/hda5 20120+ 89354 69235- 34894408+ 8e Linux LVM |
既然有了空的 35 GB 的分區(qū),我就準(zhǔn)備為 LVM 初始化它。以下是過程 -- 首先,我將 35 GB 初始化成 物理卷;然后,使用這個(gè)物理卷創(chuàng)建一個(gè) 卷組 ,最后,在卷組上分配一些范圍,創(chuàng)建將包含新文件系統(tǒng)并存放當(dāng)前 /home 中所有文件的 邏輯卷。
為開始這個(gè)過程,我使用 pvcreate 命令將 /dev/hda5 初始化成物理卷:
# pvcreate /dev/hda5pvcreate -- physical volume "/dev/hda5" successfully created |
pvcreate 在 /dev/hda5 上設(shè)置一個(gè)特殊的“記帳”區(qū)域,稱作 VGDA(“卷組描述符區(qū)域”)。LVM 使用該區(qū)域來記錄物理范圍是如何分配的,以及其它一些操作。
下一步是創(chuàng)建卷組并向該卷組添加 /dev/hda5。卷組將充當(dāng)范圍池(許多存儲塊)。創(chuàng)建卷組之后,創(chuàng)建所需數(shù)量的邏輯卷。我決定將卷組稱為 "main":
# vgcreate main /dev/hda5vgcreate -- INFO: using default physical extent size 4 MBvgcreate -- INFO: maximum logical volume size is 255.99 Gigabytevgcreate -- doing automatic backup of volume group "main"vgcreate -- volume group "main" successfully created and activated |
vgcreate 命令執(zhí)行幾個(gè)操作。除了創(chuàng)建 "main" 卷組以外,它還設(shè)置 /dev/hda5,使它使用 4 MB 的范圍,4 GB 是缺省范圍大小。這意味著在卷組上創(chuàng)建的所有邏輯卷都可以以 4 MB 為增量單位來進(jìn)行擴(kuò)充或縮減。
由于內(nèi)核限制的原因,范圍大小決定了邏輯卷的最大大小。您可以從上面的輸出中看出,4 MB 的范圍大小決定了邏輯卷大小限制為 256 GB,如果您向卷組添加幾個(gè)高容量驅(qū)動(dòng)器,這是很容易達(dá)到的邏輯卷組大小。如果每一個(gè)卷最后都大于 256 GB,我建議您在運(yùn)行 vgcreate 時(shí)指定更大一些的范圍大小。范圍的大小可以是從 8 KB 到 512 MB 之間的任何值,并且必須總是 2 的倍數(shù)。通過將范圍大小增加到 4 MB 以上,最大的物理卷大小將相應(yīng)地增加到最大為 1 Petabyte(盡管當(dāng)今現(xiàn)實(shí)世界中,x86 系統(tǒng)上的大小限制是 2 Terabytes)。例如,如果希望使用 32 MB 的范圍創(chuàng)建卷組,我會輸入:
# vgcreate -s 32M main /dev/hda5 |
32 MB 是個(gè)合適的范圍大小,因?yàn)?32 MB 的顆粒度仍然便于管理,并將引導(dǎo)的最大邏輯卷大小增加到 2 TB。創(chuàng)建卷組之后,可以通過輸入 "vgdisplay" 來查看其信息:
# vgdisplay--- Volume group ---VG Name mainVG Access read/writeVG Status available/resizableVG # 0MAX LV 256Cur LV 0Open LV 0MAX LV Size 255.99 GBMax PV 256Cur PV 1Act PV 1VG Size 33.28 GBPE Size 4 MBTotal PE 8519Alloc PE / Size 0 / 0Free PE / Size 8519 / 33.28 GBVG UUID 2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn |
既然有了自己的卷組,我準(zhǔn)備創(chuàng)建邏輯卷。我決定在最初時(shí)將它的大小設(shè)置為 8 GB,并稱它作 "lv_home":
# lvcreate -L8G -nlv_home mainlvcreate -- doing automatic backup of "main"lvcreate -- logical volume "/dev/main/lv_home" successfully created |
然后,在邏輯卷上創(chuàng)建文件系統(tǒng):
# mkreiserfs /dev/main/lv_home <----------- MKREISERFSv2 -----------> Block size 4096 bytes Block count 2097152 Used blocks 8275 Journal - 8192 blocks (18-8209), journal header is in block 8210 Bitmaps: 17, 32768, 65536, 98304, 131072, 163840, 196608, 229376, 262144, 294912, 327680, 360448, 393216, 425984, 458752, 491520, 524288, 557056, 589824, 622592, 655360, 688128, 720896, 753664, 786432, 819200, 851968, 884736, 917504, 950272, 983040, 1015808, 1048576, 1081344, 1114112, 1146880, 1179648, 1212416, 1245184, 1277952, 1310720, 1343488, 1376256, 1409024, 1441792, 1474560, 1507328, 1540096, 1572864, 1605632, 1638400, 1671168, 1703936, 1736704, 1769472, 1802240, 1835008, 1867776, 1900544, 1933312, 1966080, 1998848, 2031616, 2064384 Root block 8211Hash function "r5"ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)yjournal size 8192 (from 18)Initializing journal - 0%....20%....40%....60%....80%....100%Syncing..done. |
既然創(chuàng)建了文件系統(tǒng),我就可以在 /mnt/newhome 上安裝它:
# mkdir /mnt/newhome# mount /dev/main/lv_home /mnt/newhome# dfFilesystem 1k-blocks Used Available Use% Mounted on/dev/hda3 9765200 6989840 2775360 72% /tmpfs 291388 0 291388 0% /dev/shm/dev/main/lv_home 8388348 32840 8355508 1% /mnt/newhome |
您可以從上面看出,我?guī)缀鯗?zhǔn)備復(fù)制 /home 中的所有數(shù)據(jù)。在開始之前,我把系統(tǒng)降低到運(yùn)行級別 1 以確保在復(fù)制 /home 中的文件時(shí),沒有用戶或進(jìn)程能夠訪問或修改它們:
# init 1 |
然后,開始復(fù)制文件:
# cp -avx /home/* /mnt/newhome |
復(fù)制操作需要大約 10 分鐘的時(shí)間完成。然后,我將原始 /home 備份成 /home.old,這只是為在復(fù)制過程中有任何錯(cuò)誤而準(zhǔn)備的。創(chuàng)建一個(gè)新的安裝點(diǎn),然后在 /home 上重新安裝新 home:
# cd /# mv home home.old# mkdir home# umount /mnt/newhome# mount /dev/main/lv_home /home |
然后,應(yīng)該設(shè)置服務(wù)器以使我的新 /home 分區(qū)可以在每次啟動(dòng)機(jī)器時(shí)使用。首先修改 /etc/fstab 以使它包括新的 /home 項(xiàng):
# /etc/fstab: static file system information.## fs mountpoint type opts dump/pass/dev/hda3 / reiserfs defaults 1 1/dev/main/lv_home /home reiserfs defaults 2 2/dev/hda2 none swap sw 0 0/dev/hda1 /boot reiserfs noauto 0 0/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0proc /proc proc defaults 0 0none /dev/pts devpts mode=620 0 0tmpfs /dev/shm tmpfs defaults 0 0 |
然后,我對初始化腳本進(jìn)行了一些小小改動(dòng)。我修改了 "checkroot" 啟動(dòng)腳本,使以下命令可以在根分區(qū)重新安裝讀/寫后立即運(yùn)行:
/sbin/vgscan/sbin/vgchange -a y |
接下來,我修改了在關(guān)機(jī)時(shí)運(yùn)行的文件系統(tǒng)卸裝腳本,使以下命令在卸裝了所有文件系統(tǒng) 后立即運(yùn)行:
/sbin/vgchange -a n |
完成了這些步驟后,我重新引導(dǎo)了機(jī)器,讓我高興的是一切都工作正常。在接下去的一天左右的時(shí)間里完全沒有問題,隨后我刪除了 /home.old 以釋放根文件系統(tǒng)上的一些空間。太棒了!到 LVM 的轉(zhuǎn)換成功了。
雖然到 LVM 的轉(zhuǎn)換有些痛苦,但一旦轉(zhuǎn)換完成之后,管理文件系統(tǒng)就變得非常簡單。例如,我決定重新調(diào)整新的 /home 邏輯卷大小,向文件系統(tǒng)結(jié)尾添加大約 2 GB 的空間。首先,我向 "lv_home" 邏輯卷添加了額外的容量,然后使用 resize_reiserfs 實(shí)用程序來擴(kuò)充文件系統(tǒng),使它可以使用額外的容量。以下是執(zhí)行所有這些操作的兩個(gè)命令:
# lvextend -L+2G /dev/main/lv_home# resize_reiserfs -f /dev/main/lv_home |
在大約一秒鐘的時(shí)間里,我將 /home 文件系統(tǒng)擴(kuò)大了 2 GB;令人驚奇的是,我不需要重新引導(dǎo)、降低到運(yùn)行級別 1,甚至不需要卸裝 /home 來執(zhí)行大小調(diào)整。一切都照常工作。是不是很了不起?下面是我的文件系統(tǒng)的當(dāng)前狀態(tài):
# dfFilesystem 1k-blocks Used Available Use% Mounted on/dev/hda3 9765200 1413340 8351860 15% //dev/main/lv_home 10485436 5609836 4875600 54% /home |
您可以看出 LVM 的確可以讓管理員的工作輕松許多。我希望在今后能將根文件系統(tǒng)的其它部分轉(zhuǎn)移到 LVM,最終甚至將我的根文件系統(tǒng)轉(zhuǎn)換成 LVM 邏輯卷。下面的參考資料可以幫助您了解有關(guān) LVM 的更多知識。
Daniel Bobbins 居住在美國新墨西哥州的阿爾布開克,他是 Gentoo Technologies, Inc. 的總裁兼 CEO、 Gentoo Linux (一種用于 PC 的高級 Linux)和 Portage 系統(tǒng)(用于 Linux 的下一代移植系統(tǒng))的主創(chuàng)人。他還是幾本 Macmillan 出版的書籍 Caldera OpenLinux Unleashed、 SuSE Linux Unleashed 和 Samba Unleashed 的投稿人。Daniel 自二年級起就與計(jì)算機(jī)結(jié)下不解之緣,那時(shí)他首先接觸的是 Logo 程序語言,并沉溺于 Pac-Man 游戲中。這也許就是他至今仍擔(dān)任 SONY Electronic Publishing/Psygnosis 的首席圖形設(shè)計(jì)師的原因所在。Daniel 喜歡與妻子 Mary 和新出生的女兒 Hadassah 一起共度時(shí)光??赏ㄟ^ drobbins@gentoo.org 與 Daniel 聯(lián)系。