|
在 我前一篇
LVM 文章 中,我解釋了 LVM 背后的概念?,F(xiàn)在該是發(fā)揮 LVM 作用的時候了。在本文中,我將在官方 Gentoo Linux
web/cvs/email 服務器 -- cvs. -- 上設置 LVM。盡管 cvs. 只有一個硬盤,但靈活性很強的
LVM
仍然令人難以置信地提供了比標準靜態(tài)分區(qū)方法好得多的改進。我將為您介紹 LVM
轉換過程的的所有步驟,這樣,如果您有興趣,可以在自己的機器上執(zhí)行類似的轉換。
在開始之前有一個告誡。因為實現(xiàn) LVM
是對系統(tǒng)進行的一項重要的變動(包括創(chuàng)建新分區(qū)和其它一些潛在的冒險操作),所以在開始這一過程之前備份整個系統(tǒng) 不失為
一個好主意。如果您不想進行備份,我希望您能使用一臺沒有什么重要數(shù)據(jù)的測試機器 :) 應該說我在轉換到 LVM 時并沒有遇到任何問題,但最好做好準備以防萬一。
那么,讓我們繼續(xù)。在開始轉換過程之前,我對 cvs. 進行了升級,讓它使用下列軟件包。在我執(zhí)行 LVM 轉換的時候,這些是當時的最新版本(請參閱本文稍后部分的 參考資料):
- Linux 內核 2.4.1-ac19
- LVM 0.9.1_beta5
- reiserfs-utils 3.6.25
現(xiàn)在輪到硬盤驅動器了。cvs. 有一個不錯的新的 IBM 45 GB 硬盤驅動器;不過,當我在 cvs 上安裝 Gentoo
Linux 時,我只對驅動器中的 10 GB 進行了分區(qū),而將余下的 35 GB 留作“將來的分區(qū)”使用。這些是在不使用 LVM 時耍的一點小計謀 --
將部分驅動器保留不分區(qū)是一種為今后的擴充作準備的簡單但有效的方式。不過,如果使用 LVM,會有更好的方法。
空間問題
在過去的幾個星期中,我注意到我的根 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ū)并不構成什么危機,但也決不是一種良好的狀況。ReiserFS
和許多其它文件系統(tǒng)一樣,隨著它越來越滿而開始逐漸減慢速度,在根文件系統(tǒng)被完全填滿、文件系統(tǒng)的性能遭到重創(chuàng)之前,這只是時間問題。
我決定在硬盤驅動器的結尾處使用 LVM,從 35 GB
的當前未分區(qū)空間中創(chuàng)建新邏輯卷來解決這一問題。然后,我會在這個卷上創(chuàng)建一個文件系統(tǒng),并將 /dev/hda3 的大部分內容轉移到其中。
如果您考慮在自己的機器上進行類似的轉換,首先需要做的就是在根文件系統(tǒng)上找一個合適的部分轉移到邏輯卷上。對我來說,選擇很容易 -- 我的 /home
樹占用了大約 5.7 GB。通過將 /home 轉移到它自己的 LVM 邏輯卷,我的根文件系統(tǒng)處于大約 20%
容量的位置。因為大多數(shù)新數(shù)據(jù)被添加到 /home,所以我的根文件系統(tǒng)很可能也停留在大約 20% 容量的位置 -- 一種非常健康的狀態(tài)。
回頁首
解決方案的開始
在開始轉換之前,首先在硬盤驅動器的結尾處對未使用的空間進行分區(qū)。我使用 cfdisk 創(chuàng)建了一個 35 GB 的分區(qū)
(/dev/hda5),然后將分區(qū)的分區(qū)類型設置成 "8E"(正規(guī) LVM
分區(qū)類型)。在這一更改后,我進行了重新引導以強制重新讀取分區(qū)表。在重新引導后,我的分區(qū)表如下:
# sfdisk -l
Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track
Units = 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ū),我就準備為 LVM
初始化它。以下是過程 -- 首先,我將 35 GB 初始化成 物理卷;然后,使用這個物理卷創(chuàng)建一個 卷組
,最后,在卷組上分配一些范圍,創(chuàng)建將包含新文件系統(tǒng)并存放當前 /home 中所有文件的 邏輯卷。
為開始這個過程,我使用 pvcreate 命令將 /dev/hda5 初始化成物理卷:
# pvcreate /dev/hda5
pvcreate -- physical volume "/dev/hda5" successfully created
|
pvcreate 在 /dev/hda5 上設置一個特殊的“記帳”區(qū)域,稱作 VGDA(“卷組描述符區(qū)域”)。LVM 使用該區(qū)域來記錄物理范圍是如何分配的,以及其它一些操作。
下一步是創(chuàng)建卷組并向該卷組添加 /dev/hda5。卷組將充當范圍池(許多存儲塊)。創(chuàng)建卷組之后,創(chuàng)建所需數(shù)量的邏輯卷。我決定將卷組稱為
"main":
# vgcreate main /dev/hda5
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 "main"
vgcreate -- volume group "main" successfully created and activated
|
vgcreate 命令執(zhí)行幾個操作。除了創(chuàng)建 "main" 卷組以外,它還設置 /dev/hda5,使它使用 4 MB 的范圍,4 GB
是缺省范圍大小。這意味著在卷組上創(chuàng)建的所有邏輯卷都可以以 4 MB 為增量單位來進行擴充或縮減。
由于內核限制的原因,范圍大小決定了邏輯卷的最大大小。您可以從上面的輸出中看出,4 MB 的范圍大小決定了邏輯卷大小限制為 256
GB,如果您向卷組添加幾個高容量驅動器,這是很容易達到的邏輯卷組大小。如果每一個卷最后都大于 256 GB,我建議您在運行 vgcreate
時指定更大一些的范圍大小。范圍的大小可以是從 8 KB 到 512 MB 之間的任何值,并且必須總是 2 的倍數(shù)。通過將范圍大小增加到 4 MB
以上,最大的物理卷大小將相應地增加到最大為 1 Petabyte(盡管當今現(xiàn)實世界中,x86 系統(tǒng)上的大小限制是 2 Terabytes)。例如,如果希望使用
32 MB 的范圍創(chuàng)建卷組,我會輸入:
# vgcreate -s 32M main /dev/hda5
|
32 MB 是個合適的范圍大小,因為 32 MB 的顆粒度仍然便于管理,并將引導的最大邏輯卷大小增加到 2 TB。創(chuàng)建卷組之后,可以通過輸入
"vgdisplay" 來查看其信息:
# vgdisplay
--- Volume group ---
VG Name main
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 1
Act PV 1
VG Size 33.28 GB
PE Size 4 MB
Total PE 8519
Alloc PE / Size 0 / 0
Free PE / Size 8519 / 33.28 GB
VG UUID 2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn
|
既然有了自己的卷組,我準備創(chuàng)建邏輯卷。我決定在最初時將它的大小設置為 8 GB,并稱它作 "lv_home":
# lvcreate -L8G -nlv_home main
lvcreate -- 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 8211
Hash function "r5"
ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)y
journal 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
# df
Filesystem 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ī)缀鯗蕚鋸椭?/home 中的所有數(shù)據(jù)。在開始之前,我把系統(tǒng)降低到運行級別 1 以確保在復制 /home
中的文件時,沒有用戶或進程能夠訪問或修改它們:
然后,開始復制文件:
# cp -avx /home/* /mnt/newhome
|
復制操作需要大約 10 分鐘的時間完成。然后,我將原始 /home 備份成
/home.old,這只是為在復制過程中有任何錯誤而準備的。創(chuàng)建一個新的安裝點,然后在 /home 上重新安裝新 home:
# cd /
# mv home home.old
# mkdir home
# umount /mnt/newhome
# mount /dev/main/lv_home /home
|
然后,應該設置服務器以使我的新 /home 分區(qū)可以在每次啟動機器時使用。首先修改 /etc/fstab 以使它包括新的 /home 項:
# /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 0
proc /proc proc defaults 0 0
none /dev/pts devpts mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
|
然后,我對初始化腳本進行了一些小小改動。我修改了 "checkroot" 啟動腳本,使以下命令可以在根分區(qū)重新安裝讀/寫后立即運行:
/sbin/vgscan
/sbin/vgchange -a y
|
接下來,我修改了在關機時運行的文件系統(tǒng)卸裝腳本,使以下命令在卸裝了所有文件系統(tǒng) 后立即運行:
完成了這些步驟后,我重新引導了機器,讓我高興的是一切都工作正常。在接下去的一天左右的時間里完全沒有問題,隨后我刪除了 /home.old
以釋放根文件系統(tǒng)上的一些空間。太棒了!到 LVM
的轉換成功了。
回頁首
LVM 的優(yōu)點
雖然到 LVM
的轉換有些痛苦,但一旦轉換完成之后,管理文件系統(tǒng)就變得非常簡單。例如,我決定重新調整新的 /home 邏輯卷大小,向文件系統(tǒng)結尾添加大約 2 GB
的空間。首先,我向 "lv_home" 邏輯卷添加了額外的容量,然后使用 resize_reiserfs
實用程序來擴充文件系統(tǒng),使它可以使用額外的容量。以下是執(zhí)行所有這些操作的兩個命令:
# lvextend -L+2G /dev/main/lv_home
# resize_reiserfs -f /dev/main/lv_home
|
在大約一秒鐘的時間里,我將 /home 文件系統(tǒng)擴大了 2 GB;令人驚奇的是,我不需要重新引導、降低到運行級別 1,甚至不需要卸裝 /home
來執(zhí)行大小調整。一切都照常工作。是不是很了不起?下面是我的文件系統(tǒng)的當前狀態(tài):
# df
Filesystem 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)的其它部分轉移到 LVM,最終甚至將我的根文件系統(tǒng)轉換成 LVM 邏輯卷。下面的參考資料可以幫助您了解有關 LVM 的更多知識。
參考資料
- 您可以參閱本文在 developerWorks 全球站點上的 英文原文.
- 有關 LVM
的概念和如何在系統(tǒng)上安裝最新的內核補丁和工具的建議,請參閱 developerWorks上 Daniel 的前一篇文章, 學習 LVM,第 1 部分。
- 從 Sistina Software 下載 LVM tar 文件。
- 現(xiàn)在 Sistina 有一個非常棒的 LVM HOWTO (它與簡單的 HOWTO
相比,更接近于一個完整描述的手冊)。
- 請務必仔細查看 Linux
LVM FAQ。
- 等不及的讀者可以查看 Heinz
Mauelshagen 的 LVM
快速入門,它包含了有關如何設置卷組和邏輯卷的更多示例。
- 另外還有一個有意思的 HOWTO,告訴您 如何在邏輯卷上設置根文件系統(tǒng)
。LVM-0.9.1_final 問世后,我會嘗試執(zhí)行這一操作。
- Andreas Dilger 參與了 Linux LVM
項目,他有一個看上去不錯的 聯(lián)機。
- ReiserFS 是一種非常好的文件系統(tǒng)(特別在與 LVM 結合使用時)。如果使用的是 ReiserFS,需要獲取
reiserfs-utils tar 文件,它包含了一個稱為 "reiserfs_resize" 的程序 -- 允許對 ReiserFS 文件系統(tǒng)聯(lián)機調整大小。
- 有關設置 Linux 軟件 RAID 卷的詳細信息,請參閱 Daniel 在 developerWorks上有關軟件 RAID 系列的
第 1 部分和 第 2 部分。
- 對于復習進修者,請參閱 developerWorks Linux
內核編譯教程。
關于作者
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 自二年級起就與計算機結下不解之緣,那時他首先接觸的是 Logo 程序語言,并沉溺于 Pac-Man 游戲中。這也許就是他至今仍擔任
SONY Electronic Publishing/Psygnosis 的首席圖形設計師的原因所在。Daniel 喜歡與妻子
Mary 和新出生的女兒 Hadassah 一起共度時光??赏ㄟ^ drobbins@
與 Daniel 聯(lián)系。
|