Linux逻辑卷管理LVM

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。
相关概念:
物理卷PV:是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。
逻辑卷LV:一个或者多个物理卷组成一个逻辑卷。
卷组VG:一个或者多个逻辑卷组成一个卷组。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。
物理块PE:物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。
逻辑块LE:逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。
  • 创建物理分区
 
  1. 在使用LVM之前,需要首先划分磁盘分区,也就是用fdisk命令划分磁盘分区,需要指定分区类型为linux LVM,对应的ID为8e(其实LVM也能识别linux默认的分区类型83) 
  2. [root@rhel5 ~]# fdisk -l 
  3. Disk /dev/sda: 21.4 GB, 21474836480 bytes 
  4. 255 heads, 63 sectors/track, 2610 cylinders 
  5. Units = cylinders of 16065 * 512 = 8225280 bytes 
  6.    Device Boot      Start         End      Blocks   Id  System 
  7. /dev/sda1   *           1          13      104391   83  Linux 
  8. /dev/sda2              14          78      522112+  82  Linux swap / Solaris 
  9. /dev/sda3              79        1383    10482412+  8e  Linux LVM 
  10. /dev/sda4            1384        2610     9855877+   5  Extended 
  11. /dev/sda5            1384        1994     4907826   83  Linux 
  12. [root@rhel5 ~]# fdisk -t 8e /dev/sda5 
  • 创建物理卷PV
 
  1. 创建物理卷的命令是pvcreate,通过该命令可以将希望添加到卷组(VG)的所有磁盘分区或者整个磁盘创建为物理卷。使用格式为: 
  2. pvcreate  磁盘分区或整个磁盘 
  3. [root@rhel5 ~]# pvcreate  /dev/sda5  
  4.  Physical volume "/dev/sda5" successfully created 
  • 创建/激活卷组VG
 
  1. 创建卷组的命令是vgcreate,使用格式为: 
  2. vgcreate 卷组名 物理卷 
  3. [root@rhel5 ~]# vgcreate iscsi /dev/sda5 
  4.   Volume group "iscsi" successfully created 
  5. 卷组创建完毕后,可以通过vgchange命令激活卷组,而无需重启系统。Vgchange使用格式如下:
  6. vgchange -a y 卷组名 (激活卷组)
  7. vgchange -a n 卷组名 (停用卷组)
  • 创建逻辑卷LV
 
  1. 创建逻辑卷的命令是lvcreate,常用的使用格式为: 
  2. lvcreate [-L 逻辑卷大小| -l PE数 ] –n 逻辑卷名称  所属的卷组名 
  3. 其中: 
  4. -L:后面接逻辑卷的大小,可以用K、M、G表示。例如100M、10G等 
  5. -l:用PE数来计算逻辑卷的大小。 
  6. [root@rhel5 ~]# lvcreate -n sharedisk -L 2G iscsi 
  7.   Logical volume "sharedisk" created 
  • 显示PV、VG、LV的属性信息
 
  1. [root@rhel5 ~]# pvs 
  2.   PV         VG     Fmt  Attr PSize PFree 
  3.   /dev/sda3  rootvg lvm2 a-   9.97G    0  
  4.   /dev/sda5  iscsi  lvm2 a-   4.68G 4.68G 
  5.  
  6. [root@rhel5 ~]# vgs 
  7.   VG     #PV #LV #SN Attr   VSize VFree 
  8.   iscsi    1   0   0 wz--n- 4.68G 4.68G 
  9.   rootvg   1   1   0 wz--n- 9.97G    0  
  10. [root@rhel5 ~]# lvs 
  11.   LV        VG     Attr   LSize Origin Snap%  Move Log Copy%  Convert 
  12.   sharedisk iscsi  -wi-ao 2.00G                                       
  13.   rootlv    rootvg -wi-ao 9.97G 
  14. 相应的也可通过pvdisplay、vgdisplay、lvdisplay查看更详细的信息
  • 格式化逻辑卷,创建文件系统
 
  1. [root@rhel5 ~]# mkfs.ext3 /dev/iscsi/sharedisk  
  2. mke2fs 1.39 (29-May-2006) 
  3. Filesystem label= 
  4. OS type: Linux 
  5. Block size=4096 (log=2) 
  6. Fragment size=4096 (log=2) 
  7. 262144 inodes, 524288 blocks 
  8. 26214 blocks (5.00%) reserved for the super user 
  9. First data block=0 
  10. Maximum filesystem blocks=536870912 
  11. 16 block groups 
  12. 32768 blocks per group, 32768 fragments per group 
  13. 16384 inodes per group 
  14. Superblock backups stored on blocks:  
  15.         32768, 98304, 163840, 229376, 294912 
  16.  
  17. Writing inode tables: done                             
  18. Creating journal (16384 blocks): done 
  19. Writing superblocks and filesystem accounting information: done 
  20.  
  21. This filesystem will be automatically checked every 38 mounts or 
  22. 180 days, whichever comes first.  Use tune2fs -c or -i to override. 
  23.  
  24. [root@rhel5 ~]# tune2fs -c 0 -i 0 /dev/iscsi/sharedisk  
  25. tune2fs 1.39 (29-May-2006) 
  26. Setting maximal mount count to -1 
  27. Setting interval between checks to 0 seconds 
  28.  
  29. [root@rhel5 ~]#mkdir /data 
  30. [root@rhel5 ~]# mount /dev/iscsi/sharedisk /data/ 
  31. [root@rhel5 ~]# df -h 
  32. 文件系统                    容量  已用 可用   已用% 挂载点 
  33. /dev/mapper/rootvg-rootlv       9.7G  7.6G  1.7G  83%   / 
  34. /dev/sda1                   99M   14M   80M     15%     /boot 
  35. tmpfs                       322M     0  322M   0%   /dev/shm 
  36. /dev/mapper/iscsi-sharedisk 2.0G   68M  1.9G   4%   /data    

