Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213464
  • 博文数量: 489
  • 博客积分: 410
  • 博客等级: 下士
  • 技术积分: 2590
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-01 22:50
文章分类

全部博文(489)

文章存档

2011年(489)

我的朋友

分类:

2011-09-04 12:42:51

原文地址:linux lvm操作空间方法 作者:hackerwang

使用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 successfully 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 )

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 /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(这可直接输入以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这个服务脚本里就可以。
其实只要卸载文件系统后的服务脚本都可以,随你喜欢了。 ^_^

阅读(410) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~