使用lvextend -L size LVNAME 增大一個邏輯卷的大小。
[root@NEWLFS mnt]#lvextend -L +1G /dev/lvm_vg/lv_home
Extending logical volume lv_home to 3.00 GB
Logical volume lv_home suclearcase/" target="_blank" >ccessfully resized
[root@NEWLFS mnt]#
-L +1G 為lv_home加上 1G 空間?;蛘呤褂眠@種格式:
[root@NEWLFS mnt]#lvextend -L 3G /dev/lvm_vg/lv_home
指定lv_home更改后的大小,效果相同。
更改邏輯卷大小后,還應該更改文件系統的大小,保持一致:
[root@NEWLFS mnt]#resize_reiserfs -f /dev/lvm_vg/lv_home
resize_reiserfs 3.6.19 (2003 www.namesys.com)
ReiserFS report:
blocksize 4096
block count 786432 (524288)
free blocks 778197 (516061)
bitmap block count 24 (16)
Syncing..done
resize_reiserfs: Resizing finished successfully.
[root@NEWLFS mnt]df
Filesystem Size Used Avail Use% Mounted on
/dev/md0 5.4G 2.8G 2.7G 51% /
/dev/hda1 6.4G 4.0G 2.5G 62% /mnt/C
/dev/hda6 25G 22G 3.6G 86% /mnt/E
/dev/hda7 9.7G 3.7G 5.6G 40% /mnt/lfs
/dev/mapper/lvm_vg-lv_home
3.0G 33M 3.0G 2% /mnt/lvm_home
[root@NEWLFS mnt]#
成功的將lvm_home擴展到了3G,沒有重新啟動,并且沒有卸載文件系統。
ReiserFS真是好用! ^_^
當然,ReiserFS 也允許卸載文件系統后resize,使用下列命令:
[root@NEWLFS mnt]#umount /dev/lvm_vg/lv_home
卸載文件系統
[root@NEWLFS mnt]#resize_reiserfs /dev/lvm_vg/lv_home
調整大小,與上面不同的地方是沒有 -f 參數.
[root@NEWLFS mnt]#mount -t reiserfs /dev/lvm_vg/lv_home lvm_home/
重新掛載上.
EXT2/3 安裝,擴展:
[root@NEWLFS mnt]#lvcreate -L 2G -n lv_opt lvm_vg
Logical volume "lv_opt" created
分出一塊2G名字為lv_opt的邏輯卷
[root@NEWLFS mnt]#mke2fs -j /dev/lvm_vg/lv_opt
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
創建ext3文件系統
[root@NEWLFS mnt]#mkdir lvm_opt
[root@NEWLFS mnt]#mount -t ext3 /dev/lvm_vg/lv_opt lvm_opt/
創建掛載點,掛載上。
[root@NEWLFS mnt]#df
Filesystem Size Used Avail Use% Mounted
..............
/dev/mapper/lvm_vg-lv_home
3.0G 33M 3.0G 2% /mnt/lvm_home
/dev/mapper/lvm_vg-lv_opt
2.0G 33M 1.9G 2% /mnt/lvm_opt
[root@NEWLFS mnt]#lvextend -L +1G /dev/lvm_vg/lv_opt
Extending logical volume lv_opt to 3.00 GB
Logical volume lv_opt successfully resized
為lv_opt 增加一個G的空間。
[root@NEWLFS mnt]#umount lvm_opt/
調整ext2/3文件系統 需要先卸載,然后調整,不象ReiserFS可以不用卸載。
[root@NEWLFS mnt]#resize2fs /dev/lvm_vg/lv_opt
resize2fs 1.35 (28-Feb-2004)
Please run 'e2fsck -f /dev/lvm_vg/lv_opt' first.
提示先運行e2fsck -f 那就檢查下吧 :)
resize2fs -f 參數可以不用e2fsck,檢查下也是好的。
[root@NEWLFS mnt]#e2fsck -f /dev/lvm_vg/lv_opt
e2fsck 1.35 (28-Feb-2004)
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/lvm_vg/lv_opt: 11/262144 files (0.0% non-contiguous), 16443/524288 blocks
[root@NEWLFS mnt]#resize2fs /dev/lvm_vg/lv_opt
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/lvm_vg/lv_opt to 786432 (4k) blocks.
The filesystem on /dev/lvm_vg/lv_opt is now 786432 blocks long.
成功將lv_opt調整成3G,重新mount 看看吧 !
[root@NEWLFS mnt]#mount -t ext3 /dev/lvm_vg/lv_opt lvm_opt/
[root@NEWLFS mnt]#df
Filesystem Size Used Avail Use% Mounted on
.............
/dev/mapper/lvm_vg-lv_home
3.0G 33M 3.0G 2% /mnt/lvm_home
/dev/mapper/lvm_vg-lv_opt
3.0G 33M 2.9G 2% /mnt/lvm_opt
[root@NEWLFS mnt]#
OK啦。 LVM真是方便 ^_^
再來看看如何減小分區大?。?
注意: 減小邏輯卷大小之前,應該先減小文件系統的大小,否則可能會導致數據丟失。
ReiserFS :
[root@NEWLFS mnt]#umount lvm_home/
首先卸載ReiserFS文件系統。
[root@NEWLFS mnt]#resize_reiserfs -s-1G /dev/lvm_vg/lv_home
resize_reiserfs 3.6.19 (2003 www.namesys.com)
You are running BETA version of reiserfs shrinker.
This version is only for testing or VERY CAREFUL use.
Backup of you data is recommended.
Do you want to continue? [y/N]:y
Processing the tree: 0%....20%....40%....60%....80%....100% left 0, 0 /sec
nodes processed (moved):
int 0 (0),
leaves 1 (0),
unfm 0 (0),
total 1 (0).
check for used blocks in truncated region
ReiserFS report:
blocksize 4096
block count 524288 (786432)
free blocks 516061 (778197)
bitmap block count 16 (24)
Syncing..done
resize_reiserfs: Resizing finished successfully.
先減小文件系統的大小, -s-1G 減去1個G
[root@NEWLFS mnt]#lvreduce -L -1G /dev/lvm_vg/lv_home
WARNING: Reducing active logical volume to 2.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
Reducing logical volume lv_home to 2.00 GB
Logical volume lv_home successfully resized
然后減小LV大小, -L -1G 減去1個G 與文件系統保持一致。
[root@NEWLFS mnt]#mount -t reiserfs /dev/lvm_vg/lv_home lvm_home/
[root@NEWLFS mnt]#df
Filesystem Size Used Avail Use% Mounted on
/dev/md0 5.4G 2.8G 2.7G 51% /
/dev/hda1 6.4G 4.0G 2.5G 62% /mnt/C
/dev/hda6 25G 22G 3.6G 86% /mnt/E
/dev/hda7 9.7G 3.7G 5.6G 40% /mnt/lfs
/dev/mapper/lvm_vg-lv_opt
3.0G 33M 2.9G 2% /mnt/lvm_opt
/dev/mapper/lvm_vg-lv_home
2.0G 33M 2.0G 2% /mnt/lvm_home
OK,成功減少了一個G,從上面輸出可以看出,減小要比增大危險一些
所以應該盡量避免減小分區大小,以及做重要數據的備份,有備無患嘛 :)
EXT2/3:
在LVM1中可以通過e2fsadm這個程序,方便的減小一個ext2/3的大小。
而LVM2中這個程序不可用。
所以在LVM2中減小EXT2/3大小時麻煩一些,因為必須要知道減少后卷的塊數。
[root@NEWLFS ~]#umount /mnt/lvm_opt/
首先卸載文件系統
[root@NEWLFS ~]#mke2fs -n /dev/lvm_vg/lv_opt
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 786432 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
[root@NEWLFS ~]#
因為必須知道減少后卷的塊數,所以通過mke2fs -n 列出塊大小
注意: -n 參數不會使mke2fs真的創建文件系統,而只是列出文件系統的信息。
千萬不要少了-n 否則數據就全沒了。。:(
塊大小是4096(4kb) 當前有786432個blocks 現在打算減小一個G的空間。
1G占用的blocks一共是262144個,所以減少后的blocks應該是524288個。
減小FS大小:
[root@NEWLFS ~]#resize2fs /dev/lvm_vg/lv_opt 524288
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/lvm_vg/lv_var to 524288 (1k) blocks.
The filesystem on /dev/lvm_vg/lv_var is now 524288 blocks long.
減少LV大?。?br />[root@NEWLFS mnt]#lvreduce -L -1G /dev/lvm_vg/lv_var
WARNING: Reducing active logical volume to 2.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_var? [y/n]: y
Reducing logical volume lv_var to 2.00 GB
Logical volume lv_var successfully resized
ok,成功縮小了1G,再重新mount上吧。
[root@NEWLFS mnt]#mount /dev/lvm_vg/lv_var lvm_var/
[root@NEWLFS mnt]#df
..........
/dev/mapper/lvm_vg-lv_var
2.0G 33M 1.9G 2% /mnt/lvm_var
下面再來看看如何刪除LV,VG :
刪除LV:
[root@NEWLFS mnt]#umount /dev/lvm_vg/lv_opt
必須先關閉LV才可以刪除它。
[root@NEWLFS mnt]#lvremove /dev/lvm_vg/lv_opt
Do you really want to remove active logical volume "lv_opt"? [y/n]: y
Logical volume "lv_opt" successfully removed
[root@NEWLFS mnt]
使用lvremove命令刪除一個邏輯卷,這里刪除了lv_opt.
刪除VG:
首先必須確保VG中沒有任何邏輯卷存在,才可以刪除一個VG。
我已經使用lvremove 刪除了lv_usr lv_home。
[root@NEWLFS mnt]#lvdisplay
[root@NEWLFS mnt]#
沒有任何輸出,說明已經沒有lv了。
[root@NEWLFS mnt]#vgchange -a n lvm_vg
0 logical volume(s) in volume group "lvm_vg" now active
使用vgchange -a n 關閉了lvm_vg,然后才可以刪除它。
[root@NEWLFS mnt]#vgremove lvm_vg
Volume group "lvm_vg" successfully removed
干掉了 ....世界清靜了 ^_^
[root@NEWLFS mnt]#vgdisplay
[root@NEWLFS mnt]#
沒有回顯,說明已經沒有任何VG了。
向VG中添加/刪除PV :
上面已經提到了,VG可以由多個PV組成(hda1,hda3,hda5....)
可以使不相鄰的分區,結合在一起使用。(和線性RAID同樣的作用)
來看看如何向VG中添加PV:
因為我沒有多余的物理設備來演示,所以用到了loop設備。
首先我通過
[root@NEWLFS ~]#dd if=/dev/zero of=/root/lvm bs=4096 count=32768
在/root目錄下創建了一個128M的文件(/root/lvm)
然后用losetup 命令掛在了/dev/loop0上,這樣我的loop0就象/dev/hdaX一樣
是一個可用的塊設備了。loop設備真是不錯,用來做實驗很好,比如試試reiserfs
raid,LVM.....練習好了,再在真實分區上實踐。
看看我是怎么使用的 :)
[root@NEWLFS ~]#losetup /dev/loop0 lvm
將剛剛建立的lvm文件掛在了/dev/loop0中,這樣loop0可以象其他物理設備可以使用了。
初始化loop0 為PV:
[root@NEWLFS ~]#pvcreate /dev/loop0
Physical volume "/dev/loop0" successfully created
[root@NEWLFS ~]#
使用vgextend命令將/dev/loop0添加到lvm_vg中:
[root@NEWLFS ~]#vgextend lvm_vg /dev/loop0
Volume group "lvm_vg" successfully extended
[root@NEWLFS ~]#
成功的將/dev/loop0加入到了lvm_vg中。下面就可以創建LV啦。
[root@NEWLFS ~]#lvcreate -L 128M -n loop_lv lvm_vg /dev/loop0
Insufficient allocatable logical extents (31) for logical volume loop_lv: 32 required
加上/dev/loop0表示指定這個LV只在/dev/loop0中,可能因為LE自身占用空間,所以無法分配128M
[root@NEWLFS ~]#lvcreate -L 100M -n loop_lv lvm_vg /dev/loop0
Logical volume "loop_lv" created
[root@NEWLFS ~]#
100M就可以成功創建了,可以看出,loop_lv這個LV完全在/dev/loop0上。
刪除PV:
必須確保要刪除的PV中沒有被任何LV使用
使用 pvdisplay /dev/loop0 查看 (假設loop0是要刪除的pv)
[root@NEWLFS ~]#pvdisplay /dev/loop0
--- Physical volume ---
PV Name /dev/loop0
VG Name lvm_vg
PV Size 124.00 MB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 31
Free PE 31 ---->FreePE=TotalPE
Allocated PE 0------>占用的PE為0 說明loop0上沒有lv
PV UUID K38G8y-G6b7-81O0-SFz5-HZii-Rp6t-sHq4ou
[root@NEWLFS ~]#
如果仍然有LV使用該物理卷,可以通過 pvmove 命令轉移到另一個PV上
然后使用vgreduce命令 刪除PV :
[root@NEWLFS ~]#vgreduce lvm_vg /dev/loop0
Removed "/dev/loop0" from volume group "lvm_vg"
[root@NEWLFS ~]#
成功將/dev/loop0從lvm_vg中刪除,很簡單吧 ^_^
系統啟動時自動加載LVM分區:
修改/etc/fstab 加入LVM分區 以及掛載點,FS類型等。。。。
/dev/lvm_vg/lv_home /mnt/lvm_home reiserfs defaults 0 0
/dev/lvm_vg/lv_opt /mnt/lvm_opt ext3 defaults 0 0
然后需要在系統啟動腳本中加入激活LVM的命令
并且必須在掛載/etc/fstab中的文件系統之前激活LVM,不然怎么掛載阿。^_^
我寫在了/etc/rc.d/init.d/mountfs這個腳本中,它的作用是
在fsck檢查各個分區后,將/分區及其他分區重新掛載成read-write的
/sbin/vgscan -------->需要加入的兩行
/sbin/vgchange -a y
mountfs腳本主要內容是:(傳遞start參數)
echo "Remounting root file system in read-write mode..."
mount -n -o remount,rw /
echo "Recording existing mounts in /etc/mtab..."
> /etc/mtab
mount -f / || failed=1
mount -f /proc || failed=1
if grep -q '[[:space:]]sysfs' /proc/mounts ; then
mount -f /sys || failed=1
fi
echo "Mounting remaining file systems..."
##############LVM##############
/sbin/vgscan #------->在掛載其他文件系統之前
/sbin/vgchange -a y #---->就激活了LVM,隨后就掛載上啦
mount -a -O no.netdev #--->依照/etc/fstab掛載FS
這樣系統啟動時,就會激活LVM,并自動掛載上。
一篇關于LVM的文章中說,將這兩條命令加在了檢查文件系統腳本中,但是我加在那里
不成功,可能因為在checkfs時,系統是read-only的,而vgchange -a y
需要寫入數據卻無法寫入,所以不行.
udev服務先于checkfs啟動,并且通過mount -n -t ramfs ramfs /dev
將/dev掛載成ramfs,完全在內存中活動,無論根分區是否可寫,/dev都是可寫的。
莫非vgchange -a y 還要向其他位置寫入數據?有待研究:)
在其他的發行版中,如Red Hat,Mandrake中,檢查根文件系統,依照/etc/fstab
掛載各個文件系統,開啟SWAP分區...等等,這些都是通過/etc/rc.d/rc.sysinit完成的
而在LFS中則是將這個腳本 分成了若干的小腳本,然后逐一的運行它們。
個人認為這樣可以更直觀的了解系統的啟動過程,方便修改。
所以在其他發行版中,激活lvm,就要寫到/etc/rc.d/rc.sysinit中
并且必須要在掛載/etc/fstab中文件系統之前激活。還要注意激活時,系統是rw的。
最后我又在mountfs中添加了關閉VG的語句,這樣可以
在系統關機/重啟的時候自動關閉VG。
/sbin/vgchange -a n ------>添加這句
當系統關機/重啟時,mountfs會依照/etc/fstab卸載所有的文件系統:
mountfs 腳本內容 : (傳遞stop參數)
echo "Unmounting all other currently mounted file systems..."
umount -a -d -r -t noramfs
/sbin/vgchange -a n # --->加在了這里
在卸載LV卷后,才可以關閉VG,開始我加在了umount上面一行就不行。提示仍有LV在使用。
其他發行版中,關閉VG要比激活VG容易多啦。只要加在halt/reboot這個服務腳本里就可以。
其實只要卸載文件系統后的服務腳本都可以,隨你喜歡了。 ^_^