================================================================================

  • 添加新的PV到VG
 
  1. 紧接着上面的讲解实例,通过fdisk新建一个磁盘分区,对应的分区为/dev/sda6,现在要把新增的硬盘分区加入到卷组iscsi,操作如下:
  2. [root@rhel5 ~]# vgdisplay iscsi | grep -i free                              //首先检查iscsi卷组中的空闲空间 
  3.   Free  PE / Size       686 / 2.68 GB 
  4. [root@rhel5 ~]# pvcreate /dev/sda6                                          //先将/dev/sda6转换为物理卷 
  5.   Physical volume "/dev/sda6" successfully created 
  6. [root@rhel5 ~]# vgextend iscsi /dev/sda6                                 //将新增物理卷添加到卷组iscsi中 
  7.   Volume group "iscsi" successfully extended 
  8. [root@rhel5 ~]# vgdisplay iscsi | grep -i free                              //此时剩余卷组空间还有4.55G,刚好是新增物理卷的大小 
  9.   Free  PE / Size       1164 / 4.55 GB 
  • 在线扩展LV的大小
 
  1. LVM最主要的功能就是能动态的调整分区的大小,其实也就是修改逻辑卷的大小
  2. lvresize [-L (+size) –l (+PE数)]  逻辑卷名称 
  3. 扩展逻辑卷sharedisk的大小到5G,执行以下命令: 
  4. [root@rhel5 ~]# lvresize -L 5G /dev/iscsi/sharedisk  
  5. [root@rhel5 ~]# resize2fs /dev/iscsi/sharedisk  
  6. resize2fs 1.39 (29-May-2006) 
  7. resize2fs: Bad magic number in super-block while trying to open /dev/iscsi/sharedisk 
  8. Couldn't find valid filesystem superblock. 
  • 缩小LV的大小
 
  1. 缩小LV必须先缩小LV所在的文件系统(resize2fs)才能进一步缩小LV(lvresize) 
  2. 缩小逻辑卷sharediak的大小为3G 
  3. [root@rhel5 ~]# umount /dev/iscsi/sharedisk  
  4. [root@rhel5 ~]# e2fsck -f /dev/iscsi/sharedisk                          //检查文件系统的准确性 
  5. e2fsck 1.39 (29-May-2006) 
  6. Couldn't find ext2 superblock, trying backup blocks... 
  7. Pass 1: Checking inodes, blocks, and sizes 
  8. Pass 2: Checking directory structure 
  9. Pass 3: Checking directory connectivity 
  10. Pass 4: Checking reference counts 
  11. Pass 5: Checking group summary information 
  12.  
  13. /dev/iscsi/sharedisk: ***** FILE SYSTEM WAS MODIFIED ***** 
  14. /dev/iscsi/sharedisk: 11/262144 files (9.1% non-contiguous), 25406/524288 blocks 
  15. [root@rhel5 ~]# resize2fs /dev/iscsi/sharedisk 3G                           //缩小文件系统的大小为3G 
  16. resize2fs 1.39 (29-May-2006) 
  17. Resizing the filesystem on /dev/iscsi/sharedisk to 786432 (4k) blocks. 
  18. The filesystem on /dev/iscsi/sharedisk is now 786432 blocks long. 
  19.  
  20. [root@rhel5 ~]# lvresize -L 3G /dev/iscsi/sharedisk                             //缩小逻辑卷sharedisk的大小为3G 
  21.   WARNING: Reducing active logical volume to 3.00 GB 
  22.   THIS MAY DESTROY YOUR DATA (filesystem etc.) 
  23. Do you really want to reduce sharedisk? [y/n]: y 
  24.   Reducing logical volume sharedisk to 3.00 GB 
  25.   Logical volume sharedisk successfully resized 
  26. [root@rhel5 ~]# mount /dev/iscsi/sharedisk /data/ 
  • 删除LV、VG、PV
 
  1. 删除物理卷的命令是pvremove,将物理卷从卷组移除的命令是vgreduce,删除卷组的命令是vgremove,同理,删除逻辑卷的命令是lvremove。 
  2. 删除一个卷组的顺序是:卸载逻辑卷分区-->删除卷组上所有逻辑卷-->删除卷组 
  3. [root@rhel5 ~]# umount /dev/iscsi/sharedisk  
  4. [root@rhel5 ~]# lvremove /dev/iscsi/sharedisk  
  5. Do you really want to remove active logical volume sharedisk? [y/n]: y 
  6.   Logical volume "sharedisk" successfully removed 
  7. [root@rhel5 ~]# vgchange -a n iscsi                                 //停用卷组iscsi 
  8.   0 logical volume(s) in volume group "iscsi" now active 
  9. [root@rhel5 ~]# vgreduce iscsi /dev/sda6                            //从卷组iscsi 中移除一个/dev/sda6的物理卷  
  10.   Removed "/dev/sda6" from volume group "iscsi" 
  11. [root@rhel5 ~]# vgs iscsi 
  12.   VG     #PV #LV #SN Attr   VSize VFree 
  13.   iscsi    1   0   0 wz--n- 4.68G 4.68G 
  14. [root@rhel5 ~]# vgremove iscsi /dev/sda5 
  15.   Volume group "iscsi" successfully removed 
  16. [root@rhel5 ~]# pvremove /dev/sda5 
  17.   Labels on physical volume "/dev/sda5" successfully wiped 
  18. [root@rhel5 ~]# pvremove /dev/sda6 
  19.   Labels on physical volume "/dev/sda6" successfully wiped 

