作者: reistlin
来源: http://www.reistlin.com/blog/18
更新时间: 2009.03
版权声明: 原创文章.转载请保留作者信息和原文完整.谢绝任何方式的摘要

debian.png

1. LVM 介绍:

LVM - Logical Volume Manager 是Linux系统下最强大的磁盘管理技术之一.它将您从不得不思考物理容量中解脱出来.代之以逻辑形式来思考这些容量.当您需要考虑如何替用户数据和系统文件分配空间的时候.LVM可以让您彻底忘记传统的分区做法.

简单地来说.LVM就是将众多物理设备组合成一个大的虚拟设备.用户只需思考如何在虚拟设备上做传统的空间分配策略.而将物理设备的管理交由LVM自己去处理.这个由物理设备组合所成的虚拟设备称为卷组(Volume Group).简称为VG.而用户在卷组VG上所划分的磁盘空间则称为逻辑卷(Logical Volume).简称为LV.而原始物理设备必须经过初始化处理才能加入卷组集合.这种经过特别处理的原始设备或磁盘空间则称为物理卷(Physical Volume).简称为PV.

LVM磁盘空间管理系统允许您在需要的时候重新调整大小.这也就意味着在管理磁盘空间资源方面.您将获得极大程度的自由.基本上这是很有诱惑力的.但您应该留心硬盘出错的情况.如果您没有在LVM管理中为出现这种情况而做好计划.那么您可能会丢失大量数据.

2. LVM 术语:

PV - Physical Volume - 物理卷.例如一个硬盘.或一个Software RAID设备
VG - Volume Group - 卷组.将一组物理卷收集为一个管理单元
LV - Logical Volume - 逻辑卷.等同于传统分区.可看作便准的块设备.以容纳文件系统
PE - Physical Extent - 物理块.划分物理卷的数据块
LE - Logical Extent - 逻辑块.划分逻辑卷的数据块

3, LVM 结构:

为了让大家了解关于LVM的概念和结构.实现方式等.小雷花了整整一天时间画了一个图.
突然发现自己的"设计"水准很前卫很潮流. (谁说图片不好看谁就不要看文章了! :-))

lvm.png

说明: /boot 这个挂载分区不能存在于VG卷组里.所以我们一般是建议单独分区.

使用LVM的基本步骤如下:

1. 安装lvm2 ( apt-get install lvm2 )

2. 使用fdisk分区指定的物理硬盘

3. 使用lvm管理工具进行lvm配置 (建立PV / VG / LV)

4. 格式化已经设置好的LV逻辑卷.挂载到指定目录.

5. 关于如何增加/删除/修改LV逻辑卷大小.请期待第2季.

4. LVM 串联和条带化:

串联 (Concatenation)
按顺序使用磁盘. 一个磁盘使用完以后使用后续的磁盘.

lvm_concatenation.png

条带化 (Striping)
交替使用不同磁盘的空间. IO操作并行. 能够提高IO性能. Striping是RAID的基础.

lvm_striping.png

5. LVM 配置步骤:

5.1 使用 fdisk 对 /dev/sdb 分区

Debian:/home/reistlin# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x4e896764.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): new
Command action
e   extended
p   primary partition (1-4)

p

Partition number (1-4): 1
First cylinder (1-512, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-512, default 512):
Using default value 512

Command (m for help): m
Command action
a   toggle a bootable flag
b   edit bsd disklabel
c   toggle the dos compatibility flag
d   delete a partition
l   list known partition types
m   print this menu
n   add a new partition
o   create a new empty DOS partition table
p   print the partition table
q   quit without saving changes
s   create a new empty Sun disklabel
t   change a partition's system id
u   change display/entry units
v   verify the partition table
w   write table to disk and exit
x   extra functionality (experts only)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

5.2 查看分区后的物理磁盘信息 - /dev/sdb1 状态正常

Debian:/home/reistlin# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0002db3a

Device Boot         Start         End        Blocks    Id   System
/dev/sda1                1       1033     8297541   83  Linux
/dev/sda2             1034       1305     2184840   82  Linux swap / Solaris

Disk /dev/sdb: 1073 MB, 1073741824 bytes
128 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 4096 * 512 = 2097152 bytes
Disk identifier: 0x4e896764

Device Boot         Start         End      Blocks      Id   System
/dev/sdb1                1        512     1048560   83  Linux

5.3 进入 LVM 模式

Debian:/home/reistlin# lvm

5.4 查看 LVM 磁盘状态 - 目前没有任何 LVM 磁盘信息

lvm> lvmdiskscan

