118☆LVM 迁移卷组把一个卷组转移到其它系统是很容易的(如更换服务器),这要用命令vgexport 与vgimport 。
卸载文件系统
为整体搬迁卷组,应首先把它从文件系统中卸载,如: # unmount /mnt/design/users
设置卷组为非活动状态把卷组从内核中卸载,以避免任何对它可能的操作: # vgchange -a n test_vg vgchange -- volume group "test_vg" successfully deactivated
Export 卷组这个操作不是必须的,便它可以防止系统对卷组的访问: # vgexport test_vg vgexport -- volume group "test_vg" sucessfully exported
当机器关机后,构成卷组的硬盘就可被转移到新的服务器上。
Import 卷组在新的服务器上,可用pvscan 查看卷组情况,如在这台计算机上,硬盘新的设备为/dev/sdb,使用pvscan 可有: # pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "test_vg" [996 MB / 996 MB free] pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "test_vg" [996 MB / 244 MB free] pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0] 现可以import 卷组test_vg (同时也激活它)以安装其上的文件系统# vgimport test_vg /dev/sdb1 /dev/sdb2 vgimport -- doing automatic backup of volume group "test_vg" vgimport -- volume group "test_vg" successfully imported and activated
安装文件系统
# mkdir -p /mnt/design/users # mount /dev/test_vg/users /mnt/design/users
在完成以上操作后,原卷组在新的服务器上就可使用了。
119☆LVM 分割卷组
这种情况是:需要在系统中加入新的卷组,但没有其它可用新硬盘,而已有的卷组中还有大量空间可用。如向系统加入一个"design"卷组。
检查可用空间
# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free]
pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 1.27 GB free]
pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 564 MB free] pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sde" of VG "ops" [1.95 GB / 1.9 GB free] pvscan -- ACTIVE PV "/dev/sdf" of VG "dev" [1.95 GB / 1.33 GB free] pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 432 MB free] pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 632 MB free] pvscan -- total: 8 [13.67 GB] / in use: 8 [13.67 GB] / in no VG: 0 [0] 我们决定把/dev/sdg1 与/dev/sdg2 分配组design,但首先要把其上的物理块移到其它卷的空闲空间中(如把卷组dev 移到/dev/sdf,卷组ops 移到/dev/sde)。
从选定硬盘移出数据由于硬盘上的逻辑卷仍在使用,故首先要转移它们的数据。把所有在使用的物理块从/dev/sdg1 上转移到/dev/sde,及从/dev/sdg2 转移到/dev/sdf。# pvmove /dev/sdg1 /dev/sde pvmove -- moving physical extents in active volume group "ops" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- doing automatic backup of volume group "ops" pvmove -- 141 extents of physical volume "/dev/sdg1" successfully moved
# pvmove /dev/sdg2 /dev/sdf pvmove -- moving physical extents in active volume group "dev" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- doing automatic backup of volume group "dev" pvmove -- 91 extents of physical volume "/dev/sdg2" successfully moved
创建新卷组现在把/dev/sdg2 从卷组dev 从分割出并加入到新卷组design 中。我们可用vgreduce 与vgcreate 完成工作,但vgsplit 此时更方便: # vgsplit dev design /dev/sdg2 vgsplit -- doing automatic backup of volume group "dev" vgsplit -- doing automatic backup of volume group "design" vgsplit -- volume group "dev" successfully split into "dev" and "design"
移除剩余的卷接下来的工作把/dev/sdg1 从卷组ops 中分出并加入卷组design: # vgreduce ops /dev/sdg1 vgreduce -- doing automatic backup of volume group "ops" vgreduce -- volume group "ops" successfully reduced by physical volume: vgreduce -- /dev/sdg1
# vgextend design /dev/sdg1 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "design" vgextend -- volume group "design" successfully extended
建立新逻辑卷及文件系统在卷组design 上建立逻辑卷,为今后的方便,现只使用一部分空间: # lvcreate -L750M -n users design lvcreate -- rounding up size to physical extent boundary "752 MB" lvcreate -- doing automatic backup of "design" lvcreate -- logical volume "/dev/design/users" successfully created
# mke2fs /dev/design/users mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 96384 inodes, 192512 blocks 9625 blocks (5.00<!-- ) reserved for the super user First data block=0 6 block groups 32768 blocks per group, 32768 fragments per group 16064 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840
Writing inode tables: done Writing superblocks and filesystem accounting information: done
# mkdir -p /mnt/design/users # mount /dev/design/users /mnt/design/users/ 现在就可使用卷组design。为方便使用,可把下面一行加入文件/etc/fstab 中: /dev/design/user /mnt/design/users ext2 defaults 1 2
120 ☆LVM 转变根文件系统为LVM
注意:强烈要求在进行下面的操作前对系统进行备份,并且把/文件系统建立在LVM 上会导致系统升级很复杂。在下面的例子中,系统除了/boot 外都安装在同一个分区中,文件系统的情况为: /dev/hda1 /boot /dev/hda2 swap
/dev/hda3 / 进行转换的一个必要条件是硬盘上还有足够的空间给分区/dev/hda4 创立LVM 并把/分区的内容都复制到LVM 上,否则:
1./分区还有至少一半空间空闲,可以缩减/分区,并把分出的空间划分到分区/dev/hda4;
2.硬盘上已无足够空间,必须使用第二块硬盘,如/dev/hdb。在完成以上准备及备份系统后,可继续以下步骤:
1.确认使用的Linux 内核支持LVM,并且在编译时设置了CONFIG BLK DEV RAM 与 CONFIGBLK DEV INITRD 。
2.设置/dev/hda4 分区类型为LVM(8e): # fdisk /dev/hda Command (m for help): t Partition number (1-4): 4 Hex code (type L to list codes): 8e Changed system type of partition 4 to 8e (Unknown) Command (m for help): w
3.设置LVM: "初始化LVM (vgscan) # vgscan "转变分区为PV: # pvcreate /dev/hda4 "建立卷组: # vgcreate vg /dev/hda4 "建立逻辑卷用以存放根系统
这里假设空间为250MB) # lvcreate -L250M root vg
4.在逻辑卷上建立文件系统并把系统复制到其上: # mke2fs /dev/vg/root # mount /dev/vg/root /mnt/ # find / -xdev | cpio -pvmd /mnt
5.修改新系统的fstab 文件/mnt/etc/fstab ,使/安装到/dev/vg/root: /dev/hda3 / ext2 defaults 1 1 改变为: /dev/vg/root / ext2 defaults 1 1
6.创建LVM 初始化RAM 盘: # lvmcreate_initrd 此处要确认为lvmcreate_init 给出正确的initrd image 文件名,它应在/boot/ 目录下。
7. 在/etc/lilo.conf 中为LVM 加入新入口项,其形式如下: image = /boot/KERNEL_IMAGE_NAME label = lvmroot = /dev/vg/root initrd = /boot/INITRD_IMAGE_NAME ramdisk = 8192
此处 KERNEL IMAGE NAME 是支持LVM 的内核,INITRD IMAGE NAME 指由lvmcreate_initrd建立的initrd image 。如果LVM 的配置很多,可以把ramdisk 设置的大一些:此处为8192,缺省为4096。在lvmcrate_initrd 的输出中有如下一行: lvmcreate_initrd -- making loopback file (6189 kB)
其中括号中的数值为实际所需大小。
8.运行LILO,设置BOOT 扇区: # lilo
9.重启计算机,在LILO 提示符处输入"lvm" 启动计算机,此时系统的根文件系统是新建立的逻辑卷。此后可在LILO 配置文件/etc/lilo.conf 中加入以下一行: default=lvm 并运行lilo 设置缺省启动项为lvm。如果系统未能正常启动,可能的原因是内核不支持LVM、initrd image 不正确等等。
10.在正常启动后,就可把硬盘其它分区:/dev/hda3 加入LVM。"首先设置分区类型为 8e(LVM) # fdisk /dev/hda Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 8e Changed system type of partition 3 to 8e (Unknown) Command (m for help): w "把它初始化为PV,并加入卷组中: # pvcreate /dev/hda3 # vgextend vg /dev/hda3