Linux入门系列——LVM逻辑卷管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux入门系列——LVM逻辑卷管理相关的知识,希望对你有一定的参考价值。

参考技术A

将多个底层的物理设备,在内核中抽象成/dev/md# ,所有的调配工作都由内核中的md来实现的;

DM的功能要比MD要强大;比如LVM2,快照,多路径;还可以实现动态增减。

在创建LVM的时候,要先创建好PV,再来创建GV,最后创建LV,格式化并挂载;

先把要创建成PV的块设备的分区类型修改为Linux LVM类型,对应的十六进制码是: 8e

使用fdisk 创建了/dev/sdb11 /dev/sdb12 /dev/sdb13这三个分区,并且已经修改好了分区类型;这里要注意的是fdisk命令最多只支持分15个分区;

下面就是把创建好的三个物理分区,创建成PV:

查看系统创建好的PV,可以使用pvdisplay和pvs命令:

语法:vgcreate vg_name /dev/sdb[12345678]

查看创建好的VG:

语法:lvcreate -n lv_name -L [+]size vg_name

查看创建的LV

从上面格式化的路径可以看出,LVM设备的路径为:/dev/vg_name/lv_name ,那么再来看看挂载后的路径:

关于LVM扩容、缩容的操作将会在下一篇介绍。

Linux入门之磁盘管理LVM逻辑卷案例

Linux入门之磁盘管理(9)LVM逻辑卷案例

案例介绍阶段(1):

创建一个由两个物理卷组成的大小未20G的卷组myvg,要求其PE大小为16M;而在此卷组中创建一个大小未5G的逻辑卷lvtest,此逻辑卷要能在开机后自动挂载至/mnt/lvtest目录,且支持ACL功能。

 

1、准备工作

#这里我们分别从两个磁盘选择10G来准备组合为PV

[[email protected] ~]# fdisk -l | grep -o ‘/.*B‘
/dev/sda: 21.5 GB
/dev/sdb: 21.5 GB
/dev/sdc: 21.5 GB
/dev/sdd: 10.7 GB
/dev/sde: 10.7 GB

#这里我们选择从sdb磁盘和sdbc磁盘中分别划分两个10G分区进行组合

[[email protected] ~]# fdisk -l | grep ‘^/dev/sd[bc][0-9]‘
/dev/sdb1             1        1306    10490413+  8e  Linux LVM
/dev/sdc1             1        1306    10490413+  8e  Linux LVM

注意:这里使用fdisk进行的新增分区,在创建分区后,最后使用t子命令转换为8e表示分区类型为Linux LVM,表示LVM专用。

#显示刚才的210G分区

[[email protected] ~]# lsblk | grep -o ‘sd[bc]1.*‘
sdb1   8:17   0   10G  0 part 
sdc1   8:33   0   10G  0 part


2、创建pv物理卷

#将两个分区创建为pv物理卷

[[email protected] ~]# pvcreate /dev/sd{b,c}1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created

#查看pv物理卷