============================================================================

LVM快照:

LVM快照是基于存储块基本的,而不是文件系统级别的,所以当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。

在写操作写入块之前,CoW将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。

采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。

 
  1. [root@rhel5 ~]# pvcreate /dev/sda{5,6} 
  2.   Physical volume "/dev/sda5" successfully created 
  3.   Physical volume "/dev/sda6" successfully created 
  4. [root@rhel5 ~]# vgcreate  datavg /dev/sda{5,6}   
  5.   Volume group "datavg" successfully created    
  6. [root@rhel5 ~]# lvcreate -n datalv -L 500M datavg 
  7.   Logical volume "datalv" created 
  8. [root@rhel5 ~]# mkfs.ext3 /dev/datavg/datalv  
  9. mke2fs 1.39 (29-May-2006) 
  10. Filesystem label= 
  11. OS type: Linux 
  12. Block size=1024 (log=0) 
  13. Fragment size=1024 (log=0) 
  14. 128016 inodes, 512000 blocks 
  15. 25600 blocks (5.00%) reserved for the super user 
  16. First data block=1 
  17. Maximum filesystem blocks=67633152 
  18. 63 block groups 
  19. 8192 blocks per group, 8192 fragments per group 
  20. 2032 inodes per group 
  21. Superblock backups stored on blocks:  
  22.         8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 
  23.  
  24. Writing inode tables: done                             
  25. Creating journal (8192 blocks): done 
  26. Writing superblocks and filesystem accounting information: done 
  27.  
  28. This filesystem will be automatically checked every 27 mounts or 
  29. 180 days, whichever comes first.  Use tune2fs -c or -i to override. 
  30. [root@rhel5 ~]# mount /dev/datavg/datalv /data 
  31.  
  32. [root@rhel5 ~]# dd if=/dev/zero of=/data/test.img bs=10M count=10 
  33. 10+0 records in 
  34. 10+0 records out 
  35. 104857600 bytes (105 MB) copied, 4.79465 seconds, 21.9 MB/s 
  36.  
  37. [root@rhel5 ~]# lvcreate -L 400M -n snaplv -s /dev/datavg/datalv  
  38.   Logical volume "snaplv" created 
  39. [root@rhel5 ~]# lvs 
  40.   LV     VG     Attr   LSize   Origin Snap%  Move Log Copy%  Convert 
  41.   datalv datavg owi-ao 500.00M                                       
  42.   snaplv datavg swi-a- 400.00M datalv   0.00                         
  43.   rootlv rootvg -wi-ao   9.97G                                       
  44. [root@rhel5 ~]# mount /dev/datavg/snaplv /data_snap/ 
  45. [root@rhel5 ~]# df -h 
  46. Filesystem            Size  Used Avail Use% Mounted on 
  47. /dev/mapper/rootvg-rootlv 
  48.                       9.7G  3.4G  5.8G  38% / 
  49. /dev/sda1              99M   14M   80M  15% /boot 
  50. tmpfs                 212M     0  212M   0% /dev/shm 
  51. /dev/mapper/datavg-datalv 
  52.                       485M  111M  354M  24% /data 
  53. /dev/mapper/datavg-snaplv 
  54.                       485M  111M  354M  24% /data_snap 
  55.  
  56. [root@rhel5 ~]# ls /data /data_snap/ 
  57. /data: 
  58. lost+found  test.img 
  59.  
  60. /data_snap/: 
  61. lost+found  test.img 
  62.  
  63.  
  64. [root@rhel5 ~]# dd if=/dev/zero of=/data/test2.img bs=10M count=10  
  65. 10+0 records in 
  66. 10+0 records out 
  67. 104857600 bytes (105 MB) copied, 6.50751 seconds, 16.1 MB/s 
  68. [root@rhel5 ~]#  
  69. [root@rhel5 ~]# df -h 
  70. Filesystem            Size  Used Avail Use% Mounted on 
  71. /dev/mapper/rootvg-rootlv 
  72.                       9.7G  3.4G  5.8G  38% / 
  73. /dev/sda1              99M   14M   80M  15% /boot 
  74. tmpfs                 212M     0  212M   0% /dev/shm 
  75.  
  76. /dev/mapper/datavg-datalv 
  77.                       485M  212M  254M  46% /data 
  78. /dev/mapper/datavg-snaplv 
  79.                       485M  111M  354M  24% /data_snap 
  80. [root@rhel5 ~]# ls /data /data_snap/                               
  81. /data: 
  82. lost+found  test2.img  test.img 
  83.  
  84. /data_snap/: 
  85. lost+found  test.img 
  86.  
  87. [root@rhel5 ~]# lvs 
  88.   LV     VG     Attr   LSize   Origin Snap%  Move Log Copy%  Convert 
  89.   datalv datavg owi-ao 500.00M                                       
  90.   snaplv datavg swi-ao 400.00M datalv  24.76                         
  91.   rootlv rootvg -wi-ao   9.97G                                       
  92. [root@rhel5 ~]# rm -rf /data/* 
  93. [root@rhel5 ~]# dd if=/dev/zero of=/data/snap.img bs=40M count=10            //此时datalv上的变化量将超过快照snaplv的大小400M,则snaplv将失效 
  94.  
  95. [root@rhel5 ~]# df -h 
  96. Filesystem            Size  Used Avail Use% Mounted on 
  97. /dev/mapper/rootvg-rootlv 
  98.                       9.7G  3.4G  5.8G  38% / 
  99. /dev/sda1              99M   14M   80M  15% /boot 
  100. tmpfs                 212M     0  212M   0% /dev/shm 
  101. /dev/mapper/datavg-datalv 
  102.                       485M  400M   85M  82% /data 
  103. /dev/mapper/datavg-snaplv 
  104.                       485M  111M  354M  24% /data_snap 
  105.  
  106. [root@rhel5 ~]# lvs 
  107.   /dev/datavg/snaplv: read failed after 0 of 2048 at 0: Input/output error 
  108.   LV     VG     Attr   LSize   Origin Snap%  Move Log Copy%  Convert 
  109.   datalv datavg owi-ao 500.00M                                       
  110.   snaplv datavg Swi-Io 400.00M datalv 100.00                         
  111.   rootlv rootvg -wi-ao   9.97G        
  112.  
  113.  
  114. [root@rhel5 ~]# rm -rf /data_snap/test.img                       //快照失效,里面的文件已无法读取 
  115. rm: cannot remove `/data_snap/test.img': Read-only file system 
  116. [root@rhel5 ~]# mount -o remount,rw /data_snap/ 
  117. mount: block device /dev/mapper/datavg-snaplv is write-protected, mounting read-only 
  118.  
  119. [root@rhel5 ~]# lvremove /dev/datavg/snaplv                      //快照失效,只能移除LV  
  120.   /dev/cdrom: open failed: Read-only file system 
  121.   /dev/datavg/snaplv: read failed after 0 of 4096 at 0: Input/output error 
  122. Do you really want to remove active logical volume snaplv? [y/n]: y 
  123.   Logical volume "snaplv" successfully removed 

可以将LVM快照应用在KVM虚拟机中,创建一个LV作为原始映像,为该原始映像创建LV快照作为虚拟机的磁盘映像,这样可以迅速克隆系统(创建快照的时间常常不超过几秒)且节省磁盘空间(guest共享原始映像的大多数数据)。即使系统出现问题,只要移除快照即可。

 



     本文转自Vnimos51CTO博客,原文链接:http://blog.51cto.com/vnimos/1153416,如需转载请自行联系原作者





相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
1月前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux 配置和管理网络流量的形状 shapecfg命令 使用指南
【Shell 命令集合 网络通讯 】Linux 配置和管理网络流量的形状 shapecfg命令 使用指南
38 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
36 1
|
1月前
|
存储 监控 Shell
【Shell 命令集合 磁盘管理 】Linux 管理磁盘配额 quota命令使用教程
【Shell 命令集合 磁盘管理 】Linux 管理磁盘配额 quota命令使用教程
35 0
|
27天前
|
存储 算法 Linux
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
58 5
|
1月前
|
域名解析 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
50 1
|
1月前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
33 0
|
1月前
|
搜索推荐 Shell Linux
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
37 2
|
1月前
|
存储 监控 Shell
【Shell 命令集合 磁盘管理 】Linux 设置和管理用户或组的磁盘配额限制 edquota命令使用教程
【Shell 命令集合 磁盘管理 】Linux 设置和管理用户或组的磁盘配额限制 edquota命令使用教程
38 0
|
14天前
|
网络协议 Linux
在Linux中,管理和配置网络接口
在Linux中管理网络接口涉及多个命令,如`ifconfig`(在新版本中被`ip`取代)、`ip`(用于网络设备配置)、`nmcli`(NetworkManager的CLI工具)、`nmtui`(文本界面配置)、`route/ip route`(处理路由表)、`netstat/ss`(显示网络状态)和`hostnamectl/systemctl`(主机名和服务管理)。这些命令帮助用户启动接口、设置IP地址、查看连接和路由信息。不同发行版可能有差异,建议参考相应文档。
19 4
|
8天前
|
消息中间件 监控 Linux
Linux进程和计划任务管理
通过这些命令和工具,你可以有效地管理Linux系统中的进程和计划任务,监控系统的运行状态并保持系统的稳定和可靠性。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
100 2