机制概述
Linux 磁盘分区大小分配一般难以准确评估,而且分区大小确定之后无法更改,当数据占满分区时,就需要使用磁盘分区工具进行数据的备份以便重新规划分区大小,同时也需要冲洗引导操作系统,因此这不能满足服务器服务的可持续性特性,会造成业务数据的中断。LVM的出现解决的这个难题,LVM 是Linux 下对磁盘分区进行管理的一种机制。通过在物理设备层和文件系统之间增加抽象层,屏蔽下层物理设备(可以是磁盘、磁盘分区、raid)的布局,提供一个抽象的存储卷,在存储卷上建立操作系统。
架构
- 物理存储介质:可以是硬盘分区、整个硬盘、raid阵列或SAN硬盘。物理存储介质需初始化为LVM物理卷,才能和LVM结合使用。
- 物理卷PV:LVM 的基本存储逻辑块,包含了与LVM相关的管理参数。
- 卷组VG:一个VG 由一个或者多个PV组成,在VG 上建立LV。
- 逻辑卷LV:LV 建立在VG 上,在LV 之上再建立文件系统。
- 物理块PE:PV 上可分配的最小的存储单元。默认大小是4MB,但是大小可以调整。
卷管理
卷管理命令一览表:
物理卷管理
- 查看系统装载的磁盘,并使用sdb做测试。
[root@linuxde dev]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000783f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2611 20458496 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_root: 18.9 GB, 18865979392 bytes
255 heads, 63 sectors/track, 2293 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap: 2080 MB, 2080374784 bytes
255 heads, 63 sectors/track, 252 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
- 初始化sdb磁盘为PV。
[root@linuxde dev]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
[root@linuxde dev]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a-- 19.51g 0
/dev/sdb lvm2 --- 10.00g 10.00g
卷组管理
添加PV 到卷组
[root@linuxde dev]# vgcreate datavg /dev/sdb
Volume group "datavg" successfully created
[root@linuxde dev]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup 1 2 0 wz--n- 19.51g 0
datavg 1 0 0 wz--n- 10.00g 10.00g
逻辑卷管理
在卷组上建立LV
[root@linuxde dev]# lvcreate -n lv1 -L 200M datavg
Logical volume "lv1" created
[root@linuxde dev]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 17.57g
lv_swap VolGroup -wi-ao---- 1.94g
lv1 datavg -wi-a----- 200.00m
挂载文件系统
格式化文件系统并挂载文件系统
[root@linuxde dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 4.1G 13G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 424M 7% /boot
[root@linuxde dev]# mount /dev/datavg/lv1 /mnt
mount: you must specify the filesystem type
[root@linuxde dev]# mkf
mkfifo mkfontscale mkfs.cramfs mkfs.ext3 mkfs.ext4dev mkfs.vfat
mkfontdir mkfs mkfs.ext2 mkfs.ext4 mkfs.msdos
[root@linuxde dev]# mkfs.ext4 /dev/datavg/lv1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@linuxde dev]# mount /dev/datavg/lv1 /mnt
[root@linuxde dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 4.1G 13G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 424M 7% /boot
/dev/mapper/datavg-lv1
190M 1.6M 179M 1% /mnt
到此为止,我们就可以操作该文件系统了。
扩展逻辑卷
扩展完LV 后还需要使用resize2fs扩容ext4文件系统。xfs文件系统需要使用xfs_growfs命令,使用方式“xfs_growfs {monit_ponit}”
[root@linuxde dev]# lvextend -L +100M /dev/datavg/lv1
Size of logical volume datavg/lv1 changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume lv1 successfully resized
[root@linuxde dev]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 17.57g
lv_swap VolGroup -wi-ao---- 1.94g
lv1 datavg -wi-ao---- 300.00m
[root@linuxde dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 4.1G 13G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 424M 7% /boot
/dev/mapper/datavg-lv1
190M 1.6M 179M 1% /mnt
[root@linuxde dev]# resize2fs /dev/datavg/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/datavg/lv1 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/datavg/lv1 to 307200 (1k) blocks.
The filesystem on /dev/datavg/lv1 is now 307200 blocks long.
[root@linuxde dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 4.1G 13G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 424M 7% /boot
/dev/mapper/datavg-lv1
287M 2.1M 270M 1% /mnt