设为首页 收藏本站
查看: 229|回复: 0

[经验分享] LVM与snapshot

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-19 08:27:24 | 显示全部楼层 |阅读模式
                      一、LVM简述
LVM(Logical Volume Manager),即逻辑卷管理,它是Linux环境下对磁盘分区进行管理的一种机制。
我们知道,物理磁盘或分区之间是分隔的,数据无法跨盘或分区,而各磁盘或分区的大小固定,重新调整比较麻烦。LVM可以将这些底层的物理磁盘或分区整合起来,抽象成容量资源池,以划分成逻辑卷的方式供上层使用,其最主要的功能即是可以在无需关机无需重新格式化(准确地说,原来的部分无需格式化,只格式化新增的部分)的情况下弹性调整逻辑卷的大小

二、LVM的实现过程
wKiom1YiNIKyRgpuAAIX8dOxaLE732.jpg
                                                                           LVM结构图
将各物理磁盘或分区的系统类型设为Linux LVM,其system ID为8e,通过fdisk工具中的t命令设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[iyunv@localhost ~]# fdisk /dev/sda
...
Command (m for help): n
First cylinder (1593-3916, default 1593):
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): +5G
...
Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 8e   # 指定system ID为8e
Changed system type of partition 5 to 8e (Linux LVM)
...
Command (m for help): p
...
/dev/sda5            1593        2246     5252227+  8e  Linux LVM
/dev/sda6            2247        2900     5253223+  8e  Linux LVM
/dev/sda7            2901        3554     5253223+  8e  Linux LVM
Command (m for help): w
...
[iyunv@localhost ~]# partx -a /dev/sda
...
[iyunv@localhost ~]# kpartx -af /dev/sda
...




将各物理磁盘或分区初始化为PV(physical volume,物理卷),这一阶段可使用的命令为pvcreate、pvremove、pvscan、pvdisplay(pvs)
pvcreate创建物理卷
  用法:pvcreate [option] DEVICE
  选项:
      -f:强制创建逻辑卷,不需用户确认
      -u:指定设备的UUID
      -y:所有问题都回答yes
  例 pvcreate /dev/sda5 /dev/sda6
pvscan:扫描当前系统上的所有物理卷
  用法:pvscan [option]
  选项:
      -e:仅显示属于输出卷组的物理卷
      -n:仅显示不属于任何卷组的物理卷
      -u:显示UUID
pvdisplay:显示物理卷的属性
  用法:pvdisplay [PV_DEVICE]
pvremove:将物理卷信息删除,使其不再被视为一个物理卷
  用法:pvremove [option] PV_DEVICE
  选项:
      -f:强制删除
      -y:所有问题都回答yes
  例 pvremove /dev/sda5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[iyunv@localhost ~]# pvcreate /dev/sda{5,6,7}   # 将三个分区初始化为物理卷
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
[iyunv@localhost ~]# pvscan
  PV /dev/sda5                      lvm2 [5.01 GiB]
  PV /dev/sda6                      lvm2 [5.01 GiB]
  PV /dev/sda7                      lvm2 [5.01 GiB]
  Total: 3 [15.03 GiB] / in use: 0 [0   ] / in no VG: 3 [15.03 GiB]
[iyunv@localhost ~]# pvdisplay /dev/sda5   # 显示物理卷sda5的详细信息
  "/dev/sda5" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda5
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               lrNOS3-8U21-ZS8o-eyKH-HqPn-DLhX-W1ppl4
   
[iyunv@localhost ~]# pvremove /dev/sda7   # 删除sda7的物理卷信息
  Labels on physical volume "/dev/sda7" successfully wiped
[iyunv@localhost ~]# pvscan   # 可以看到PV列表中已无sda7
  PV /dev/sda5   VG myvg   lvm2 [5.01 GiB / 5.01 GiB free]
  PV /dev/sda6   VG myvg   lvm2 [5.01 GiB / 5.01 GiB free]
