zoukankan      html  css  js  c++  java
  • centos LVM详解


    title: centos LVM详解
    date: 2018-04-24 14:00:03
    tags: [linux,centos,LVM]

    知识了解

    LVM关系图

    fdisk命令详解

        [root@localhost beinan]# fdisk /dev/xvde
        Command (m for help): 在这里按 m ,就会输出帮助;
        Command action
        a   toggle a bootable flag    #设置启动分区
        b   edit bsd disklabel    #编辑分区标签
        c   toggle the dos compatibility flag
        d   delete a partition    #这是删除一个分区的动作
        g   create a new empty GPT partition table
        G   create an IRIX (SGI) partition table
        l   list known partition types    #l 是列出分区类型,以供我们设置相应分区的类型
        m   print this menu    #m 是列出帮助信息
        n   add a new partition    #添加一个分区
        o   create a new empty DOS partition table
        p   print the partition table    #p 列出分区表
        q   quit without saving changes    #不保存退出
        s   create a new empty Sun disklabel
        t   change a partition‘s system id    #t 改变分区类型
        u   change display/entry units    #改变显示的单位
        v   verify the partition table    #检查验证分区表
        w   write table to disk and exit    #把分区表写入硬盘并退出
        x   extra functionality (experts only) #扩展
    
        Command (m for help): l
    
        0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
        1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
        2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
        3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
        4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
        5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
        6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
        7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
        8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
        9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
        a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
        b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
        c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
        e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
        f  W95 Ext‘d (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
        10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
        11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
        12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
        14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
        16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
        17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
        18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
        1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
        1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
        1e  Hidden W95 FAT1 80  Old Minix 
    

    新建LVM

    查看分区和磁盘情况

        [root@vs-yth12 ~]$ fdisk -l
    
        Disk /dev/xvda: 64.4 GB, 64424509440 bytes, 125829120 sectors
        Units = sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk label type: dos
        Disk identifier: 0x000743c6
    
            Device Boot      Start         End      Blocks   Id  System
        /dev/xvda1   *        2048   100663295    50330624   83  Linux
        /dev/xvda2       100663296   125829119    12582912   82  Linux swap / Solaris
    
        Disk /dev/xvde: 42.9 GB, 42949672960 bytes, 83886080 sectors
        Units = sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk label type: dos
        Disk identifier: 0x7262c8b2
    
            Device Boot      Start         End      Blocks   Id  System
        /dev/xvde1            2048    83886079    41942016   82  Linux swap / Solaris
        [root@vs-yth12 ~]$ lsblk
        NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sr0      11:0    1 1024M  0 rom  
        xvda    202:0    0   60G  0 disk 
        ├─xvda1 202:1    0   48G  0 part /
        └─xvda2 202:2    0   12G  0 part [SWAP]
        xvde    202:64   0   40G  0 disk 
        └─xvde1 202:65   0   40G  0 part
    

    新建分区和修改分区类型ID为8e

        [root@vs-yth12 ~]$ fdisk /dev/xvde
        Welcome to fdisk (util-linux 2.23.2).
    
        Changes will remain in memory only, until you decide to write them.
        Be careful before using the write command.
    
        Device does not contain a recognized partition table
        Building a new DOS disklabel with disk identifier 0x7262c8b2.
    
        Command (m for help): t
        No partition is defined yet!
    
        Command (m for help): n  
        Partition type:
        p   primary (0 primary, 0 extended, 4 free)    #主分区
        e   extended    #逻辑分区
        Select (default p): p
        Partition number (1-4, default 1): 
        First sector (2048-83886079, default 2048): 
        Using default value 2048
        Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): 
        Using default value 83886079
        Partition 1 of type Linux and of size 40 GiB is set
    
        Command (m for help): t
        Selected partition 1
        Hex code (type L to list all codes): 8e
        Changed type of partition 'Linux' to 'Linux LVM'
    
        Command (m for help): w
        The partition table has been altered!
    
        Calling ioctl() to re-read partition table.
        Syncing disks.
    
        [root@vs-yth12 ~]$ partprobe    #在线更新
    

    创建PV

        $ pvscan   #查询pv
        PV /dev/xvde1           lvm2 [40.00 GiB]
        Total: 1 [40.00 GiB] / in use: 0 [0   ] / in no VG: 1 [40.00 GiB]
        $ pvdisplay   #同上
        $ pvcreate /dev/xvde1  #结果可以通过pvs pvscan pvdisplay 查看
    

    创建VG

        $ vgcreate myvgname /dev/xvde1  #将所有PV组成一个VG,这里只有一个PV,myvgname是自定义的VG名
        #创建成功后可以通过vgscan vgdisplay pvscan查看
        $ pvscan
        PV /dev/xvde1   VG myvgname        lvm2 [40.00 GiB / 40.00 GiB free]  #这里比上面的多了个VG
        Total: 1 [40.00 GiB] / in use: 1 [40.00 GiB] / in no VG: 0 [0   ]
    

    创建LV

        lvcreate 常用参数详解
        lvcreate -L 15G myvgname    #在名为myvgname的卷组中创建15G大小的逻辑卷,固定大小
        lvcreate -L 2500 -n mylvname myvgname    #在名为myvgname的卷组中创建2500M大小的逻辑卷,并命名为mylvname
        # -n  命名LV
        lvcreate -l 50%VG -n mylvname myvgname    #用myvgname的50%大小创建一个LV
        lvcreate --name centos7newvol -l 100%FREE vgnewlvm    #用卷组剩下的所有空间创建逻辑卷
    
        lvcreate: Create a logical volume(创建逻辑卷)
            lvcreate
                [-A|--autobackup {y|n}](自动备份)
                [-a|--activate [a|e|l]{y|n}]
                [--addtag Tag](增加标签)
                [--alloc AllocationPolicy](分配策略)
                [--cachemode CacheMode](Cache模式)
                [-C|--contiguous {y|n}]
                [-d|--debug]
                [-h|-?|--help]
                [--ignoremonitoring](忽略监控)
                [--monitor {y|n}](监控)
                [-i|--stripes Stripes [-I|--stripesize StripeSize]]
                [-k|--setactivationskip {y|n}]
                [-K|--ignoreactivationskip]
                {-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] |(逻辑扩展数)
                -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}(逻辑卷大小)
                [-M|--persistent {y|n}] [--major major] [--minor minor]
                [-m|--mirrors Mirrors [--nosync] [{--mirrorlog {disk|core|mirrored}|--corelog}]](镜像)
                [-n|--name LogicalVolumeName](逻辑卷名字)
                [--noudevsync]
                [-p|--permission {r|rw}]
                [--[raid]minrecoveryrate Rate]
                [--[raid]maxrecoveryrate Rate]
                [-r|--readahead ReadAheadSectors|auto|none](读取头扇区)
                [-R|--regionsize MirrorLogRegionSize](镜像逻辑区域尺寸)
                [-T|--thin  [-c|--chunksize  ChunkSize](块大小)
                [--discards {ignore|nopassdown|passdown}]
                [--poolmetadatasize MetadataSize[bBsSkKmMgG]]]
                [--poolmetadataspare {y|n}]
                [--thinpool ThinPoolLogicalVolume{Name|Path}] (精简池逻辑卷)
                [-t|--test]
                [--type VolumeType](卷类型)
                [-v|--verbose]
                [-W|--wipesignatures {y|n}]
                [-Z|--zero {y|n}]
                [--version]
                VolumeGroupName [PhysicalVolumePath...]
    
        $ lvcreate --name mylvname -l 100%FREE myvgname    #用卷组剩下的所有空间创建逻辑卷
        #创建成功后可以通过vgdisplay lsblk lvdisplay查看
    

    格式化并挂载

        [root@vs-yth12 ~]$ lvdisplay    #查看lv情况,记住LV PATH
        --- Logical volume ---
        LV Path                /dev/myvgname/mylvname
        LV Name                mylvname
        VG Name                myvgname
        LV UUID                9FceM6-gvcT-xQDw-BL9t-5m8W-XXxY-zDmDma
        LV Write Access        read/write
        LV Creation host, time vs-yth12.localdomain, 2018-04-28 17:38:17 +0800
        LV Status              available
        $ open                 0
        LV Size                40.00 GiB
        Current LE             10239
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     8192
        Block device           253:0
        
        [root@vs-yth12 ~]$ mkfs -t ext4 /dev/myvgname/mylvname    #格式化
        mke2fs 1.42.9 (28-Dec-2013)
        Filesystem label=
        OS type: Linux
        Block size=4096 (log=2)
        Fragment size=4096 (log=2)
        Stride=0 blocks, Stripe width=0 blocks
        2621440 inodes, 10484736 blocks
        524236 blocks (5.00%) reserved for the super user
        First data block=0
        Maximum filesystem blocks=2157969408
        320 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, 2654208, 
                4096000, 7962624
    
        Allocating group tables: done                            
        Writing inode tables: done                            
        Creating journal (32768 blocks): done
        Writing superblocks and filesystem accounting information: done   
    
        [root@vs-yth12 ~]$ mount /dev/myvgname/mylvname /data  临时挂载
        [root@vs-yth12 ~]$ vi /etc/fstab   添加永久挂载
        #/dev/myvgname/mylvname  /data   ext4 defaults 0 0   
    

    删除LVM

    查看分区和磁盘情况

        [root@vs-yth12 ~]$ df -h
        Filesystem                   Size  Used Avail Use% Mounted on
        /dev/xvda1                    48G  3.6G   42G   8% /
        devtmpfs                     1.9G     0  1.9G   0% /dev
        tmpfs                        1.6G   84K  1.6G   1% /dev/shm
        tmpfs                        1.6G   33M  1.6G   3% /run
        tmpfs                        1.6G     0  1.6G   0% /sys/fs/cgroup
        tmpfs                        327M   16K  327M   1% /run/user/42
        /dev/mapper/vg_data-lv_data   35G   49M   33G   1% /data #这个就是我们要删除的
        tmpfs                        327M     0  327M   0% /run/user/0
        [root@vs-yth12 ~]$ lsblk
        NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sr0                11:0    1 1024M  0 rom  
        xvda              202:0    0   60G  0 disk 
        ├─xvda1           202:1    0   48G  0 part /
        └─xvda2           202:2    0   12G  0 part [SWAP]
        xvde              202:64   0   40G  0 disk 
        └─vg_data-lv_data 253:0    0   35G  0 lvm  /data  #这个就是我们要删除的
    

    卸载LVM文件系统

        $ umount /data  #卸载成功后,用df -h可以看到结果
    

    移除LV

        [root@vs-yth12 ~]$ lvscan  #查看活动中的LV
        ACTIVE            '/dev/vg_data/lv_data' [35.00 GiB] inherit
        [root@vs-yth12 ~]$ lvdisplay  #查看活动中的LV,同上
        --- Logical volume ---
        LV Path                /dev/vg_data/lv_data
        LV Name                lv_data
        VG Name                vg_data
        LV UUID                FhRjBR-Y4w2-1hSR-9J1X-l41a-FTLe-RZNvRb
        LV Write Access        read/write
        LV Creation host, time vs-yth12.localdomain, 2018-04-20 17:05:35 +0800
        LV Status              available
        ....
        [root@vs-yth12 ~]$ lvremove /dev/vg_data/lv_data  #移除后用lsblk可看到结果
        Do you really want to remove active logical volume vg_data/lv_data? [y/n]: y
        Logical volume "lv_data" successfully removed
    

    移除VG

        [root@vs-yth12 ~]$ vgscan  #查看活动中的VG
        Reading volume groups from cache.
        Found volume group "vg_data" using metadata type lvm2
        [root@vs-yth12 ~]$ vgdisplay  #查看活动中的VG,同上
        --- Volume group ---
        VG Name               vg_data
        System ID             
        Format                lvm2
        Metadata Areas        1
        Metadata Sequence No  3
        VG Access             read/write
        VG Status             resizable
        MAX LV                0
        Cur LV                0
        Open LV               0
        Max PV                0
        Cur PV                1
        Act PV                1
        VG Size               40.00 GiB
        PE Size               4.00 MiB
        Total PE              10239
        Alloc PE / Size       0 / 0   
        Free  PE / Size       10239 / 40.00 GiB
        VG UUID               I2okv5-rIGx-cg5B-4Iyq-3F04-pwZK-G2r5FS
        [root@vs-yth12 ~]$ vgchange -a n vg_data  #用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志
        [root@vs-yth12 ~]$ vgremove vg_data  #移除VG
    

    移除PV

        [root@vs-yth12 ~]$ pvremove /dev/xvde #删除物理卷
        Labels on physical volume "/dev/xvde" successfully wiped. #成功擦除
    

    放大LV容量

    用新的硬盘创建PV

        fdisk -l
        lsblk
        fdisk /dev/xvde    #新建分区后修改ID为8e
        partprobe    #在线更新
        pvcreate    /dev/xvde1    #用那个新建的分区创建PV,用pvscan pvdisplay
    

    将新空间添加

        vgextend myvgname /dev/xvde1
        lvresize -l +64 /dev/myvgname/mylvname    #利用 lvresize 将新加入的 PV 内的 PE 加入LV 中
                                              #(vgdisplay vgdisplay lvdisplay lsblk df )
        resize2fs /dev/myvgname/mylvname    #透过 resize2fs 将文件系统的容量确实添加
    

    如果:

        $ resize2fs /dev/centos/root
        resize2fs 1.42.9 (28-Dec-2013)
        resize2fs: Bad magic number in super-block while trying to open /dev/centos/root
        Couldn’t find valid filesystem superblock.
        $ xfs_growfs /dev/centos/root    #文件系统是xfs,用该命令来扩,新版本xfs_growfs用法不一样了,新版本要用 xfs_growfs /data 来生效
        $ df -h
    
    

    [root@xs43254218114 ~]# resize2fs /dev/centos/root

    缩小LV,删除

    缩小LV是先声明 resize2fs -p 后定义 lvresize -L 的过程

    缩小LV

        pvdisplay    #查看PV情况
        pvscan    #查看PV情况
        umount /data    #卸载
        e2fsck -f /dev/myvgname/mylvname    #磁盘检测LV
        resize2fs    /dev/myvgname/mylvname 3G    #使用resize2fs 直接指定降低后的容量,用这个去挂载,
                                                  #没有+,-号就是固定值
        mount /dev/myvgname/mylvname /data    #重新挂载,这里用df -h可以看出大小变了,但实际lv还有空余的
        pvdisplay    #查看PV情况,可以看到有多少个
        pvscan    #查看PV情况
        lvreszie -L -2G /dev/myvgname/mylvname    #使用lvresize 降低LV的容量,这些空间就会回到VG
        #假设一共5G,刚刚resize2fs保留了3G,现在这里就减少2G,可以用于其他LV,没有+,-号就是固定值
    

    删除法

        pvdisplay    #查看PV情况
        pvscan    #查看PV情况
        pvmove /dev/xvde1 /dev/xvde2    #将xvde1的数据全部移到xvde2中去
        vgreduce myvgname /dev/xvde1    #将xvde1从VG myvgname中移除,这样这个PV可以创建其他VG了
    

    先缩小LV1容量,后增大LV2容量的过程(生产环境下的减小/home 增大/root) ###、

    1.卸载LV1
    2.使用 e2fsck 检测一下LV1
    3.使用resize2fs 重新定义LV1的大小
    4.重新挂载,检验一下结果
    5.使用lvreduce 或lvresize 减小LV1至指定大小
    6.使用lvextend 增加LV2的大小
    7.重新定义下LV2大小

    一加一减

        $ fdisk -l    #查看磁盘情况
        $ df -h    #同上
        $ lsblk    #同上
    
        $ mkdir /mnt/backup    #备份LV1的数据
        $ tar -jcv -f /mnt/backup/test.tar.bz2 /data/*
        或
        $ mv /data/* /mnt/backup/
    
        3.卸载LV1
        $ umount /data
    
        $ e2fsck -f /dev/myvgname/mylvname    #使用 e2fsck 检测一下LV1
    
        $ resize2fs -p /dev/myvgname/mylvname 2G    #使用resize2fs 重新定义LV1的大小
    
        $ mount /dev/myvgname/mylvname /data    #重新挂载,检验一下结果
        $ df -h
    
        $ lvresize -L 2G /dev/myvgname/mylvname    #使用lvreduce 或lvresize 减小LV1至指定大小,没有+,-号就是固定值
        或
        $ lvreduce -L 2G /dev/myvgname/mylvname    #没有+,-号就是固定值
    
        $ lvextend -l +100%FREE /dev/myvgname/my2lvname    #使用lvextend 增加LV2的大小
        或
        $ lvextend -L +1G /dev/myvgname/my2lvname
    
        $ resize2fs -p /dev/myvgname/my2lvname    #重新定义下LV2大小
    
        $ df -h     #检查结果
        $ lsblk
    

    参考网址:

    作者:陈耿聪 —— 夕狱

    出处:https://www.cnblogs.com/CGCong/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    【产品】Pony三问
    【数据平台】阿里dataphin
    【数据中台】阿里数据中台架构
    关于 Qt 5,你所需要了解的基础知识
    Skynet 游戏服务器开发实战
    关于自然语言处理,有一本通关手册待接收
    ROS 机器人操作系统进阶实战
    面试官不讲武德,问我如何实现分布式缓存?
    高 star 开源项目来实验楼啦,深度学习强推教材
    Spring Boot 2.4.0 全新发布,还不快来实战
  • 原文地址:https://www.cnblogs.com/CGCong/p/9375787.html
Copyright © 2011-2022 走看看