2011年(489)
分类:
2011-09-04 12:42:51
原文地址:linux lvm操作空间方法 作者:hackerwang
更改逻辑卷大小后,还应该更改文件系统的大小,保持一致:
[root@NEWLFS mnt]#resize_reiserfs -f /dev/lvm_vg/lv_home
resize_reiserfs 3.6.19 (2003 )
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 )
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 /secnodes 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(这可直接输入以G或M为单位的大小,省略MKE2FS这个步骤!)
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大小:
[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这个服务脚本里就可以。
其实只要卸载文件系统后的服务脚本都可以,随你喜欢了。 ^_^