[iyunv@localhost ~]# pvcreate /dev/sda7
  Physical volume "/dev/sda7" successfully created




创建VG(volume group,卷组)。卷组将多个物理卷整合起来(屏蔽了底层细节),并划分PE(physical extend)PE是物理卷中的最小存储单元,有点类似于文件系统中的block,PE大小可指定,默认为4M。这一阶段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce
vgcreate创建卷组
  用法:vgcreate [option] VG_NAME PV_DEVICE
  选项:
      -s:卷组中的物理卷的PE大小,默认为4M
      -l:卷组上允许创建的最大逻辑卷数
      -p:卷级中允许添加的最大物理卷数
  例 vgcreate -s 8M myvg /dev/sda5 /dev/sda6
vgscan:查找系统中存在的LVM卷组,并显示找到的卷组列表
vgdisplay:显示卷组属性

  用法:vgdisplay [option] [VG_NAME]
  选项:
      -A:仅显示活动卷组的信息
      -s:使用短格式输出信息
vgextend:动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量
  用法:vgextend VG_NAME PV_DEVICE
  例 vgextend myvg /dev/sda7
vgreduce:通过删除LVM卷组中的物理卷来减少卷组容量,不能删除LVM卷组中剩余的最后一个物理卷
  用法:vgreduce VG_NAME PV_DEVICE
vgremove:删除卷组,其上的逻辑卷必须处于离线状态
  用法:vgremove [-f] VG_NAME
  -f:强制删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[iyunv@localhost ~]# vgcreate -s 8M myvg /dev/sda{5,6}   # 使用sda5、sda6创建卷组,指定PE大小为8M
  Volume group "myvg" successfully created
[iyunv@localhost ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2
[iyunv@localhost ~]# vgdisplay   # 查看卷组详细信息
  --- 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               10.02 GiB   # 卷组容量
  PE Size               8.00 MiB
  Total PE              1282   # PE总数
  Alloc PE / Size       0 / 0   # 分配的容量
  Free  PE / Size       1282 / 10.02 GiB   # 空闲的容量
  VG UUID               5zBY8e-5Cgc-HqSo-BOiZ-02NX-77ON-NJSCbN




在卷组上创建LV(logical volume,逻辑卷)。为了便于管理,逻辑卷对应的设备文件保存在卷组目录下,为/dev/VG_NAME/LV_NAME。LV中可以分配的最小存储单元称为LE(logical extend),在同一个卷组中,LE的大小和PE是一样的,且一一对应。这一阶段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize
lvcreate创建逻辑卷或快照
  用法:lvcreate [选项] [参数]
  选项:

      -L:指定大小
      -l:指定大小(LE数)
      -n:指定名称
      -s:创建快照
      -p r:设置为只读(该选项一般用于创建快照中)
  注:使用该命令创建逻辑卷时当然必须指明卷组,创建快照时必须指明针对哪个逻辑卷         
  例 lvcreate -L 500M -n mylv myvg
lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件
lvdisplay:显示逻辑卷属性
  用法:lvdisplay [/dev/VG_NAME/LV_NAME]
lvextend:可在线扩展逻辑卷空间

  用法:lvextend -L/-l 扩展的大小 /dev/VG_NAME/LV_NAME  
  选项:
      -L:指定扩展(后)的大小。例如,-L +800M表示扩大800M,而-L 800M表示扩大至800M
      -l:指定扩展(后)的大小(LE数)
  例 lvextend -L 200M /dev/myvg/mylv
lvreduce:缩减逻辑卷空间,一般离线使用
  用法:lvexreduce -L/-l 缩减的大小 /dev/VG_NAME/LV_NAME  
  选项:
      -L:指定缩减(后)的大小
      -l:指定缩减(后)的大小(LE数)
  例 lvreduce -L 200M /dev/myvg/mylv
lvremove:删除逻辑卷,需要处于离线(卸载)状态
  用法:lvremove [-f] /dev/VG_NAME/LV_NAME
  -f:强制删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@localhost ~]# lvcreate -L 500M -n mylv myvg   # 创建大小为500M、名为mylv的逻辑卷
  Rounding up size to full physical extent 504.00 MiB
  Logical volume "mylv" created
