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

[经验分享] Linux学习之LVM文件系统

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-31 08:57:44 | 显示全部楼层 |阅读模式
LVM指的是什么?有什么用?如何设置LVM等等。。。本着学习的目的,那么我们就这些问题来研究下到底什么是LVM,以及LVM的一系列的使用。   
     

  一、LVM是什么?
      
LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统大小。此外,LVM的快照功能可以帮助我们快速 备份数据。LVM为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。作用是使用纯软件的形式来组织一个或多个底层硬解设备组织成一个抽象的逻辑设备来使用的解决方案。当然我们这里说的可能都是逻辑概念,无法理解。Physical volume (PV)、Volume group (VG)、Logical volume(LV)、 Physical extent (PE),下面我们用一个简单的图来说明下物理卷、卷组、逻辑卷他们之间的关系(此图只是个人理解,仅供参考)   
wKioL1XheCSgMKcSAABNpwTnPdg619.jpg    
如上图所示简而言之:   
逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的逻辑卷,而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。我是这么理解的,不知道有没有问题。
  二、一些概念的理解
      
    PE:Physical Ex   
        LVM默认使用4MB的PE块,他是整个LVM最小的存储单元,也就是说,我们的文件数据都是由写入PE来处理的。简单的说,这个PE就是有点像文件系统里面的block大小。不过在LVM中把它叫做PE,在上图中我并没有标示出来,它是存储在PV中的块。
      PV:Physical Volume 物理卷   
        物理卷是LVM的最底层概念,是LVM的逻辑存储块,物理卷与磁盘分区是逻辑的对应关系。LVM提供了命令工具可以将分区转换为物理卷,通过组合物理卷可以生成卷组。
      VG:Volume Group 卷组   
        卷组是LVM逻辑概念上的磁盘设备,通过将单个或多个物理卷组合成后生成卷组。卷组的大小取决于物理卷的容量以及个数。
      LV:Logical Volume 逻辑卷   
        逻辑卷就是LVM逻辑意义上的分区,我们可以指定从卷组中提取多少容量来创建逻辑卷,最后对逻辑卷格式化并挂载使用。
  三、和LVM文件系统想关的一些使用命令的解释
       上面我们已经了解了PE、PV、VG、LV的一些关系和基本概念,下面我们来说下常用的一些命令及其所表示的意义,我这边只说下常用的:
  PV常用命令:   
pvcreate:   创建一个PV物理卷
  pvchange: 修改PV的属性
  pvresize  :  调整一个PV的大小
  pvremove : 删除一个PV
  pvs             显示PV的简要信息
  pvdisplay:  显示PV的属性信息
  
  VG常用的命令:
                         vgcreate: 创建卷组
                                  常用选项:
                                                   -s:设置卷组PE大小,默认为4M
                          vgremove : 删除VG
                          vgextend:扩展VG大小
                          vgruduce:缩减VG大小
  vgs          :显示VG的简要信息
  vgdisplay:  显示VG的属性信息
  
  LV常用命令:
                         lvcreate:创建LV
                                    常用选项:
                                              -L:设置LV大小
                                              -n:指定LV名字
                         lvremove:删除LV
                         lvextend:扩展LV大小
                         lvruduce:缩减LV大小
                         lvs          :显示LV的简要信息
                         lvdisplay:显示LV的属性信息
  
  
  四、上面我们只是说了一些关于关于LVM的基本命令,下面我们将尝试创建一个LVM:
  
         如图我们使用cfdisk命令创建在sdb磁盘上面创建了三个分区,当然我们这边需要把分区的格式类型改成LinuxLVM的类型才可以,在之前的文章中我已经提到过分区类型的更改,这边就不做演示了。
   wKioL1XheCWzmwBHAABW_U8OzmM730.jpg
  个人觉得cfdisk比fdisk命令好用所以就提下cfdisk O(∩_∩)O~
  使用命令cfdisk -l 查看磁盘有没有分好:
  [iyunv@localhost ~]# fdisk -l

