LVM使用手册

LVM 使用手册

1 简介
1.1
什么是LVM?
LVM
Logical Volume Manager( 逻辑卷管理) 的简写,它由Heinz MauelshagenLinux 2.4 内核上实现,目前最新版本为:稳定版1.0.5 ,开发版 1.1.0-rc2 ,以及LVM2 开发版。
与传统的磁盘与分区相比,LVM 为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM 管理下的存储卷可以按需要随时改变大小与移除( 可能需对文件系统工具进行升级)LVM 也允许按用户组对存储卷进行管理,允许管理员用更直观的名称("sales' 'development') 代替物理磁盘名('sda''sdb') 来标识存储卷。
1.2
为什么使用LVM?
LVM
通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。
1.2.1
小系统使用LVM 的益处
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
1.
不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;
2.
当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。
3.
如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。
当采用LVM 时,情况有所不同:
1.
硬盘的多个分区由LVM 统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2.
文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小( 在卷组容量范围内) 以满足要求;
3.
文件系统建立在LVM 上,可以跨分区,方便使用;
1.2.2
大系统使用LVM 的益处
在使用很多硬盘的大系统中,使用LVM 主要是方便管理、增加了系统的扩展性。
在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。
用户/用户组的空间建立在LVM 上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM 可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。
2 LVM
构成
LVM
的结构简图如下:
hda1 hdc1 sdc (PV:s
物理卷,一般为分区或整个硬盘)
/
/
/
/
diskvg (VG
卷组由物理卷组成)
/ | /
/ | /
usrlv rootlv varlv (LV:s
逻辑卷在卷组上创建)
| | |
ext2 reiserfs xfs (
建立在逻辑卷上的文件系统)
2.1
卷组volume group (VG)
卷组是LVM 中最高抽象层,是由一个或多个物理卷所组成的存储器池。
2.2
物理卷physical volume (PV)
典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID 卷。
2.3
逻辑卷logical volume (LV)
逻辑卷相当于非LVM 系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。
2.4
物理块physical extent (PE)
物理卷按大小相等的 为单位存储,块的大小与卷组中逻辑卷块的大小相同。
2.5
逻辑块logical extent (LE)
逻辑卷按 为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。
2.6
总述
例子:有一个卷组VG1 ,它的物理块大小为4MB 。在这个卷组中为2 个硬盘分区:/dev/hda1/dev/hdb1 ,它们分别成为物理卷PV1PV2 。物理卷将按4MB 为单位分块,如PV1PV2 分别可分为99248 块。在VG1 上建立逻辑卷,它的大小可在1347(99+248) 块之间。当建立逻辑卷时,会建立逻辑块与物理块的一一映射关系。
2.7
映射模式 (linear/striped)
在建立逻辑卷时,可以选择逻辑块与物理块映射的策略:
1.
线性映射-将把一定范围的物理块按顺序分配给逻辑卷,如 LVLE 1 – 99 映射到PV1LE 100 – 347 映射到PV2
2.
交错模式-将把逻辑块交错映射到不同的物理卷中,如 LVLE 1 映射为PV1PE1LE 2 映射为PV2PE1LE 3 映射为PV1PE2... 。这种方式可以提高逻辑卷的性能,但是采用这种方式建立的逻辑卷将不能在它们所在的物理卷中扩展。
2.8 Snapshots (
快照)
LVM
提供了一个非常好的特性:snapshots 。它允许管理员建立一个块设备:该设备是一逻辑卷在某一时刻冻结的精确拷贝。这个特性通常用于批处理过程( 如备份) 需要处理逻辑卷,但又不能停止系统。当操作完成时,snapshot 设备可以被移除。这个特性要求在建立snapshot 设备时逻辑卷处于相容状态。
3 LVM
的一般操作
3.1
建立PV
为把一个磁盘或分区作为PV ,首先应使用 pvcreate 对其初始化,如对IDE 硬盘/dev/hdb
"
使用整个磁盘,
# pvcreate /dev/hdb
这将在磁盘上建立VG 的描述符。
"
使用磁盘分区,如/dev/hdb1
使用fdisk t 命令把/dev/hda1 的分区类型设为0x8e ,然后运行:
# pvcreate /dev/hdb1
这将在分区/dev/hda1 上建立VG 的描述符。
PV
初始化命令pvcreate 的一般用法为:
pvcreate PV1 [ PV2 ... ]
它的参数可以是整个磁盘、分区,也可以是一loop 设备。
3.2
建立VG
在使用pvcreate 建立了PV 后,可以用vgcreate 建立卷组,如有PV1PV2 分别是/dev/hda1/dev/hdb1 ,使用
# vgcreate testvg /dev/hda1 /dev/hdb1
将建立一个名为testvg 的卷组,它由两个PV/dev/hda1/dev/hdb1 组成。vgcreate 的一般用法为:
# vgcreate [options] VG_name PV1 [PV2 ...]
其中的可选项包括设置VG 最大支持的LV 数、PE 大小( 缺省为4MB) 等。
注意:当使用devfs 系统时,应使用设备的全名而不能是Symbol Link ,如对上例应为:
# vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1/
/dev/ide/host0/bus0/target1/lun0/part1
3.3
激活VG
在被激活之前,VGLV 是无法访问的,这时可用命令:
# vgchange -a y testvg
激活所要使用的卷组。当不再使用VG 时,可用
vgchange -a n testvg
使之不再可用。
vgchange
可用来设置VG 的一些参数,如是否可用( -a [y|n] 选项) 、支持最大逻辑卷数等。
3.4
移除VG
在移除一卷组前应确认卷组中不再有逻辑卷,首先休眠卷组:
# vgchange -a n testvg
然后可用vgremove 移除该卷组:
# vgremove testvg
3.5
VG 增加新PV
当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令vgextend ,如
# vgextend testvg /dev/hdc1
其中/dev/hdc1 是新的PV ,当然在这之前,它应使用pvcreate 初始化。
3.6
VG 移除PV
在移除PV 之前,应确认该PV 没用被LV 使用,这可用命令pvdisplay 查看,如:
# pvdisplay /dev/hda1
--- Physical volume ---
PV Name /dev/hda1
VG Name testvg
PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV# 1
PV Status available
Allocatable yes (but full)
Cur LV 1
PE Size (KByte) 4096
Total PE 499
Free PE 0
Allocated PE 499
PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
如这个PV 仍在被使用,则应把数据传移到其它PV 上。在确认它未被使用后,可用命令vgreduce 把它从VG 中删除,如:
# vgreduce testvg /dev/hda1
3.7
创建LV
在创建逻辑卷前,应决定LV 使用哪些PV ,这可用命令vgdisplaypvdisplay 查看当前卷组与PV 的使用情况。在已有的卷组上创建逻辑卷使用命令lvcreate ,如:
# lvcreate -L1500 -ntestlv testvg
将在卷组testvg 上建立一个1500MB 的线性LV ,其命名为testlv ,对应的块设备为/dev/testvg/testlv
# lvcreate -i2 -I4 -l100 -nanothertestlv testvg
将在卷组testvg 上建立名为anothertestlvLV ,其大小为100LE ,采用交错方式存放,交错值为2 ,块大小为4KB
如果需要LV 使用整个VG ,可首先用vgdisplay 查找 Total PE 值,然后在运行lvcreate 时指定,如:
# vgdisplay testvg | grep "Total PE"
Total PE 10230
# lvcreate -l 10230 testvg -n mylv
将使用卷组testvg 的全部空间创建逻辑卷mylv
在创建逻辑卷后,就可在其上创建文件系统并使用它。
命令lvcreate 的常用方法:
lvcreate [options] -n
逻辑卷名 卷组名 [PV1 ... ]
其中的常用可选项有:
"-i Stripes
:采用交错(striped) 方式创建LV ,其中Stripes 指卷组中PV 的数量。
"-I Stripe_size
:采用交错方式时采用的块大小( 单位为KB)Stripe_size 必须为2 的指数:2N N=2,3...9
"-l LEs
:指定LV 的逻辑块数。
"-L size
:指定LV 的大小,其后可以用KMG 表示KBMBGB
"-s
:创建一已存在LVsnapshot 卷。
"-n name
:为LV 指定名称。
3.8
删除LV
为删除一个逻辑卷,必须首先从系统卸载其上的文件系统,然后可用lvremove 删除,如:
# umount /dev/testvg/testlv
# lvremove /dev/testvg/testlv
lvremove -- do you really want to remove "/dev/testvg/testlv"? [y/n]: y
lvremove -- doing automatic backup of volume group "testvg"
lvremove -- logical volume "/dev/testvg/testlv" successfully removed
3.9
扩展LV
为逻辑卷增加容量可用使用lvextend ,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如
# lvextend -L12G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 12 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
将扩大逻辑卷testlv 的容量为12GB
# lvextend -L+1G /dev/testvg/testlv
lvextend -- extending logical volume "/dev/testvg/testlv" to 13 GB
lvextend -- doing automatic backup of volume group "testvg"
lvextend -- logical volume "/dev/testvg/testlv" successfully extended
将为LV testlv 再增大容量1GB13GB
LV 扩容的一个前提是:LV 所在的VG 有足够的空闲存储空间可用。
在为LV 扩容之后,应同时为LV 之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。
3.9.1 ext2/ext3
除非内核已有ext2online 补丁,否则在改变ext2/ext3 文件系统的大小时应卸载它:
# umount /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
# mount /dev/testvg/testlv /home
这里假设testlv 安装点为/home 。在es2fsprogs-1.19 或以上版本中包含resize2fs 命令。
LVM 发行包中有一个称为e2fsadm 的工具,它同时包含了lvextendresize2fs 的功能,如:
# e2fsadm -L+1G /dev/testvg/testlv
等价于下面两条命令:
# lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用户仍需首先卸载文件系统。
3.9.2 reiserfs
ext2 不同,Reiserfs 不必卸载文件系统,如:
# resize_reiserfs -f /dev/testvg/testvl
3.9.3 xfs
SGI XFS
文件系统必须在安装的情况下才可改变大小,并且要使用安装点而不是块设备,如:
# xfs_growfs /home
3.10
缩小LV
逻辑卷可扩展同样也可缩小,但应在缩小LV 之前首先减小文件系统,否则将可能导致数据丢失。
3.10.1 ext2/ext3
可以使用LVM 的工具e2fsadm 操作,如:
# umount /home
# e2fsadm -L-1G /dev/testvg/testvl
# mount /home
如果采用resize2fs ,就必须知道缩少后卷的块数:
# umount /home
# resize2fs /dev/testvg/testvl 524288
# lvreduce -L-1G /dev/testvg/testvl
# mount /home
3.10.2 reiserfs
在缩小reiserfs 时,应首先卸载它,如:
# umount /home
# resize_reiserfs -s-1G /dev/testvg/testvl
# lvreduce -L-1G /dev/testvg/testvl
# mount -treiserfs /dev/testvg/testvl /home
3.10.3 xfs
无法实现。
3.11
PV 间转移数据
若要把一个PVVG 中移除,应首先把其上所有活动PE 中的数据转移到其它PV 上,而新的PV 必须是本VG 的一部分,有足够的空间。如要把PV1:/dev/hda1 上的数据移到PV2:/dev/sda1 上可用命令:
# pvmove /dev/hdb1 /dev/sdg1
如果在该PV 之上的LV 采用交错方式存放,则这个转移过程不能被打断。
建议在转移数据之前备份LV 中的数据。
3.12
系统启动/关闭
"
为使系统启动时可自动激活并使用LVM ,可将以下几行添加到启动 rc 脚本中:
/sbin/vgscan
/sbin/vgchange -a y
这些行将浏览所有可用的卷组并激活它们。要注意的是,它们应在安装卷组上的文件系统操作之前被执行,否则将无法正常安装文件系统。
"
在系统关机时,要关闭LVM ,这可将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行:
/sbin/vgchange -a n
4
磁盘分区问题
4.1
一个磁盘上的多个分区
LVM
允许PV 建立在几乎所有块设备上,如整个硬盘、硬盘分区、Soft RAID
# pvcreate /dev/sda1
# pvcreate /dev/sdf
# pvcreate /dev/hda8
# pvcreate /dev/hda6
# pvcreate /dev/md1
所以在一块硬盘上可以有多个PV /分区,但一般建议一块硬盘上只有一个PV
"
便于管理,易于处理错误
"
避免交错方式中性能下降。LVM 不能辨别两个PV 是否在同一硬盘上,故当采用交错方式时,会导致性能更差。
但在某些情况下可采用:
"
把已存在的系统合并到LVM 中。在一个只有少数硬盘的系统中,转换为LVM 时需在在各分区之间转移数据。
"
把一个大硬盘分给不同的VG 使用。
当一个VG 的有不同的PV 在同一硬盘时,创建交错方式的LV 时应注意使用哪一个PV
4.2 Sun disk labels
仅在SUNSPARC 系统中有此问题。
5
建立LVM 用例
在本节中,将在3SCSI 硬盘:/dev/sda/dev/sdb/dev/sdc 上按步建立LVM
5.1
准备分区
首先要做的是初始化硬盘,建立PV ,这将会删除硬盘上的原有数据。在此,用整个硬盘为PV
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate
在每个硬盘的起始端建立卷组描述区( volume group descriptor area, VGDA)
5.2
创建卷组
利用上面三个PV 建立卷组:
# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/
然后可用vgdisplay 查看/验证卷组的信息:
# vgdisplay
--- Volume Group ---
VG Name test_vg
VG Access read/write
VG Status available/resizable
VG # 1
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 3
Act PV 3
VG Size 1.45 GB
PE Size 4 MB
Total PE 372
Alloc PE / Size 0 / 0
Free PE / Size 372/ 1.45 GB
VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
其中最重要的前三条要正确,且VS size 是以上三个硬盘容量之和。
5.3
建立LV
在确定卷组test_vg 正确后,就可在其上创建LVLV 的大小可在VG 大小范围内任意选择,如同在硬盘上分区。
5.3.1
建立线性方式LV
test_vg 上建立一个大小为1GB 的线性方式LV
# lvcreate -L1G -ntest_lv test_vg
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
5.3.2
建立交错方式LV
test_vg 上建立一个大小为1GB 的交错方式LV ,交错参数为4KB
# lvcreate -i3 -I4 -L1G -ntest_lv test_vg
lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
注意:如果使用 -i2 参数,则LV 将仅使用test_vg 中的两块硬盘。
5.4
建立文件系统
LV test_lv 创建后,就可在其上建立文件系统,
如,ext2/ext3 系统:
# mke2fs /dev/test_vg/test_lv
如,reiserfs
mkreiserfs /dev/test_vg/test_lv
5.5
测试文件系统
安装LV
# mount /dev/test_vg/test_lv /mnt
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 1311552 628824 616104 51% /
/dev/test_vg/test_lv 1040132 20 987276 0% /mnt
则可以通过/mnt 访问LV
6
使用snapshot 做备份
例如我们要对卷组"test_vg" 每晚进行数据库备份,就要采用snapshot 类型的卷组。这种卷组是其它卷组的一个只读拷贝,它含有在创建snapshot 卷组时原卷组的所有数据,这意味你可以备份这个卷组而不用担心在备份过程中数据会改变,也不需要暂时关闭数据库卷以备份。
6.1
建立snapshot
一个snapshot 卷可大可小,但必须有足够的空间存放所有在本snapshot 卷生存期间改变的数据,一般最大要求是原卷组的1.1 倍。如空间不够,snapshot 卷将不能使用。
# lvcreate -L592M -s -n dbbackup /dev/test_vg/databases
lvcreate -- WARNING: the snapshot must be disabled if it gets full
lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/test_vg/dbbackup"
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/dbbackup" successfully created
6.2
安装snapshot
现在可以安装该卷:
# mkdir /mnt/test_vg/dbbackup
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup
mount: block device /dev/test_vg/dbbackup is write-protected, mounting read-only
从上面可以看出,snapshot 卷是只读的。
当使用XFS 文件系统时,mount 命令要使用nouuidnorecovery 选项:
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup -o nouuid,norecovery,ro
6.3
备份数据
如采用tar 向磁带备份:
# tar -cf /dev/rmt0 /mnt/test_vg/dbbackup

6.4 删除snapshot
在完成备份后,就可卸载并删除snapshot 卷。
# umount /mnt/test_vg/dbbackup
# lvremove /dev/test_vg/dbbackup
lvremove -- do you really want to remove "/dev/test_vg/dbbackup"? [y/n]: y
lvremove -- doing automatic backup of volume group "test_vg"
lvremove -- logical volume "/dev/test_vg/dbbackup" successfully removed
7
更换卷组硬盘
由于某种原因,需要用新的硬盘替代卷组中的旧硬盘,如用一SCSI 硬盘替换IDE 硬盘,其步骤为:
7.1
准备/ 初始化新硬盘
首先用pvcreate 命令初始化新的硬盘,如使用整个硬盘:
# pvcreate /dev/sdf
pvcreate -- physical volume "/dev/sdf" successfully created
7.2
加入卷组
把新硬盘加入卷组:
# vgextend test_vg /dev/sdf
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "test_vg"
vgextend -- volume group "test_vg" successfully extended
7.3
数据搬家
在移除旧硬盘前,要把其上的数据转移到新硬盘上。在转移数据时,不要求卸载文件系统,但建议在数据转移前进行备份,以防转移进程中意外导致数据丢失。
pvmove
用来实现数据转移,根据数据量的多少,它可能要使用大量的时间,并可降低逻辑卷的性能,因此要在系统不太忙时操作。
# pvmove /dev/hdb /dev/sdf
pvmove -- moving physical extents in active volume group "test_vg"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved
7.4
移除未用硬盘
当数据被转移到其它硬盘后,就可以从卷组中删除这块不再使用的硬盘:
# vgreduce dev /dev/hdb
vgreduce -- doing automatic backup of volume group "test_vg"
vgreduce -- volume group "test_vg" successfully reduced by physical volume:
vgreduce -- /dev/hdb
从此,卷组test_vg 不再使用IDE 硬盘/dev/hdb ,这块硬盘可以从机器中拆下或用作它途。
8
迁移卷组到其它系统
把一个卷组转移到其它系统是很容易的(如更换服务器),这要用命令vgexportvgimport
8.1
卸载文件系统
为整体搬迁卷组,应首先把它从文件系统中卸载,如:
# unmount /mnt/design/users
8.2
设置卷组为非活动状态
把卷组从内核中卸载,以避免任何对它可能的操作:
# vgchange -an test_vg
vgchange -- volume group "test_vg" successfully deactivated
8.3 Export
卷组
这个操作不是必须的,便它可以防止系统对卷组的访问:
# vgexport test_vg
vgexport -- volume group "test_vg" sucessfully exported
当机器关机后,构成卷组的硬盘就可被转移到新的服务器上。
8.4 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
8.5
安装文件系统
# mkdir -p /mnt/design/users
# mount /dev/test_vg/users /mnt/design/users
在完成以上操作后,原卷组在新的服务器上就可使用了。
9
分割卷组
这种情况是:需要在系统中加入新的卷组,但没有其它可用新硬盘,而已有的卷组中还有大量空间可用。如向系统加入一个"design" 卷组。
9.1
检查可用空间
# 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 )。
9.2
从选定硬盘移出数据
由于硬盘上的逻辑卷仍在使用,故首先要转移它们的数据。
把所有在使用的物理块从/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
9.3
创建新卷组
现在把/dev/sdg2 从卷组dev 从分割出并加入到新卷组design 中。我们可用vgreducevgcreate 完成工作,但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"
9.4
移除剩余的卷
接下来的工作 把/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
9.5
建立新逻辑卷及文件系统
在卷组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
10
转变根文件系统为LVM
注意:强烈要求在进行下面的操作前对系统进行备份,并且把/文件系统建立在LVM 上会导致系统升级很复杂。
在下面的例子中,系统除了/boot 外都安装在同一个分区中,文件系统的情况为:
/dev/hda1 /boot
/dev/hda2 swap
/dev/hda3 /
进行转换的一个必要条件是硬盘上还有足够的空间给分区/dev/hda4 创立LVM 并把/分区的内容都复制到LVM 上,否则:
1.
/分区还有至少一半空间空闲,可以缩减/分区,并把分出的空间划分到分区/dev/hda4
为方便可用GNU parted 工具:ftp://ftp.gnu.org/pub/gnu/parted ;宮.?? 个操作;
2.
硬盘上已无足够空间,必须使用第二块硬盘,如/dev/hdb
在完成以上准备及备份系统后,可继续以下步骤:
1.
确认使用的Linux 内核支持LVM ,并且在编译时设置了 CONFIG BLK DEV RAM CONFIG BLK 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 = lvm
root = /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
如果系统未能正常启动,可能的原因是内核不支持LVMinitrd 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
11
共享LVM
LVM
不支持物理共享访问,这会导致数据的丢失。
在使用fibre-channel shared-SCSI 的环境中,多台计算机以物理方式直接访问一组硬盘,于是可以使用LVM 把这些硬盘分为不同的逻辑卷。如果需要共享数据,则应使用GFS

你可能感兴趣的:(image,ext,存储,Descriptor,磁盘,linux内核)