LVM(logical volume manager,逻辑卷管理)是linux中对磁盘分区的管理机制。当linux用户在安装linux操作系统的是否没有正确划分分区,或在之后对linux的使用中的对某个分区的空间有更大需求时,可以使用LVM方便地管理磁盘分区。LVM还可以跨越分区对磁盘空间进行调整。
创建物理卷PV(Physical Volume)
PV相当于磁盘的分区,是LVM的基本存储单位
实战创建PV:
[root@bogon ~]# fdisk -l #先查看分区表,确定在那个分区上创建PV
[root@bogon ~]# fdisk /dev/sdb #使用fdisk的交互命令,划分分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
分区号 (1-8,默认 1):
起始 扇区 (0-209712510,默认 0):
Last 扇区 or +扇区 or +size{K,M,G,T,P} (0-209712510,默认 209712510):+10G
分区 1 已设置为 Linux native 类型,大小设为 9.5 GiB
命令(输入 m 获取帮助):n
分区号 (2-8,默认 2):
起始 扇区 (20000000-209712510,默认 20000000):
Last 扇区 or +扇区 or +size{K,M,G,T,P} (20000925-209712510,默认 209712510):+10G
分区 2 已设置为 Linux native 类型,大小设为 9.5 GiB
命令(输入 m 获取帮助):n
分区号 (3-8,默认 3):
起始 扇区 (20000000-209712510,默认 20000000):40000005
It is highly recommended that the third partition covers the whole disk
and is of type `Whole disk'
Last 扇区 or +扇区 or +size{K,M,G,T,P} (40001850-209712510,默认 209712510):+10G
分区 3 已设置为 Linux native 类型,大小设为 9.5 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@bogon ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):L
0 未分配 4 SunOS usr 8 SunOS home 82 Linux swap
1 启动 5 Whole disk 9 SunOS alt secto 83 Linux native
2 SunOS root 6 SunOS stand a SunOS cachefs 8e Linux LVM
3 SunOS swap 7 SunOS var b SunOS reserved fd Linux raid 自动
Hex 代码(输入 L 列出所有代码):8e #使用8e Linux LVM
已将分区“Linux native”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux native”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出所有代码):8e
Consider leaving partition 3 as Whole disk (5),
as SunOS/Solaris expects it and even Linux likes it.
已将分区“Linux native”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
Disk /dev/sdb (Sun disk label): 255 heads, 63 sectors, 13054 cylinders
Units = 扇区 of 1 * 512 bytes
设备 Flag Start End Blocks Id System
/dev/sdb1 0 20000000 10000000 8e Linux LVM
/dev/sdb2 20000925 40000000 9999537+ 8e Linux LVM
/dev/sdb3 40001850 60000000 9999075 8e Linux LVM
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@bogon ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 512000 sda1
8 2 2048000 sda2
8 3 1257472 sda3
8 4 1 sda4
8 5 17149952 sda5
8 16 104857600 sdb
8 17 10000000 sdb1
8 18 9999537 sdb2
8 19 9999075 sdb3
11 0 1048575 sr0
[root@bogon ~]# pvcreate /dev/sdb{2,3} #将sdb2,sdb3分区创建PV
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
[root@bogon ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 lvm2 --- 9.54g 9.54g
/dev/sdb3 lvm2 --- 9.54g 9.54g
[root@bogon ~]# pvdisplay #查看pv详细信息#
"/dev/sdb2" is a new physical volume of "9.54 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 9.54 GiB
Allocatable NO
PE Size 0
Total PE 0 #此时PE为0
Free PE 0
Allocated PE 0
PV UUID qT3omM-3t1n-uYAq-fo9x-B5qz-iDiN-JWYsw7
"/dev/sdb3" is a new physical volume of "9.54 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb3
VG Name
PV Size 9.54 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID sKmGAq-yZ2o-aiRe-15lp-nXhI-0bjf-ODFM9H
[root@bogon ~]# pvscan
PV /dev/sdb2 lvm2 [9.54 GiB]
PV /dev/sdb3 lvm2 [9.54 GiB]
Total: 2 [19.07 GiB] / in use: 0 [0 ] / in no VG: 2 [19.07 GiB]
创建PV小结:
pvcreat:创建PV
pvremove:清除PV中的数据
pvscan:查看PV的信息
pvdisplay:常看PV的详细信息
pvs:查看PV的简单信息
pvmove: pvmove - move physical extents
卷组VG(Volume Group)
卷组相当于磁盘,由一个或多个PV组成,在卷组上可以创建多个逻辑卷LV
实战创建VG
[root@bogon ~]# vgcreate myvg /dev/sdb{2,3}
Volume group "myvg" successfully created
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 0 0 wz--n- 19.07g 19.07g
[root@bogon ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 19.07 GiB
PE Size 4.00 MiB
Total PE 4881
Alloc PE / Size 0 / 0
Free PE / Size 4881 / 19.07 GiB
VG UUID 24YF6v-kHXI-NUSH-l0cy-sHpG-3rdM-mEFl40
[root@bogon ~]# pvdisplay /dev/sdb2
--- Physical volume ---
PV Name /dev/sdb2
VG Name myvg
PV Size 9.54 GiB / not usable 1.17 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2441 #PE不为0
Free PE 2441
Allocated PE 0
PV UUID
创建VG小结:
PE物理块(Physical Extent)是组成PV的基本单元
vgcreat vg_name pv_name:创建VG
-s #:指定PE大小,默认为4M。由实验现象可见,创建了VG后PE的值就不为0了。
vgremove
vgextend:扩展VG,即添加PV
vgreduce:移除PV,使用前pv的数据要先pvmove /pvname,移除数据
vgs
vgdisplay
vgscan
逻辑卷LV(Logical Volume)
相当于磁盘分区,LV建立在VG之上。文件系统建立在LV上。
实战创建LV:
[root@bogon ~]# lvcreate -L 2G -n testlv myvg
Logical volume "testlv" created.
[root@bogon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv myvg -wi-a----- 2.00g
[root@bogon ~]# lvdisplay /dev/myvg/testlv
--- Logical volume ---
LV Path /dev/myvg/testlv
LV Name testlv
VG Name myvg
LV UUID n1Pm9L-2Ek1-nMB8-EA1k-QERy-sTP7-1myA3O
LV Write Access read/write
LV Creation host, time bogon, 2015-10-13 21:37:51 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
# 挂载 #
[root@bogon ~]# mke2fs -j /dev/myvg/testlv
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@bogon ~]# mount /dev/myvg/testlv /mnt
[root@bogon ~]# ls /mnt
lost+found # 挂载成功
[root@bogon ~]# mount
##此处省略##
/dev/sda5 on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda2 on /home type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/myvg-testlv on /mnt type ext3 (rw,relatime,seclabel,data=ordered) # 实际挂载的是 /dev/mapper
[root@bogon ~]# ll /dev/mapper
总用量 0
crw-------. 1 root root 10, 236 10月 13 20:23 control
lrwxrwxrwx. 1 root root 7 10月 13 21:39 myvg-testlv -> ../dm-0
[root@bogon ~]# ll /dev/myvg
总用量 0
lrwxrwxrwx. 1 root root 7 10月 13 21:39 testlv -> ../dm-0
创建LV小结:
lvcreate -n LV_NAME -L #G VG_NAME
lvremove:移除lv,事先要卸载(umount /mnt)
lvextend
lvreduce
lvs
lvdisplay
ll /dev/mapper:查看成功与否
ll /dev/myvg
LVM管理
扩展逻辑卷
我们在使用文件系统之前要先划分分区,即创建物理边界,然后才能在分区中创建文件系统。所以要扩展文件系统时要先扩展物理边界,然后才扩展逻辑卷。扩展逻辑卷一般不会损坏原有数据。
实战扩展逻辑卷:
[root@bogon ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 16G 2.4G 13G 16% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 490M 6.8M 484M 2% /run
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/sda1 477M 79M 370M 18% /boot
/dev/sda2 1.9G 6.4M 1.8G 1% /home
/dev/mapper/myvg-testlv 2.0G 3.1M 1.9G 1% /users
[root@bogon ~]# lvextend -L 5G /dev/mapper/myvg-testlv #扩展逻辑卷
Size of logical volume myvg/testlv changed from 2.00 GiB (512 extents) to 5.00 GiB (1280 extents).
Logical volume testlv successfully resized
[root@bogon ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 16G 2.4G 13G 16% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 490M 6.8M 484M 2% /run
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/sda1 477M 79M 370M 18% /boot
/dev/sda2 1.9G 6.4M 1.8G 1% /home
/dev/mapper/myvg-testlv 2.0G 3.1M 1.9G 1% /users #扩展完,逻辑卷的大小还是不变
[root@bogon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv myvg -wi-ao---- 5.00g #实际上已经扩展完层
[root@bogon ~]# resize2fs -p /dev/myvg/testlv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/testlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/testlv is now 1310720 blocks long.
[root@bogon ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 16G 2.4G 13G 16% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 490M 6.8M 484M 2% /run
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/sda1 477M 79M 370M 18% /boot
/dev/sda2 1.9G 6.4M 1.8G 1% /home
/dev/mapper/myvg-testlv 4.9G 4.1M 4.7G 1% /users
[root@bogon ~]# cd /users
[root@bogon users]# ls
123 lost+found #可以测试事先放在里面的文件123还是可用的
扩展逻辑卷小结:
lvextend -L # /LV_PATH
-L + # /LV =原+#
-L # 扩展到#
resize2fs
resize2fs -p /LV 直接扩展到物理边界一样大
resize2fs -p /LV # 直接扩展到#
缩减逻辑卷
跟扩展逻辑卷相反,缩减文件系统时应先缩减缩减逻辑卷。
缩减逻辑卷小结:
df -lh #查看已用空间,防止缩减太多
umount /mnt
mount
e2fsck -f /dev/myvg/testlv #强制检查,确保文件系统处于一致性状态
resize2fs /dev/myvg/testlv 3G
lvreduce -L 3G /dev/myvg/testlv
mount -a
mount
df -lh
创建快照卷
快照卷可以为linux系统提供简单的数据备份,快照卷为了保护数据的完整性,一般设置为只读的,只能创建在与原卷同一卷组内。
实战创建快照卷:
[root@bogon users]# lvcreate -L 1G -n testlv-snap -s -p r /dev/myvg/testlv #说明:users目录下挂载着一个LV
Logical volume "testlv-snap" created.
[root@bogon users]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv myvg owi-aos--- 5.00g
testlv-snap myvg sri-a-s--- 1.00g testlv 0.00
[root@bogon users]# mount /dev/
[root@bogon users]# mount /dev/myvg/testlv-snap /mnt
mount: /dev/mapper/myvg-testlv--snap 写保护,将以只读方式挂载
[root@bogon mnt]# tar -jcf /tmp/users.tar.bz2 /mnt/inittab
tar: 从成员名中删除开头的“/”
[root@bogon mnt]# ls /tmp
[root@bogon users]# cd /mnt
[root@bogon mnt]# ls
123 lost+found #此时对文件如inittab的修改都不会保存到快照中
[root@bogon ~]# umount /mnt
[root@bogon ~]# lvremove /dev/myvg/testlv-snap
Do you really want to remove active logical volume testlv-snap? [y/n]:y
# 生命周期结束
[root@bogon ~]# cd /users
[root@bogon users]# rm 123
rm:是否删除普通文件 "123"?y
[root@bogon users]# tar xf /tmp/users.tar.bz2 -C ./ # -C 指定解压目录
[root@bogon users]# ls
lost+found 123
创建快照卷小结:
lvcreate -L # n SLVNAME -p r /lvname
-s 创建快照卷
-p r|w 指定权限,一般不指定r