Disk /dev/sda: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00073570

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        7859    62914560   8e  Linux LVM

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1245    10000431   8e  Linux LVM            <<=============这样我们的3个Linux LVM类型的分区就创建好了
/dev/sdb2            1246        2490    10000462+  8e  Linux LVM
/dev/sdb3            2491        3735    10000462+  8e  Linux LVM
1、下面我们就需要对刚创建的分区创建成pv
[iyunv@localhost ~]# pv                                   <<=============我们在命令行模式下输入pv,然后点击2下TAB键,就可以看到很多关于pv的命令,当然
pvchange   pvcreate   pvmove     pvresize   pvscan                       上面所介绍的只是常用的命令而已
pvck       pvdisplay  pvremove   pvs        pv.sh      
[iyunv@localhost ~]# pvcreate /dev/sdb1                   <<=============创建分区sdb1为pv
  Physical volume "/dev/sdb1" successfully created
[iyunv@localhost ~]# pvdisplay /dev/sdb1                  <<=============查看刚创建pv的属性信息
  "/dev/sdb1" is a new physical volume of "9.54 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               9.54 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               fqjlqY-0cEX-F2Pm-l2iN-S26j-TU8r-YRw21Q

[iyunv@localhost ~]#
如上我们可以把sdb2和sdb3都创建成pv
2、创建vg
[iyunv@localhost ~]# vgcreate -s 16m myvg /dev/sdb{1,2}   <<=============将分区sdb1和sdb2创建为一个vg设置其块大小为16M 名称为myvg
  Physical volume "/dev/sdb2" successfully created
  Volume group "myvg" successfully created
[iyunv@localhost ~]# vgdisplay                            <<==============查看vg信息
  --- Volume group ---
  VG Name               myvg                              <<=============vg名称
  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.06 GiB                      <<=============vg大小
  PE Size               16.00 MiB                      <<=============块大小
  Total PE              1220
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1220 / 19.06 GiB
  VG UUID               AOgwbS-fZJ7-dmr2-CgYd-rVpr-m1PB-ZjAzyF
如上所示myvg就创建好了。如果我们需要把myvg的大小扩大,可以使用命令vgextent
[iyunv@localhost ~]# vgextend myvg /dev/sdb3               <<=============将刚才我们创建的另外一个sdb3分区加到myvg中去   
  Physical volume "/dev/sdb3" successfully created
  Volume group "myvg" successfully extended
[iyunv@localhost ~]# vgdisplay myvg                          <<=============查看myvg的属性
  --- Volume group ---
  VG Name               myvg
  System ID            
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               28.59 GiB                        <<============= myvg的大小增加了
  PE Size               16.00 MiB
  Total PE              1830
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1830 / 28.59 GiB
  VG UUID               AOgwbS-fZJ7-dmr2-CgYd-rVpr-m1PB-ZjAzyF

如上所示,缩小和扩大的方式类似,这边就不在做演示了。
3、创建lv
[iyunv@localhost ~]# lvcreate -L +10G -n mylv myvg     <<=============创建lv指明大小我10G名称为mylv的逻辑卷,卷组为myvg
  Logical volume "mylv" created
[iyunv@localhost ~]# lvdisplay                         <<============= 查看mylv的属性
  --- Logical volume ---
  LV Path                /dev/myvg/mylv               <<============= 逻辑卷mylv的路径
  LV Name                mylv                         <<============= 逻辑卷的名称
  VG Name                myvg                         <<============= 基于myvg卷组
  LV UUID                Oy1LMH-MqmN-pGfJ-Byfn-hVlW-lJZs-m7eXll
  LV Write Access        read/write
  LV Creation host, time localhost, 2015-08-28 09:49:55 +0800
  LV Status              available
  # open                 0
  LV Size                10.00 GiB                    <<============= 大小为10G
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4
4、挂载和使用逻辑卷
按照上面的步骤我们的逻辑卷就创建好了,下面演示下如何去挂载和使用逻辑卷,首先我们要先对创建的逻辑卷创建文件系统。
[iyunv@localhost ~]# mke2fs -t ext4 /dev/mapper/myvg-mylv   <<============= 创建mylv的文件系统为ext4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe  blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[iyunv@localhost ~]#
文件系统创建好了,接下来就是挂载和使用了。
[iyunv@localhost ~]# mount /dev/mapper/myvg-mylv /mnt  <<============= 将mylv挂载到mnt目录下  
[iyunv@localhost ~]# cd /mnt
[iyunv@localhost mnt]# ll                              <<============= 查看mnt目录下的文件
drwx------ 2 root root 16384 Aug 28 10:00 lost+found
[iyunv@localhost mnt]# df -h                           <<============= 查看现系统中所有的挂载设备,我们刚才挂载的mylvy已经显示了
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  287M   19G   2% /
tmpfs                 238M     0  238M   0% /dev/shm
/dev/sda1             190M   28M  153M  16% /boot
/dev/mapper/vg0-usr   9.8G  1.9G  7.4G  21% /usr
/dev/mapper/vg0-var    20G  196M   19G   2% /var
/dev/mapper/myvg-mylv
                      9.8G   23M  9.2G   1% /mnt
