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
转载于:https://blog.51cto.com/laizetian/1705088