[iyunv@localhost ~]# lvscan
  ACTIVE            '/dev/myvg/mylv' [504.00 MiB] inherit
[iyunv@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                0fPpO3-gVaI-ZKqi-xHnc-uaHk-u6of-i5wds7
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-10-18 22:05:18 +0800
  LV Status              available
  # open                 0
  LV Size                504.00 MiB
  Current LE             63
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0




格式化逻辑卷并挂载,这一阶段就不再赘述了
1
2
3
4
5
6
7
8
9
10
11
[iyunv@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv
...
Writing inode tables: done                           
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
...
[iyunv@localhost ~]# mkdir /data
[iyunv@localhost ~]# mount /dev/myvg/mylv /data
[iyunv@localhost ~]# cp /etc/inittab /data
[iyunv@localhost ~]# ls /data
inittab  lost+found




三、LVM的写入模式
LVM有两种写入模式:线性模式和条带模式。线性模式写完一个设备后再写另一个设备,条带模式就有点类似于RAID0,即数据是被分散写入到LVM各成员设备上的。因为条带模式的数据不具有安全性,且LVM并不强调读写性能,故LVM默认为线性模式,这样即使一个设备坏了,其它设备上的数据还在

四、文件系统的扩展和缩减
我们知道,文件系统在创建时是分成多个块组(block group)的,因此文件系统的增减实际上就是以增减块组的方式实现的
在linux中,ext系列格式的文件系统是可以扩展和缩减的,而xfs格式的目前只能扩展
1、扩展文件系统
①先确定扩展的目标大小,并确保对应卷组中有足够的空闲空间可用。如果不够,可先通过vgextend命令扩大卷组容量
    vgextend myvg /dev/sda7
②扩展逻辑卷
    lvextend -L  4G /dev/myvg/mylv     
③扩展文件系统
    resize2fs为ext系列文件系统大小的调整工具用法为:resize2fs 文件系统所对应的设备文件名 [大小]
    resize2fs /dev/myvg/mylv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[iyunv@localhost ~]# vgextend myvg /dev/sda7   # 假如卷组容量不够,扩展文件系统之前先扩展卷组
  Volume group "myvg" successfully extended
[iyunv@localhost ~]# lvextend -L +300M /dev/myvg/mylv
  Rounding size to boundary between physical extents: 304.00 MiB
  Snapshot origin volumes can be resized only while inactive: try lvchange -an
  Run `lvextend --help' for more information.
[iyunv@localhost ~]# umount /dev/myvg/mylv_snap
[iyunv@localhost ~]# lvremove /dev/myvg/mylv_snap  # 要增减逻辑卷,需要先删除对对应的快照卷
Do you really want to remove active logical volume mylv_snap? [y/n]: y
  Logical volume "mylv_snap" successfully removed
[iyunv@localhost ~]# lvextend -L +300M /dev/myvg/mylv   # 逻辑卷扩大300M
  Rounding size to boundary between physical extents: 304.00 MiB
  Extending logical volume mylv to 808.00 MiB
  Logical volume mylv successfully resized
[iyunv@localhost ~]# resize2fs /dev/myvg/mylv   # 扩展文件系统
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/myvg/mylv to 827392 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 827392 blocks long.

[iyunv@localhost ~]# df -h   # 显示容量确实已扩大
...
/dev/mapper/myvg-mylv  783M   11M  732M   2% /data




2、缩减很危险,要离线
①先确定缩减后的目标大小,并确保对应的目标逻辑卷大小足够容纳原有数据
②先卸载文件系统,并要执行强制检测
    e2fsck -f
③缩减文件系统
    resize2fs DEVICE    例如,resize2fs /dev/myvg/mylv 3G   缩减至3G
④缩减逻辑卷
    lvreduce -L 3G /dev/myvg/mylv
注:当逻辑卷有快照时是不能扩展和缩减的,除非先将快照删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[iyunv@localhost ~]# umount /dev/myvg/mylv   # 缩减文件系统之前要先卸载
[iyunv@localhost ~]# e2fsck -f /dev/myvg/mylv   # 检测文件系统
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
/dev/myvg/mylv: 12/206848 files (0.0% non-contiguous), 36856/827392 blocks
[iyunv@localhost ~]# resize2fs /dev/myvg/mylv 500M   # 缩减文件系统至500M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 512000 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 512000 blocks long.
[iyunv@localhost ~]# lvreduce -L 500M /dev/myvg/mylv   # 缩减逻辑卷至500M
  Rounding size to boundary between physical extents: 504.00 MiB
  WARNING: Reducing active and open logical volume to 504.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Reducing logical volume mylv to 504.00 MiB
  Logical volume mylv successfully resized
[iyunv@localhost ~]# mount /dev/myvg/mylv /data   # 重新挂载
[iyunv@localhost ~]# df -h   # 显示容量确实已减小
...
/dev/mapper/myvg-mylv  485M   11M  449M   3% /data

[iyunv@localhost ~]# vgremove myvg
Do you really want to remove volume group "myvg" containing 1 logical volumes? [y/n]: y
  Logical volume myvg/mylv contains a filesystem in use.
[iyunv@localhost ~]# umount /dev/myvg/mylv   # 删除卷组前,必先确认其上的逻辑卷为离线状态
[iyunv@localhost ~]# vgremove myvg
Do you really want to remove volume group "myvg" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed
  Volume group "myvg" successfully removed




五、snapshot(快照)
snapshot是像照相一样将当前的系统信息保存下来。
当创建一个snapshot的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,原始数据被移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是没有修改过的块,那么会将读操作直接重定向到原始卷上,如果是已经修改过的块,那么就读取拷贝到snapshot中的块。
■创建快照卷:
   lvcreate [选项] [参数]
   选项:
       -L:指定大小
       -l:指定大小(LE数)
       -n:指定名称
       -s:创建快照
       -p r:设置为只读
例如 lvcreate -s -L 512M -n mylv_snap -p r /dev/myvg/mylv   # 针对逻辑卷mylv创建大小为512M的只读快照
注:创建快照前需将针对的逻辑卷临时改为只读,创建完毕后再改为读写,例如
  创建快照前:mount -o remount,ro /dev/myvg/mylv /data
  创建快照后:mount -o remount,rw /dev/myvg/mylv /data
1
2
3
4
5
6
7
8
9
10
11
[iyunv@localhost ~]# mount -o remount,ro /dev/myvg/mylv /data   # 创建快照卷之前先将对应的逻辑卷改为只读
[iyunv@localhost ~]# lvcreate -s -L 512M -n mylv_snap /dev/myvg/mylv  # 创建大小为512M的快照
  Logical volume "mylv_snap" created
[iyunv@localhost ~]# mount -o remount,rw /dev/myvg/mylv /data   # 将逻辑卷改回为读写
[iyunv@localhost ~]# mount /dev/myvg/mylv_snap /mnt
[iyunv@localhost ~]# df -h   # 可以看到快照和其对应的逻辑卷显示的参数值一样
...
/dev/mapper/myvg-mylv       489M   11M  453M   3% /data
/dev/mapper/myvg-mylv_snap  489M   11M  453M   3% /mnt
[iyunv@localhost ~]# ls /mnt
inittab  lost+found




                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-128439-1-1.html 上篇帖子: nfs配置、 下篇帖子: linux文件之touch命令及文件时间戳
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表