[iyunv@localhost mnt]#
注:当然我们这边只是临时的挂载好了可以使用,但是当我们重新启动机器的时候挂载就会消失了。如果我们要想使挂载不会消失,需要编辑/etc/fstab这个文件,在之前的磁盘中我已经提到过了,所以这边回不在演示了。
这样我们就成功的创建了我们的逻辑卷!可是随着业务的增加!mnt目录不够用了,我们就可以扩展mylv的大小,可在线扩展。
[iyunv@localhost ~]# lvextend -L +2G -n /dev/mapper/myvg-mylv  <<============= 将mylv扩大2G
  Size of logical volume myvg/mylv changed from 10.00 GiB (640 extents) to 12.00 GiB (768 extents).
  Logical volume mylv successfully resized
[iyunv@localhost ~]# df -h                                     <<============= 查看mylv的大小
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  287M   19G   2% /
tmpfs                 238M     0  238M   0% /dev/shm
/dev/sda1             190M   28M  153M  16% /boot
/dev/mapper/vg0-usr   9.8G  1.9G  7.4G  21% /usr
/dev/mapper/vg0-var    20G  196M   19G   2% /var
/dev/mapper/myvg-mylv
                      9.8G   23M  9.2G   1% /mnt              <<============= 所示这边mulv的空间并没有扩大
[iyunv@localhost ~]# resize2fs /dev/mapper/myvg-mylv      <========扩展逻辑边界 (注:只对ext文件系统使用。这里也可以指定扩展逻辑边界大小,默认物理边界大小)
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required                       
old desc_blocks = 1, new_desc_blocks = 1                                                         
Performing an on-line resize of /dev/mapper/myvg-mylv to 3145728 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 3145728 blocks long.
[iyunv@localhost ~]# df -h                                   <<============= 再次查看mylv这时空间就变大成了12G了   
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  287M   19G   2% /
tmpfs                 238M     0  238M   0% /dev/shm
/dev/sda1             190M   28M  153M  16% /boot
/dev/mapper/vg0-usr   9.8G  1.9G  7.4G  21% /usr
/dev/mapper/vg0-var    20G  196M   19G   2% /var
/dev/mapper/myvg-mylv
                       12G   25M   12G   1% /mnt
注:主要我们扩大空间的时候-L后面跟的选项+2 和2的性质是不一样的,+2表示把在原有的基础上增加2G,2G则表示在将原有的空间扩展到2G。
上面说了扩展这边我们来说下缩减,不过缩减我们我们要按照以下的步骤下:  
缩减的顺序应该与创建时的顺序相反,也就是卸载文件系统、删除逻辑卷、删除卷组、删除物理卷。缩减很危险,不到万不得已千万别缩减。缩减需离线。  
缩减步骤:  
(1)、先确定缩减后的目标大小;并确保对应的每一步逻辑卷大小中有足够的空间可容纳原有所有数据;  
(2)、先制裁文件系统,并要执行强制检测  
(3)、缩减逻辑边界  
(4)、缩减物理边界
事列如下:
[iyunv@localhost ~]# umount /mnt/          <<=========首先要先卸载mylv的挂载(注:卸载挂载的时候我们可以指定挂载的文件路径,也可以指定挂载文件系统的目录)   
[iyunv@localhost ~]# e2fsck -f /dev/mapper/myvg-mylv    <<============= 强行对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/mapper/myvg-mylv: 11/786432 files (0.0% non-contiguous), 88528/3145728 blocks
[iyunv@localhost ~]# resize2fs /dev/mapper/myvg-mylv 5G       <<============= 将myvg-mylv逻辑边界缩减至5G   
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-mylv to 1310720 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 1310720 blocks long.