/dev/ram0  [        8.00 MB]
/dev/ram1  [        8.00 MB]
/dev/root   [        7.91 GB]
/dev/ram2  [        8.00 MB]
/dev/sda2  [        2.08 GB]
/dev/ram3  [        8.00 MB]
/dev/ram4  [        8.00 MB]
/dev/ram5  [        8.00 MB]
/dev/ram6  [        8.00 MB]
/dev/ram7  [        8.00 MB]
/dev/ram8  [        8.00 MB]
/dev/ram9  [        8.00 MB]
/dev/ram10 [        8.00 MB]
/dev/ram11 [        8.00 MB]
/dev/ram12 [        8.00 MB]
/dev/ram13 [        8.00 MB]
/dev/ram14 [        8.00 MB]
/dev/ram15 [        8.00 MB]
/dev/sdb    [        1.00 GB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes

# 查看 LVM 配置文件 - dump 模式

lvm> dumpconfig
devices {
dir="/dev"
scan="/dev"
preferred_names=[]
filter="a/.*/"
cache_dir="/etc/lvm/cache"
cache_file_prefix=""
write_cache_state=1
sysfs_scan=1
md_component_detection=1
ignore_suspended_devices=0
}
activation {
missing_stripe_filler="/dev/ioerror"
reserved_stack=256
reserved_memory=8192
process_priority=-18
mirror_region_size=512
readahead="auto"
mirror_log_fault_policy="allocate"
mirror_device_fault_policy="remove"
}
global {
umask=63
test=0
units="h"
activation=1
proc="/proc"
locking_type=1
fallback_to_clustered_locking=1
fallback_to_local_locking=1
locking_dir="/var/lock/lvm"
}
shell {
history_size=100
}
backup {
backup=1
backup_dir="/etc/lvm/backup"
archive=1
archive_dir="/etc/lvm/archive"
retain_min=10
retain_days=30
}
log {
verbose=0
syslog=1
overwrite=0
level=0
indent=1
command_names=0
prefix=" "
}

# 创建 Physical Volume (PV)

lvm> pvcreate
Please enter a physical volume path
lvm> pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

# 查看 Physical Volume (PV) 状态

lvm> pvdisplay
CTRL-c detected: giving up waiting for lock
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg_test
PV Size 1023.98 MB / not usable 3.98 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 255
Free PE 0
Allocated PE 255
PV UUID SwfyW5-veGN-1Ptd-VIUo-0I3I-CdVB-QF7BwC

# 再次查看 LVM 磁盘状态

lvm> lvmdiskscan
/dev/ram0 [ 8.00 MB]
/dev/ram1 [ 8.00 MB]
/dev/root [ 7.91 GB]
/dev/ram2 [ 8.00 MB]
/dev/sda2 [ 2.08 GB]
/dev/ram3 [ 8.00 MB]
/dev/ram4 [ 8.00 MB]
/dev/ram5 [ 8.00 MB]
/dev/ram6 [ 8.00 MB]
/dev/ram7 [ 8.00 MB]
/dev/ram8 [ 8.00 MB]
/dev/ram9 [ 8.00 MB]
/dev/ram10 [ 8.00 MB]
/dev/ram11 [ 8.00 MB]
/dev/ram12 [ 8.00 MB]
/dev/ram13 [ 8.00 MB]
/dev/ram14 [ 8.00 MB]
/dev/ram15 [ 8.00 MB]
/dev/sdb1 [ 1023.98 MB] LVM physical volume
1 disk
17 partitions
0 LVM physical volume whole disks
1 LVM physical volume

# 创建 Volume Group (VG)

lvm> vgcreate vg_test
Please enter physical volume name(s)
lvm> vgcreate vg_test /dev/sdb1
Volume group "vg_test" successfully created

# 查看 Volume Group (VG) 状态

lvm> vgdisplay
--- Volume group ---
VG Name vg_test
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1020.00 MB
PE Size 4.00 MB
Total PE 255
Alloc PE / Size 0 / 0
Free PE / Size 255 / 1020.00 MB
VG UUID Dbm7gQ-HDao-0z2Z-2u3q-XK9A-bmEv-ES3qC0

# 创建 Logical Volume (LV) 如果需要指定VG空间. 输入 -l <Total PE> 的值.
# <Total PE> 的值可以使用 vgdisplay 命令查看 (Total PE = 255)
# 如果需要使用全部VG空间. 输入 -l 100%FREE

lvm> lvcreate -l 255 vg_test -n lv_test
Logical volume "lv_test" created

# 查看 Logical Volume (LV) 状态

lvm> lvdisplay
--- Logical volume ---
LV Name /dev/vg_test/lv_test
VG Name vg_test
LV UUID l3GUct-M3nG-m837-wOe2-4EWo-ZPU6-xskaq8
LV Write Access read/write
LV Status available
# open 0
LV Size 1020.00 MB
Current LE 255
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0

# 输入 exit 退出 LVM 配置模式. Ext3 格式化 lv_test 逻辑卷

Debian:/home/reistlin# mkfs -t ext3 -j /dev/vg_test/lv_test
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
65280 inodes, 261120 blocks
13056 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

# 挂载 lv_test 逻辑卷到 /mnt 目录. 你也可以挂载到 /home 目录

Debian:/home/reistlin# mount /dev/vg_test/lv_test /mnt
Debian:/home/reistlin# cd /mnt

# 测试文件读写. Reistlin.Com. OKay.

Debian:/mnt# vim Reistlin.Com
Welcome to Reistlin.Com

Debian:/mnt# cat Reistlin.Com
Welcome to Reistlin.Com

标签: debian, lvm, linux