[[email protected] ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1       lvm2 ---- 10.00g 10.00g
  /dev/sdc1       lvm2 ---- 10.00g 10.00g

#扫描pv

[[email protected] ~]# pvscan 
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  PV /dev/sdc1                      lvm2 [10.00 GiB]
  Total: 2 [20.01 GiB] / in use: 0 [0   ] / in no VG: 2 [20.01 GiB]

解析:这里显示了当前pv总大小未20G,分别为两个10G pv组成,并且未使用,下面对其创建vg卷组。

 

3、创建vg组给指定pv分配PE

#指定vg组分配的PE大小每个为16M

[[email protected] ~]# vgcreate -s 16 myvg /dev/sd{b,c}1
  Volume group "myvg" successfully created

#查看当前vgmyvg中有2PV,总大小为20G

[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   0   0 wz--n- 20.00g 20.00g

#扫描为假,正在分配PE

[[email protected] ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2

#查看PV,以及显示被分配了VG组为myvg

[[email protected] ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1  myvg lvm2 a--u 10.00g 10.00g
  /dev/sdc1  myvg lvm2 a--u 10.00g 10.00g

#使用vgdisplay显示其分配的PE相关信息

[[email protected] ~]# vgdisplay myvg | grep -io ‘\(pe\|vg\).*size.*‘
VG Size               20.00 GiB
PE Size               16.00 MiB
PE / Size       0 / 0   
PE / Size       1280 / 20.00 GiB

解析:这里显示每个PE占用大小为16M,总共有1280个分区,0个使用。

 

4、创建一个5G 的lv逻辑卷

#创建lv逻辑卷大小未5G,逻辑卷名称为lvtest

[[email protected] ~]# lvcreate -n lvtest -L 5G myvg
  Logical volume "lvtest" created.

#扫描LV,显示分配了5G

[[email protected] ~]# lvscan
  ACTIVE            ‘/dev/myvg/lvtest‘ [5.00 GiB] inherit

#显示lv列表

[[email protected] ~]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest myvg -wi-a----- 5.00g

#再次查看vg列表,发现LV列中为1,表示myvg组中有1个逻辑卷,剩余15G

[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   1   0 wz--n- 20.00g 15.00g

 

6、创建文件系统,添加测试数据

#格式化为ext4文件系统

[[email protected] ~]# mke2fs -t ext4 -L lvtest /dev/myvg/lvtest

#测试是否已经被分配了UUID

[[email protected] ~]# blkid /dev/myvg/lvtest 
/dev/myvg/lvtest: LABEL="lvtest" UUID="8b5e3d38-33ed-40b3-a53b-d7b039099378" TYPE="ext4"

#挂载分区

[[email protected] ~]# mkdir /mnt/lvtest; mount /dev/myvg/lvtest /mnt/lvtest

#查看分区占用大小及总大小

[[email protected] ~]# df -Ph | grep ‘/mnt/lvtest‘
/dev/mapper/myvg-lvtest  4.8G   10M  4.6G   1% /mnt/lvtest

#添加测试数据

[[email protected] ~]# cp /etc/issue /mnt/lvtest/
[[email protected] ~]# cat /mnt/lvtest/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m

#修改文件数据

[[email protected] ~]# echo ‘************‘ >> /mnt/lvtest/issue 
[[email protected] ~]# cat /mnt/lvtest/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************


7、设置自动挂载

#使用vim编辑/etc/fstab配置文件

[[email protected] ~]# vim /etc/fstab

技术分享 

#读出lvtestUUIDtype信息写入到文件

技术分享 

#添加额外功能acl

[[email protected] ~]# grep ‘/mnt/lvtest‘ /etc/fstab
UUID="8b5e3d38-33ed-40b3-a53b-d7b039099378" /mnt/lvtest ext4   defaults,acl  0 0

#刚才进行了挂载,因此先卸载,去重读fstab配置

[[email protected] ~]# umount /dev/myvg/lvtest

#查看lvtest逻辑卷是否已经启用了acl功能

[[email protected] ~]# mount | grep ‘.*lvtest‘
/dev/mapper/myvg-lvtest on /mnt/lvtest type ext4 (rw,acl)

 

案例介绍阶段(2):

新建用户archlinux,要求其家目录为/mnt/lvtest/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

 

8、添加文件及用户设置

#添加用户archlinux并设置指定目录为其家目录

[[email protected] ~]# useradd -d /mnt/lvtest/archlinux archlinux && echo "123456" | passwd --stdin archlinux
Changing password for user archlinux.
passwd: all authentication tokens updated successfully.

#切换用户

[[email protected] ~]# su - archlinux

#查看当前登录用户

[[email protected] ~]$ whoami
archlinux

#查看当前所在目录

[[email protected] ~]$ pwd
/mnt/lvtest/archlinux

#拷贝目录

[[email protected] ~]$ cp -r /etc/pam.d/ /mnt/lvtest/archlinux/

#查看目录中的文件个数,有57

[[email protected] ~]$ ls /mnt/lvtest/archlinux/pam.d/ | sed -n ‘$=‘
57

 

案例介绍阶段(3):

扩展testlv至7G,要求archlinux用户的文件不能丢失

 

准备工作:

#查看分区的占用大小,只用了11M,总4.8G,剩余4.6G

[[email protected] ~]# df -Ph | grep ‘lvtest‘
/dev/mapper/myvg-lvtest  4.8G   11M  4.6G   1% /mnt/lvtest

#查看lv逻辑卷总大小为5G

[[email protected] ~]# lvs /dev/myvg/lvtest 
  LV     VG   Attr  LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest myvg -wi-ao---- 5.00g

#查看myvg卷组中还预留剩余15G空间可用于扩展  

[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   1   0 wz--n- 20.00g 15.00g

进行扩展:

#扩展逻辑卷大小,由上面得知lvtest原本为5G,扩展到7G加上2G即可

[[email protected] ~]# lvextend -L +2G /dev/myvg/lvtest 
  Size of logical volume myvg/lvtest changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
  Logical volume lvtest successfully resized.

#再次查看lvtest逻辑卷大小,已经变成了5G

[[email protected] ~]# lvs /dev/myvg/lvtest 
  LV     VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest myvg -wi-ao---- 7.00g

#查看物理大小,发现并未改变

[[email protected] ~]# df -Ph | grep ‘lvtest‘
/dev/mapper/myvg-lvtest  4.8G   11M  4.6G   1% /mnt/lvtest

#重新设置物理卷大小为扩展到7G

[[email protected] ~]# resize2fs /dev/myvg/lvtest 7G
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/lvtest is mounted on /mnt/lvtest; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/lvtest to 1835008 (4k) blocks.
The filesystem on /dev/myvg/lvtest is now 1835008 blocks long.

#再次查看,总大小6.8G,显示的一些小误差而已,已经扩展成功

[[email protected] ~]# df -Ph | grep ‘lvtest‘
/dev/mapper/myvg-lvtest  6.8G   12M  6.5G   1% /mnt/lvtest

#下面检查文件数据是否损坏和丢失,查看刚才修改的issue文件

[[email protected] ~]# cat /mnt/lvtest/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************

#查看拷贝的pam.d目录下的文件个数,任然是57个没有丢失

[[email protected] ~]# ls /mnt/lvtest/archlinux/pam.d | sed -n ‘$=‘
57

 

案例介绍阶段(4)

收缩testlv至3G,要求archlinux用户的文件不能丢失


准备工作

#必须先卸载,否则缩减会失败

[[email protected] ~]# umount /dev/myvg/lvtest

#必须先检查文件系统是否完好

[[email protected] ~]# e2fsck -f /dev/myvg/lvtest 
e2fsck 1.41.12 (17-May-2010)
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
lvtest: 80/458752 files (0.0% non-contiguous), 64511/1835008 blocks

#上次查看得知分区剩余6.5G,占用了11M,缩减到3G,是够的,下面缩减物理卷

[[email protected] ~]# resize2fs /dev/myvg/lvtest 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/lvtest to 786432 (4k) blocks.
The filesystem on /dev/myvg/lvtest is now 786432 blocks long.

#缩减逻辑卷

[[email protected] ~]# lvreduce -L 3G /dev/myvg/lvtest 
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/lvtest? [y/n]: y
  Size of logical volume myvg/lvtest changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume lvtest successfully resized.

注意:缩减逻辑会提示警告可能会有损数据,当然准备好上面的准备工作来降低缩减失败率,最后在缩减前先将其分区中文件进行备份。

#再次查看逻辑卷大小,已经缩减到3G

[[email protected] ~]# lvs /dev/myvg/lvtest 
  LV     VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest myvg -wi-a----- 3.00g

#再次挂载

[[email protected] ~]# mount -a

#物理卷也被缩减改为3G左右

[[email protected] ~]# df -Ph | grep ‘lvtest‘
/dev/mapper/myvg-lvtest  2.9G  7.8M  2.7G   1% /mnt/lvtest

#检查分区中数据是否损坏和缺少,issue文件内容完整

[[email protected] ~]# cat /mnt/lvtest/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************

#查看pam.d目录中文件个数,仍然是57

[[email protected] ~]# ls /mnt/lvtest/archlinux/pam.d/ | wc -l 
57


案例介绍阶段(5)

对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

 

创建快照卷

#创建一个3G大小的基于lvtest逻辑卷的快照卷,并设置为只读

[[email protected] ~]# lvcreate -n lvtest-sanp -L 3G -p r -s /dev/myvg/lvtest 
  Logical volume "lvtest-sanp" created.

#查看lvs,这里显示它们在同一个vg

[[email protected] ~]# lvs
  LV       VG   Attr      LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest    myvg owi-aos---     3.00g                                                    
  lvtest-sanp  myvg sri-a-s---  3.00g      lvtest 0.00

注意:Attr属性那列中lvtest中为owi,而lvtest-sanp快照卷为sri,表示为快照


使用快照卷

#挂载快照卷

[[email protected] ~]# mkdir /mnt/lvtest-sanp && mount /dev/myvg/lvtest-sanp /mnt/lvtest-sanp 
mount:block device /dev/mapper/myvg-lvtest--sanp is write-protected, mounting read-only

#查看快照卷数据文件

[[email protected] ~]# cat /mnt/lvtest-sanp/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************

#查看pam.d目录下文件任然为57

[[email protected] ~]# ls /mnt/lvtest-sanp/archlinux/pam.d/ | grep -n $ | tail -1 | cut -d: -f1
57

#下面修改原逻辑卷中文件数据

[[email protected] ~]# echo {1..10} > /mnt/lvtest/issue
[[email protected] ~]# cat !$
cat /mnt/lvtest/issue
1 2 3 4 5 6 7 8 9 10

#删除原逻辑卷中pam.d目录下几个文件

[[email protected] ~]# rm -f /mnt/lvtest/archlinux/pam.d/c*

#原逻辑卷中pam.d文件夹只有51个文件了

[[email protected] ~]# ls /mnt/lvtest/archlinux/pam.d/ | wc -l
51

#下面查看快照卷中数据issue文件,并未改变

[[email protected] ~]# cat /mnt/lvtest-sanp/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************

#查看快照卷中的pam.d目录是否还是57

[[email protected] ~]# ls /mnt/lvtest-sanp/archlinux/pam.d/ | wc -l
57

 

下面我们将逻辑卷中的数据还原

#备份快照卷数据

[[email protected] ~]# tar -jcf /tmp/lvtest.tar.bz2 /mnt/lvtest-sanp/
tar: Removing leading `/‘ from member names

#查看备份文件已经生成

[[email protected] ~]# ls -l /tmp/lvtest.tar.bz2 
-rw-r--r--. 1 root root 3849 Aug 18 22:30 /tmp/lvtest.tar.bz2

#还原文件及目录结构

[[email protected] lvtest]# tar -jxf /tmp/lvtest.tar.bz2 -C ./ 
[[email protected] lvtest]# ls
mnt
[[email protected] lvtest]# mv mnt/lvtest-sanp/* ./
[[email protected] lvtest]# rmdir mnt/lvtest-sanp/

解析:默认tar命令会保存全路径,所有要进行目录结构调整,当然也可以可以切换到指定目录下进行打包压缩,更方便使用目录结构

#查看文件内容,已经恢复到了原来逻辑卷中的数据状态

[[email protected] lvtest]# ls
archlinux  issue  lost+found  mnt
[[email protected] lvtest]# cat issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
************
[[email protected] lvtest]# ls archlinux/pam.d/ | wc -l
57

解析:这里表示已经完全还原回来了,原来快照卷只从被创建,里面的文件就只是保存原本未改变的数据,如果原文件被改变,那么快照卷卷就会将原文件未改变的数据存入快照卷,实际上快照卷无需很多,里面只是存放被改变的文件后删除文件后原来的文件内容或文件结构。因此快照卷只是做了一个原数据保留。

本文出自 “神剑特兰克斯” 博客,请务必保留此出处http://mengzhaofu.blog.51cto.com/10085198/1845375

以上是关于Linux入门系列——LVM逻辑卷管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux入门之磁盘管理LVM逻辑卷的使用

lvm(逻辑卷管理)最全案例解析

LINUX逻辑卷(LVM)管理与逻辑卷分区

逻辑卷管理(LVM)

LInux磁盘管理:LVM逻辑卷

Linux磁盘管理,使用LVM逻辑卷来管理我们的磁盘