[iyunv@localhost ~]# lvreduce -L 5G /dev/mapper/myvg-mylv     <<============= 将myvg-mylv物理边界缩减至5G
  WARNING: Reducing active logical volume to 5.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y                  <<============= 确认
  Size of logical volume myvg/mylv changed from 12.00 GiB (768 extents) to 5.00 GiB (320 extents).
  Logical volume mylv successfully resized
[iyunv@localhost ~]# mount /dev/mapper/myvg-mylv /mnt/        <<============= 从新挂载
[iyunv@localhost ~]# df -h                                    <<============= 显示现在的挂载空间
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  287M   19G   2% /
tmpfs                 238M     0  238M   0% /dev/shm
/dev/sda1             190M   28M  153M  16% /boot
/dev/mapper/vg0-usr   9.8G  1.9G  7.4G  21% /usr
/dev/mapper/vg0-var    20G  196M   19G   2% /var
/dev/mapper/myvg-mylv
                      4.8G   20M  4.6G   1% /mnt            <<============= 大小就变成了4.8G(注:这里显示的大小和实际的大小是有差距的)
如上我们对LVM的的实验基本上就完成的差不多了,也掌握了LVM的创建,挂载和使用。当然LVM还有一个重要的属性我们没有说到,那就是可以对我们所创的逻辑卷做快照卷。
5、创建快照卷
            这里我们要使用的命令是lvcreate -s命令。当然它也可以与之前我们提到的一些参数一起使用。
[iyunv@localhost ~]# lvcreate -L 2G -n mylv-snap -s /dev/mapper/myvg-mylv  <<============= 对myvg-myvl创建一个大小为2G名称为mylv-snap的快照
  Logical volume "mylv-snap" created
[iyunv@localhost ~]# mkdir /snap                                            <<============= 创建目录snap
[iyunv@localhost ~]# mount /dev/myvg/mylv-snap /snap/                       <<============= 将mylv-snap挂载到snap目录下
[iyunv@localhost ~]# df                                                     <<============= 查看挂载是否完成,我们的一个快照就创建好了
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg0-root  20511356  296960  19165820   2% /
tmpfs                   243112       0    243112   0% /dev/shm
/dev/sda1               194241   27917    156084  16% /boot
/dev/mapper/vg0-usr   10190136 2017768   7648080  21% /usr
/dev/mapper/vg0-var   20511356  287984  19174796   2% /var
/dev/sr0               4523182 4523182         0 100% /media
/dev/mapper/myvg-mylv
                       5029504   20472   4746900   1% /mnt
/dev/mapper/myvg-mylv--snap
                       5029504   20472   4746900   1% /snap
注:快照的大小会随着我们文件的变化而变化,建议不要保留时间太长,因为我们给它分配的空间有限。如果要长时间保留建议快照的在创建的时候分配的空间大点
如何移除快照。
[iyunv@localhost ~]# umount /snap/                                            <<============= 卸载挂载
[iyunv@localhost ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg0-root  20511356  296960  19165820   2% /
tmpfs                   243112       0    243112   0% /dev/shm
/dev/sda1               194241   27917    156084  16% /boot
/dev/mapper/vg0-usr   10190136 2017768   7648080  21% /usr
/dev/mapper/vg0-var   20511356  287988  19174792   2% /var
/dev/sr0               4523182 4523182         0 100% /media
/dev/mapper/myvg-mylv
                       5029504   20472   4746900   1% /mnt
[iyunv@localhost ~]# lvremove /dev/myvg/mylv-snap                               <<=============删除快照
Do you really want to remove active logical volume mylv-snap? [y/n]: y         <<============= 选择yes这样我们的快照就被移除了
  Logical volume "mylv-snap" successfully removed
[iyunv@localhost ~]#
五、小结

       关于LVM逻辑卷的命令和使用方法还有很多没有说到,以上提到的一些命令和用法都是本人学习的总结,只做参考而用,如有错误还请指出。谢谢!


运维网声明 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-106599-1-1.html 上篇帖子: linux常用命令汇总(pwd,echo,history,nano) 下篇帖子: linux 监控CPU memory disk process 脚本 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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