一)名词解释:PV、PE、VG、LV
Physical Volume(PV):物理磁盘,即我们用fdisk看到的磁盘分区。磁盘分区的ID为8e(LVM),才能被LVM使用。
Volume Group(VG):LVM主要的目的就是要建立VG。它将一个或多个PV组合成为一个大磁盘。这个大磁盘以后可以分区。
Physical Extend(PE):在建立VG的时候,同时需要指定PE的数值,如果不指定的话,它的默认值是4MB。PE的大小直接影响到VG的最大容量,当PE为4MB时,VG的最大容量是256GB。
Logical Volume(LV):LV就是最后载入到文件系统的分区。LV是由VG分割来的,它会在系统中建立设备代号。
使用LVM的目的是增加管理整个分区大小的灵活性,而不是提高性能。
二)制作LVM的流程
[step 1] 修改磁盘分区的ID号
[root@localhost flagonxia]# fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 62 497983+ 83 Linux
/dev/sdb2 63 124 498015 83 Linux
/dev/sdb3 125 261 1100452+ 83 Linux
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 62 497983+ 83 Linux
/dev/sdb2 63 124 498015 83 Linux
/dev/sdb3 125 261 1100452+ 83 Linux
--将/dev/sdb1的分区ID设置为8e
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
-- 如法炮制,将/dev/sdb2,/dev/sdb3的分区ID也设置为8e
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 62 497983+ 8e Linux LVM
/dev/sdb2 63 124 498015 8e Linux LVM
/dev/sdb3 125 261 1100452+ 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
-- 让核心立刻读取新的分区表,而无须重新启动
[root@localhost flagonxia]# partprobe
[step 2] 建立PV
[root@localhost root]# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ERROR "pv_read(): read" reading physical volumes
[root@localhost root]# pvcreate /dev/sda1
pvcreate -- ERROR: "/etc/lvmtab" doesn't exist; please run vgscan
[root@localhost root]# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group
[root@localhost flagonxia]# pvcreate /dev/sdb1
pvcreate -- physical volume "/dev/sdb1" successfully created
[root@localhost flagonxia]# pvcreate /dev/sdb2
pvcreate -- physical volume "/dev/sdb2" successfully created
[root@localhost flagonxia]# pvcreate /dev/sdb3
pvcreate -- physical volume "/dev/sdb3" successfully created
[root@localhost flagonxia]# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- inactive PV "/dev/sdb1" is in no VG [486.31 MB]
pvscan -- inactive PV "/dev/sdb2" is in no VG [486.34 MB]
pvscan -- inactive PV "/dev/sdb3" is in no VG [1.05 GB]
pvscan -- total: 3 [2 GB] / in use: 0 [0] / in no VG: 3 [2 GB]
[root@localhost flagonxia]# pvdisplay /dev/sdb1 /dev/sdb2 /dev/sdb3
pvdisplay -- "/dev/sdb1" is a new physical volume of 486.31 MB
pvdisplay -- "/dev/sdb2" is a new physical volume of 486.34 MB
pvdisplay -- "/dev/sdb3" is a new physical volume of 1.05 GB
[step 3] 建立VG
[root@localhost flagonxia]# vgcreate xboxvg /dev/sdb1 /dev/sdb2 /dev/sdb3
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "xboxvg"
vgcreate -- volume group "xboxvg" successfully created and activated
[root@localhost flagonxia]# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- found active volume group "xboxvg"
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group
[root@localhost flagonxia]# vgdisplay
--- Volume group ---
VG Name xboxvg
VG Access read/write
VG Status available/resizable
VG # 0
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.98 GB
PE Size 4 MB
Total PE 507
Alloc PE / Size 0 / 0
Free PE / Size 507 / 1.98 GB
VG UUID 8mhdbu-dsP5-7MF0-nu1q-UQ0r-aXN4-B9F5YU
-- 将/dev/sdb2从VG中删除
[root@localhost flagonxia]# vgreduce xboxvg /dev/sdb2
vgreduce -- doing automatic backup of volume group "xboxvg"
vgreduce -- volume group "xboxvg" successfully reduced by physical volume:
vgreduce -- /dev/sdb2
-- 使用vgdisplay命令观察,整个VG(xboxvg)变成了1.5G
[root@localhost flagonxia]# vgdisplay
--- Volume group ---
VG Name xboxvg
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 1.51 GB
PE Size 4 MB
Total PE 387
Alloc PE / Size 0 / 0
Free PE / Size 387 / 1.51 GB
VG UUID 8mhdbu-dsP5-7MF0-nu1q-UQ0r-aXN4-B9F5YU
-- 再将/dev/sdb2加回VG中
[root@localhost flagonxia]# vgextend xboxvg /dev/sdb2
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "xboxvg"
vgextend -- volume group "xboxvg" successfully extended
[root@localhost flagonxia]# vgdisplay
--- Volume group ---
VG Name xboxvg
VG Access read/write
VG Status available/resizable
VG # 0
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.98 GB
PE Size 4 MB
Total PE 507
Alloc PE / Size 0 / 0
Free PE / Size 507 / 1.98 GB
VG UUID 8mhdbu-dsP5-7MF0-nu1q-UQ0r-aXN4-B9F5YU
[step 4] 建立LV
[root@localhost flagonxia]# lvcreate -L 1.98G -n xboxlv xboxvg
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "xboxvg"
lvcreate -- logical volume "/dev/xboxvg/xboxlv" successfully created
[root@localhost flagonxia]# lvscan
lvscan -- ACTIVE "/dev/xboxvg/xboxlv" [1.98 GB]
lvscan -- 1 logical volumes with 1.98 GB total in 1 volume group
lvscan -- 1 active logical volumes
[root@localhost flagonxia]# ll /dev/xboxvg/xboxlv
brw-rw---- 1 root disk 58, 0 6月 14 11:28 /dev/xboxvg/xboxlv
[root@localhost flagonxia]# lvdisplay /dev/xboxvg/xboxlv
--- Logical volume ---
LV Name /dev/xboxvg/xboxlv
VG Name xboxvg
LV Write Access read/write
LV Status available
LV # 1
# open 0
LV Size 1.98 GB
Current LE 507
Allocated LE 507
Allocation next free
Read ahead sectors 1024
Block device 58:0
这样的话,LV就已经建立了。
step 5] 格式化LV
[root@localhost flagonxia]# mke2fs -j /dev/xboxvg/xboxlv
--可以用另一条命令:mkfs.ext3 /dev/xboxvg/xboxlv
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
259584 inodes, 519168 blocks
25958 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16224 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 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost flagonxia]# mkdir /mnt/lvm
[root@localhost flagonxia]# mount -t ext3 /dev/xboxvg/xboxlv /mnt/lvm
[root@localhost lvm]# df /mnt/lvm
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/xboxvg/xboxlv 2044048 32828 1907388 2% /mnt/lvm
总而言之,创建LV需要以下几个步骤:
1)create a partition with the right flag/code (8e);
2)Assign the partition as a Physical Volume (PV);
3)Use one or more PVs as a Volume Group (VG);
4)Use space from a VG as a Logical Volume (LV);
5)Format the LV.
三)改变LV的大小 (Resize the LV)
我们已经建立了一个VG:pspvg,它有2G的空间。利用它,我们建立一个500M的LV:psplv。
[root@localhost flagonxia]# lvcreate -L 500M pspvg -n psplv
[root@localhost mnt]# lvdisplay /dev/pspvg/psplv
--- Logical volume ---
LV Name /dev/pspvg/psplv
VG Name pspvg
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 500 MB
Current LE 125
Allocated LE 125
Allocation next free
Read ahead sectors 1024
Block device 58:1
-- 为psplv增加200M的空间
-- 之前我们已经将psplv挂载到了/mnut/test目录。在改变其大小前,先卸载它。
[root@localhost sbin]# umount /mnt/test
[root@localhost sbin]# lvextend -L +200M /dev/pspvg/psplv
lvextend -- extending logical volume "/dev/pspvg/psplv" to 700 MB
lvextend -- doing automatic backup of volume group "pspvg"
lvextend -- logical volume "/dev/pspvg/psplv" successfully extended
[root@localhost sbin]# lvdisplay /dev/pspvg/psplv
--- Logical volume ---
LV Name /dev/pspvg/psplv
VG Name pspvg
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 700 MB
Current LE 175
Allocated LE 175
Allocation next free
Read ahead sectors 1024
Block device 58:1
-- 为psplv减少100M的空间
[root@localhost sbin]# lvreduce -L -100M /dev/pspvg/psplv
lvreduce -- WARNING: reducing active and open logical volume to 600 MB
lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.)
lvreduce -- do you really want to reduce "/dev/pspvg/psplv"? [y/n]: y
lvreduce -- doing automatic backup of volume group "pspvg"
lvreduce -- logical volume "/dev/pspvg/psplv" successfully reduced
[root@localhost sbin]# lvdisplay /dev/pspvg/psplv
--- Logical volume ---
LV Name /dev/pspvg/psplv
VG Name pspvg
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 600 MB
Current LE 150
Allocated LE 150
Allocation next free
Read ahead sectors 1024
Block device 58:1
-- 使用了上面的命令后,用df看/dev/pspvg/psplv所占的大小没有发生变化。我们还要用下面的命令来是LV改变过的大小起作用。
-- 对于resize2fs的使用要说明一下。
-- 1)resize2fs仅支持离线缩小,就是说如果要缩小文件系统(ext3)时,应该先卸载(umount);
-- 2)如果放大文件系统时,无此限制。也就是说可以直接增加已挂载或已卸载的文件系统的大小。
-- 在本例中,文件系统是卸载的状态。
[root@localhost sbin]# resize2fs /dev/pspvg/psplv
resize2fs 1.32 (09-Nov-2002)
Please run 'e2fsck -f /dev/pspvg/psplv' first.
[root@localhost sbin]# e2fsck -f /dev/pspvg/psplv
e2fsck 1.32 (09-Nov-2002)
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/pspvg/psplv: 11/128016 files (0.0% non-contiguous), 24395/512000 blocks
[root@localhost sbin]# resize2fs /dev/pspvg/psplv
[root@localhost mnt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 4.9G 2.3G 2.4G 50% /
/dev/sda1 99M 9.3M 85M 10% /boot
none 504M 0 504M 0% /dev/shm
/dev/xboxvg/xboxlv 2.0G 33M 1.9G 2% /mnt/lvm
/dev/pspvg/psplv 582M 8.3M 544M 2% /mnt/test
四)将LV的挂载信息写入/etc/fstab中
[root@localhost mnt]# vi /etc/fstab
......
-- 加入下面一行
/dev/pspvg/psplv /mnt/test ext3 defaults 1 2
下次开机,用df检查是否mount成功。
[flagonxia@localhost flagonxia]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 4.9G 2.3G 2.4G 50% /
/dev/sda1 99M 9.3M 85M 10% /boot
none 504M 0 504M 0% /dev/shm
/dev/pspvg/psplv 582M 8.3M 544M 2% /mnt/test