linux下LVM管理
第一部分:LVM基本操作
1创建PV
我们可以使用完整的磁盘或磁盘的某个分区来创建PV
1.1使用完整的磁盘来创建PV:
pvcreate /dev/sdb
1.2使用磁盘的某个分区来创建PV
pvcreate /dev/sdc1
2.创建VG
vgcreate newvg /dev/sdb /dev/sdc
查看vg信息:
vgdisplay -v newvg
激活和非激活VG:
vgchange -a y newvg
vgchange -a n newvg
3.创建lv
lvcreate -L 50M -n newlv newvg
4.格式化LV
mke2fs /dev/newvg/newlv
5.挂载给文件系统使用
mount /dev/newvg/newlv /mnt
第二部分:扩展空间
1.扩展VG的空间
创建新的PV
pvcreate /dev/sdd
vgextend newvg /dev/sdd
2.扩展LV的空间
lvextend -L+100M /dev/newvg/newlv
3.扩展文件系统空间
3.1使用e2fsadm
直接扩展它相应的LV
e2fsadm /dev/newvg/newlv -L+50M
3.2ext2离线,使用ext2resize
离线,就意味着你必须umount这个文件系统来做这些改变。在做这些改变的时候,这个文件系统和它上面的数据暂时不可用。如果你想扩充根分区或其他重要的分区,你必须用其他的启动介质来引导。
ext2resize工具可以在GNU ftp站点找到,但大多数的发行版都将它作为一个包来发行。它的语法也简单易懂:
# ext2resize /dev/newvg/newlv 40000
这里40000是文件系统已经增长或收缩之后的块的数目。
以下的内容整理自:http://www.chinaunix.net/jh/4/72921.html
第三部分:替换磁盘
我们首先举一个明显的替换例子,你先添加一个磁盘到系统中,它至少要和你想要替换的磁盘一样大。
要移动数据,我们移动卷组的物理分区到另一个磁盘上,或者更准确的说,到另一个物理卷上。要做这些,LVM给我们提供了pvmove功能。
假设我们怀疑的那块磁盘叫/dev/hda1,并且我们想用/dev/sdb3来替换它。我们首先将/dev/sdb3添加到包含/dev/hda1的那个卷组中。
在这之前,umount这个卷组上的所有文件系统看来是明智的。有一个全备份也不会损坏什么。
接下来我们执行pvmove。非常简单的,我们仅仅提到我们想要移走的那块磁盘,就象这样:
# pvmove /dev/hda1
现在,/dev/hda1没有包含任何物理分区了,我们可以将它从卷组中删除:
# vgreduce test1 /dev/hda1
第四部分:为一致性备份做快照
这是更加难以置信的一个可能性。假设你有一个非常繁忙的服务器,有许多东西运行。为了一个有用的备份,你需要停止大量的程序,否则,你将以数据不一致告终。
一个规范的例子是从/tmp移动一个文件到/root下,而且/root将先备份。当/root被读的时候,这个文件还不在那里。当/tmp被备份时,这个文件已经不在了。
另一个事例是保存数据库或目录。如果一个文件在使用状态,我们就没有任何线索了,除非我们给应用程序时间做一个清除的关闭。
使用LVM,我们可以做一个LV瞬间的快照,然后mount它,再备份它。
让我们试验一下:
# mount /dev/newvg/newlv /mnt
# echo >/mnt/a.test.file
# ls /mnt/
a.test.file lost+found
# ls -l /mnt/
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
Ok,我们现在有些事情要用它一起做。让我们产生这个快照:
# lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO
让我们mount这个快照:
# mount /dev/test/snap /snap
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
现在我们从原处删除a.test.file,并且检查它是否仍然在快照里:
# rm /mnt/a.test.file
# ls /snap
total 13
-rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found
它是如何工作的?
记得我们不得不设置“--size”参数吗?真正发生的事情是,“snap”卷需要有那些当LVM调用时,在原处要被改变的所有块的一个拷贝。
当我们删除a.test.file时,它的i节点被删除。这引起64KB要被标注成“脏的”--同时原始数据的一个拷贝被写到“snap”卷。这个例子中,我们分配了16MB给快照,因此如果多于16MB的块要被修改,快照就会无效了。
要决定一个快照分区的正确大小,你将不得不推测基于主LV的使用模式、快照要激活的总时间。例如,在午夜,当无人使用系统的情况下,一个几小时的备份可能要求很小的空间。
请注意,快照不是永久的。如果你卸下LVM或重启,它们就丢失了,需要重新创建。
第五部分: LVM本身的条块化
当用lvcreate创建LV时,指定条块化配置项。有两个相关参数。-i参数告诉LVM应该在多少个PV上分散数据。条块化不是真的按一次一比特的基础来做的,而是按块。-I参数指定单位为KB的块大小。注意它必须是2的一个幂,而且最大的块大小为128KB。
例如:
# lvcreate -n stripedlv -i 2 -I 64 mygroup -L 20M
性能注意事项
如果跨同一块磁盘的两个分区来条块化,性能的“增加”可能会是非常消极的--注意避免这样。跨单一的IDE总线上的两个磁盘来条块化也是没用的--除非IDE已经改进了我所记忆的。
第六部分:在计算机之间移动LVM磁盘
使用这些新技术,简单的任务象从一台计算机移动磁盘到另一台计算机就变得有些机警了。在用LVM之前,用户只需要把这块盘放到新的机器上并且mount这些文件系统。使用LVM,就多一点事情要做。LVM结构既保存在磁盘上也保存在/etc/lvmconf目录里,因此,移动一个或一组包含了一个VG的磁盘所要做的唯一的事情是确保这个VG属于的机器不会破坏它的数据。这是通过vgexport命令来实现的。vgexport仅仅从/etc/lvmconf删除关于这个VG的结构,而不会更改磁盘上的任何内容。一旦磁盘放到新的机器上(他们没必要有相同的ID),唯一要做的事情就是修改/etc/lvmconf。这是通过vgimport来做的。
例如:
在机器#1:
vgchange -a n vg01
vgexport vg01
在机器#2:
vgimport vg01 /dev/sda1 /dev/sdb1
vgchange -a y vg01
注意你没必要为这个VG使用相同的名字。