zoukankan      html  css  js  c++  java
  • LVM操作

    一、 概念

    LVM:逻辑卷管理(Logical Volume Manager)

    二、 由来

    ​ 普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某文件时,这个文件因为受上层文件系统的限制,不能跨越多个分区存放,所以也不能放到多个磁盘上。而当某个分区空间耗尽时,解决的方法通常是使用符号链接,或者是调整分区大小的工具(工具有可能会导致我们的系统崩溃),但这都没有从根本上解决问题。随着LVM的出现,问题迎刃而解,用户在无需停机的情况下可以很方便的调整分区的大小

    三、工作原理

    ​ LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,上层应用是直接访问文件系统来对底层的物理硬盘进行读写。而在LVM中,它会将底层的硬盘进行封装,当我们通过软件去对底层的物理磁盘进行操作时,它不在是直接对分区进行操作,而是通过逻辑卷对底层的物理硬盘进行操作。LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失数据。逻辑卷的技术大大提高了磁盘管理的逻辑性。

    四、LVM创建逻辑概念

    ​ 我们以LVM对磁盘进行动态管理后,使硬盘以逻辑卷的形式呈献给上层服务的。所以我们操作的目的就是创建LV,用LV去替代我们之前的分区,我们通过对逻辑卷进行格式化,然后挂在就可以使用了。步骤如下:

    img

    (1)将硬盘格式化为PV(physical volume),格式化过程中会将底层的硬盘划分成了一个一个的PE,LVM磁盘管理中每个PE默认大小为4M,可以理解为PE是逻辑卷管理的最基本单位。

    (2)在硬盘格式化成PV之后,第二步就是创建一个卷组VG(volume group),我们可以把卷组想象成一个空间池,它是用来装PE的,我们可把一个或者多个PV加到VG中,我们第一步操作就已经将硬盘划分成了多个PE,所以将多个PV加入VG后,VG中就会出现多个来自不同PV的PE。我们上面格式化了两块硬盘,每块硬盘产生了3个PE,然后都放进了VG中,这6个PE就是硬盘的PE之和,可以理解为硬盘的容量

    (3)PV和VG创建好后是不能被直接使用的,我们能使用的是在VG基础上划分的LV(logical volume)。创建LV其实就是从VG中拿出指定数量的PE。PE可以来自不同的PV。这时候我们创建第一个LV,指定16M的大小,也就是占4个PE,其中三个来自第一块硬盘,一个来自第二块硬盘。现在只剩两个PE了,所以说创建第二个LV的时候,它最大只能有两个PE的大小了。

    注:

    ​ <1>创建逻辑卷的大小取决于PE的数量
    ​ <2> LV的大小必须是PE的整数倍

    (4)将创建好的LV进行文件系统格式化,然后使用mount进行挂载,这时我们就可以像平常使用分区一样使用逻辑卷了。

    (5)对LVM的工作原理进行总结

    a. 物理磁盘被格式化为PV,空间被划分成一个个的PE
    b. 将不同的PV加入到同一个VG中,不同PV的PE全部放到了VG的PE池中
    c. LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的磁盘
    d. LV在格式化文件系统后挂载就可以使用了
    e. LV的扩充缩减实际上就是增加或减少PE数量,其过程不会丢失数据
    

    (6)如果我们要对LV进行扩充,首先加入一块磁盘,然后格式化成PV,将该PV加入到VG中,然后我们就可以从VG中拿出空闲的PE对LV进行扩充了

    img

    五、创建逻辑卷

    ​ (a)虚拟三块8G物理硬盘,可以通过fdisk –l命令查看
    ​ (b) 先将/dev/sdb,/dev/sdc格式为PV
    ​ (c) 使用pvs查看简单信息,pvdisplay查看详细信息
    若是不存在pvdisplay,则是没有安装lvm,只需要执行以下命令进行安装

    yum install lvm2
    

    (1)使用pvcreate命令将物理磁盘格式化成PV,使用procreate命令。

    [root@onion ~]# pvcreate /dev/sdb /dev/sdc 
     Physical volume "/dev/sdb" successfully created
     Physical volume "/dev/sdc" successfully created
    [root@onion ~]# pvs
     PV     VG  Fmt  Attr PSize PFree
     /dev/sdb     lvm2 ---- 8.00g 8.00g
     /dev/sdc     lvm2 ---- 8.00g 8.00g
    [root@onion ~]# pvdisplay 
     "/dev/sdb" is a new physical volume of "8.00 GiB"
     --- NEW Physical volume ---
     PV Name        /dev/sdb
     VG Name        
     PV Size        8.00 GiB
     Allocatable      NO
     PE Size        0  
     Total PE        0
     Free PE        0
     Allocated PE      0
     PV UUID        JgXTlg-VPO8-y4qR-vJP2-WSCq-MR8T-IaqAif
     "/dev/sdc" is a new physical volume of "8.00 GiB"
    
     --- NEW Physical volume ---
     PV Name        /dev/sdc
     VG Name        
     PV Size        8.00 GiB
     Allocatable      NO
     PE Size        0  
     Total PE        0
     Free PE        0
     Allocated PE      0
     PV UUID        F8Gq56-M9ff-i9e9-TEvF-1BOL-qsiJ-PTuApu
    

    (2)创建卷组VG,并将PV加入到VG,通过vgcreate命令

    [root@onion ~]# vgcreate pool /dev/sdb /dev/sdc 
     Volume group "pool" successfully created
    [root@onion ~]# vgs
     VG  #PV #LV #SN Attr  VSize  VFree 
     pool  2  0  0 wz--n- 15.99g 15.99g
    [root@onion ~]# vgdisplay 
     --- Volume group ---
     VG Name        pool
     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        15.99 GiB
     PE Size        4.00 MiB
     Total PE        4094
     Alloc PE / Size    0 / 0  
     Free  PE / Size    4094 / 15.99 GiB
     VG UUID        XXz1Jl-3U2V-wct9-QhYG-KHdL-tUVu-i3p7Ry
    

    (3)基于VG创建LV,通过lvcreate命令

    [root@onion ~]# lvcreate -n mylv -L 2G pool
     Logical volume "mylv" created.
    [root@onion ~]# lvs
     LV  VG  Attr    LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
     mylv pool -wi-a----- 2.00g
    [root@onion ~]# lvdisplay 
     --- Logical volume ---
     LV Path         /dev/pool/mylv
     LV Name         mylv
     VG Name         pool
     LV UUID         BPw3Gi-Kcr3-WQJX-yCxO-Rwef-hrvB-fZ1UO1
     LV Write Access     read/write
     LV Creation host, time onion, 2018-07-15 09:05:22 +0800
     LV Status        available
     # open         0
     LV Size         2.00 GiB
     Current LE       512
     Segments        1
     Allocation       inherit
     Read ahead sectors   auto
     - currently set to   256
     Block device      253:0
    

    六、 扩容一个逻辑卷

    在传统的硬盘管理模式中,如果我们一个分区大小不够用了(硬盘还有剩余空间的时候),需要扩容,那只能将此分区所有的信息转到别处,卸载后重新分区,最后再将新的分区挂载上去。如果在生产环境中,这样的操作是不可想象的,费时费力。而使用LVM就方便很多了,见图:

    img

    ​ 从上图可以看出,所谓扩容就是往LV中增加PE的数量,增加多少取决你VG中空闲的PE数量。【注意】逻辑卷的扩容可以在线进行,不需要卸载逻辑卷。这样的管理方式对于7*24小时小对外提供服务的公司就非常有必要了。

    第一种情况

    VG中有足够的剩余空间(能看到空闲13.99G),这时为 LV增加1G的容量。步骤如下:

     [root@onion ~]# vgdisplay 
     --- Volume group ---
     VG Name        pool
     System ID       
     Format         lvm2
     Metadata Areas     2
     Metadata Sequence No  4
     VG Access       read/write
     VG Status       resizable
     MAX LV         0
     Cur LV         1
     Open LV        1
     Max PV         0
     Cur PV         2
     Act PV         2
     VG Size        15.99 GiB
     PE Size        4.00 MiB
     Total PE        4094
     Alloc PE / Size    512 / 2.00 GiB
     Free  PE / Size    3582 / 13.99 GiB
     VG UUID        YUlucV-5pVP-W73A-DAsR-EIlw-jnVf-l5Y9M1
    

    (1)扩容逻辑卷,使用lvextend命令

    [root@onion ~]# lvextend -L +1G /dev/pool/mylv 
     Size of logical volume pool/mylv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
     Logical volume mylv successfully resized.
    

    (2)查看逻辑卷信息(发现LV已经是3G了)

    [root@onion ~]# lvdisplay 
     --- Logical volume ---
     LV Path         /dev/pool/mylv
     LV Name         mylv
     VG Name         pool
     LV UUID         Kfv9kw-h0nz-eadv-1cu7-tBen-5Dx5-wBUOI1
     LV Write Access     read/write
     LV Creation host, time onion, 2018-07-15 10:44:48 +0800
     LV Status        available
     # open         1
     LV Size         3.00 GiB
     Current LE       768
     Segments        1
     Allocation       inherit
     Read ahead sectors   auto
     - currently set to   256
     Block device      253:0
    [root@onion ~]# df -hT
    Filesystem        Type  Size  Used Avail Use% Mounted on
    /dev/sda3        ext4   48G  1.5G  44G  4% /
    tmpfs          tmpfs  491M   0  491M  0% /dev/shm
    /dev/sda1        ext4  190M  35M  146M  19% /boot
    /dev/mapper/pool-mylv  ext4  2.0G  3.0M  1.9G  1% /mnt
    

    (3)我们上面可以看到仅仅是LV的大小有改变,而真实文件系统的大小未改变。这是因为我们在创建完LV之后就立马格式化为文件系统了,此后我们对逻辑卷的修改,是不会直接影响到文件系统的。这时候就要用到一个更新的命令resize2fs

    [root@onion ~]# resize2fs /dev/mapper/pool-mylv 
    resize2fs 1.41.12 (17-May-2010)
    Filesystem at /dev/mapper/pool-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/pool-mylv to 786432 (4k) blocks.
    The filesystem on /dev/mapper/pool-mylv is now 786432 blocks long.
     
    [root@onion ~]# df -hT
    Filesystem      Type  Size  Used Avail Use% Mounted on
    /dev/sda3       ext4   48G  1.5G  44G  4% /
    tmpfs         tmpfs  491M   0  491M  0% /dev/shm
    /dev/sda1       ext4  190M  35M  146M  19% /boot
    /dev/mapper/pool-mylv
    ext4  2.9G  3.0M  2.8G  1% /mnt
    

    第二种情况

    VG中没有足够的剩余空间(能看到空闲12.99G),这时为 LV增加16G的容量。步骤如下:

    [root@onion ~]# vgdisplay 
     --- Volume group ---
     VG Name        pool
     System ID       
     Format         lvm2
     Metadata Areas     2
     Metadata Sequence No  5
     VG Access       read/write
     VG Status       resizable
     MAX LV         0
     Cur LV         1
     Open LV        1
     Max PV         0
     Cur PV         2
     Act PV         2
     VG Size        15.99 GiB
     PE Size        4.00 MiB
     Total PE        4094
     Alloc PE / Size    768 / 3.00 GiB
     Free  PE / Size    3326 / 12.99 GiB
     VG UUID        YUlucV-5pVP-W73A-DAsR-EIlw-jnVf-l5Y9M1
    

    (1)首先尝试增加操作(提示PE数量不够)

    [root@onion ~]# lvextend -L +16G /dev/pool/mylv 
     Insufficient free space: 4096 extents needed, but only 3326 available
    

    (2)新增一块硬盘,格式化为PV。

    [root@onion ~]# pvcreate /dev/sdd 
     Physical volume "/dev/sdd" successfully created
    [root@onion ~]# pvs
     PV     VG  Fmt  Attr PSize PFree
     /dev/sdb  pool lvm2 a--u 8.00g 5.00g
     /dev/sdc  pool lvm2 a--u 8.00g 8.00g
     /dev/sdd  pool lvm2 a--u 8.00g 8.00g
    

    (3)将新的PV添加到指定的VG中

    [root@onion ~]# vgextend pool /dev/sdd 
     Volume group "pool" successfully extended
    [root@onion ~]# vgdisplay 
     --- Volume group ---
     VG Name        pool
     System ID       
     Format         lvm2
     Metadata Areas     3
     Metadata Sequence No  6
     VG Access       read/write
     VG Status       resizable
     MAX LV         0
     Cur LV         1
     Open LV        1
     Max PV         0
     Cur PV         3
     Act PV         3
     VG Size        23.99 GiB
     PE Size        4.00 MiB
     Total PE        6141
     Alloc PE / Size    768 / 3.00 GiB
     Free  PE / Size    5373 / 20.99 GiB
     VG UUID        YUlucV-5pVP-W73A-DAsR-EIlw-jnVf-l5Y9M1
    

    (4)VG空闲空间已经超过16G了,这时候再去扩容LV

    [root@onion ~]# lvextend -L +16G /dev/pool/mylv 
     Insufficient free space: 4096 extents needed, but only 3326 available
    [root@onion ~]# resize2fs /dev/pool/mylv 
    resize2fs 1.41.12 (17-May-2010)
    Filesystem at /dev/pool/mylv is mounted on /mnt; on-line resizing required
    old desc_blocks = 1, new_desc_blocks = 2
    Performing an on-line resize of /dev/pool/mylv to 4980736 (4k) blocks.
    The filesystem on /dev/pool/mylv is now 4980736 blocks long.
    [root@onion ~]# df -hT
    Filesystem      Type  Size  Used Avail Use% Mounted on
    /dev/sda3       ext4   48G  1.5G  44G  4% /
    tmpfs         tmpfs  491M   0  491M  0% /dev/shm
    /dev/sda1       ext4  190M  35M  146M  19% /boot
    /dev/mapper/pool-mylv
    ext4   19G  5.5M  18G  1% /mnt
    

    七、 缩小一个逻辑卷

    缩小逻辑卷其实就是从LV中拿出指定指定数量的PE放回VG。【注意】逻辑卷的缩小操作必须要先卸载逻辑卷才行,否则可能会造成逻辑卷中的文件发生损坏。这时我们将LV缩小至10G,步骤如下:

    img

    (1)通过umount卸载已挂在的逻辑卷

    [root@onion ~]# umount /mnt/
    [root@onion ~]# df -hT
    Filesystem   Type  Size  Used Avail Use% Mounted on
    /dev/sda3    ext4   48G  1.5G  44G  4% /
    tmpfs      tmpfs  491M   0  491M  0% /dev/shm
    /dev/sda1    ext4  190M  35M  146M  19% /boot
    

    (2)缩小LV的大小:我们前面讲到对LV扩容后,需要执行resize2fs更新我们的文件系统,但是在对LV进行缩小操作时,必须先执行缩小的操作(直接执行会提示检查文件系统)

    [root@onion ~]# resize2fs /dev/pool/mylv 10G
    resize2fs 1.41.12 (17-May-2010)
    Please run 'e2fsck -f /dev/pool/mylv' first.
    [root@onion ~]# e2fsck -f /dev/pool/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/pool/mylv: 12/1245184 files (0.0% non-contiguous), 95937/4980736 blocks
    

    (3)检查完毕后,再使用resize2fs去缩小文件系统

    [root@onion ~]# resize2fs /dev/pool/mylv 10G
    resize2fs 1.41.12 (17-May-2010)
    Resizing the filesystem on /dev/pool/mylv to 2621440 (4k) blocks.
    The filesystem on /dev/pool/mylv is now 2621440 blocks long.
    

    (4)跟扩容的顺序刚好相反,我们先缩小了文件系统,再缩小LV,使用lvreduce命令

    [root@onion ~]# lvreduce -L -9G /dev/pool/mylv 
     WARNING: Reducing active logical volume to 10.00 GiB.
     THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce pool/mylv? [y/n]: y
    

    注:这里会提示一个警告可能会损坏我们的文件,这种情况会出现在 当我们需要缩小的文件大小与实际操作时缩小(resize2fs)的文件大小不一致时,比如这里我如果多缩小了1个G大小的逻辑卷,这个时候就会出现文件损坏的情况

     Size of logical volume pool/mylv changed from 19.00 GiB (4864 extents) to 10.00 GiB (2560 extents).
     Logical volume mylv successfully resized.
    [root@onion ~]# lvs
     LV  VG  Attr    LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
     mylv pool -wi-a----- 10.00g
    

    【注意】缩小逻辑卷是一个非常危险的操作,稍不注意就可能损坏我们的逻辑卷,造成文件的丢失或损坏,所以我们一般不要对逻辑卷进行缩减的操作

    (5)缩小之后,再将逻辑卷挂载在/mnt下,看里面的文件是否存在。

    八、缩小卷组

    ​ 当我们VG中空间足够用,有很多剩余的时候,我们想把里面没用到的硬盘拆下来,以作它用。这时候就需要我们去执行缩小卷组的操作了。

    img

    (1)首先使用pvdisplay查看各PV的信息,可以看到/dev/sdd空间是未被使用的

    [root@onion ~]# pvdisplay 
     --- Physical volume ---
     PV Name        /dev/sdb
     VG Name        pool
     PV Size        8.00 GiB / not usable 4.00 MiB
     Allocatable      yes (but full)
     PE Size        4.00 MiB
     Total PE        2047
     Free PE        0
     Allocated PE      2047
     PV UUID        SfW2Wo-NeZM-KXSX-UqQj-VWHV-NAL6-UQb3l
    
     --- Physical volume ---
     PV Name        /dev/sdc
     VG Name        pool
     PV Size        8.00 GiB / not usable 4.00 MiB
     Allocatable      yes 
     PE Size        4.00 MiB
     Total PE        2047
     Free PE        1534
     Allocated PE      513
     PV UUID        F8Gq56-M9ff-i9e9-TEvF-1BOL-qsiJ-PTuApu
    
     --- Physical volume ---
     PV Name        /dev/sdd
     VG Name        pool
     PV Size        8.00 GiB / not usable 4.00 MiB
     Allocatable      yes 
     PE Size        4.00 MiB
     Total PE        2047
     Free PE        2047
     Allocated PE      0
     PV UUID        IT2wzW-bVBQ-NU7C-9EbU-3uie-W1LF-Vx3clj
    

    (2)确定磁盘后,还是先卸载逻辑卷

    [root@onion ~]# umount /mnt/
    [root@onion ~]# df -hT
    Filesystem   Type  Size  Used Avail Use% Mounted on
    /dev/sda3    ext4   48G  1.5G  44G  4% /
    tmpfs      tmpfs  491M   0  491M  0% /dev/shm
    /dev/sda1    ext4  190M  35M  146M  19% /boot
    

    (3)将这个PV从指定卷中移除并查看。

    [root@onion ~]# vgreduce pool /dev/sdd 
     Removed "/dev/sdd" from volume group "pool"
    [root@onion ~]# vgdisplay 
     --- Volume group ---
     VG Name        pool
     System ID       
     Format         lvm2
     Metadata Areas     2
     Metadata Sequence No  9
     VG Access       read/write
     VG Status       resizable
     MAX LV         0
     Cur LV         1
     Open LV        0
     Max PV         0
     Cur PV         2
     Act PV         2
     VG Size        15.99 GiB
     PE Size        4.00 MiB
     Total PE        4094
     Alloc PE / Size    2560 / 10.00 GiB
     Free  PE / Size    1534 / 5.99 GiB
     VG UUID        YUlucV-5pVP-W73A-DAsR-EIlw-jnVf-l5Y9M1
    

    (4)查看PV情况(发现还是有/dev/sdd)

    [root@onion ~]# pvs
     PV     VG  Fmt  Attr PSize PFree
     /dev/sdb  pool lvm2 a--u 8.00g   0 
     /dev/sdc  pool lvm2 a--u 8.00g 5.99g
     /dev/sdd     lvm2 ---- 8.00g 8.00g
    

    (5)移除/dev/sdd这个PV

    [root@onion ~]# pvremove /dev/sdd 
     Labels on physical volume "/dev/sdd" successfully wiped
    [root@onion ~]# pvs
     PV     VG  Fmt  Attr PSize PFree
     /dev/sdb  pool lvm2 a--u 8.00g   0 
     /dev/sdc  pool lvm2 a--u 8.00g 5.99g
    

    (6)重新挂载,查看文件是否改变

    [root@onion ~]# mount /dev/pool/mylv /mnt
    [root@onion ~]# ll /mnt/
    total 16
    -rw-r--r--. 1 root root   0 Jul 15 10:56 koala
    drwx------. 2 root root 16384 Jul 15 10:46 lost+found
    

    九、删除逻辑卷

    对于不想用的逻辑卷,可以删除掉。【注意】创建LV有顺序,删除也是要严格按照顺序的。
    卸载——>删除逻辑卷——>删除卷组——>删除物理卷

    1. 卸载逻辑卷,使用umount命令

    2. 删除逻辑卷,使用lvremove命令

    3. 删除卷组,使用 vgremove命令

    4. 删除物理卷,使用pvremove命令

    错误方法:

    [root@onion ~]# lvremove /dev/pool/mylv 
     Logical volume pool/mylv contains a filesystem in use.
    [root@onion ~]# vgremove pool
    Do you really want to remove volume group "pool" containing 1 logical volumes? [y/n]: y
     Logical volume pool/mylv contains a filesystem in use.
    

    正确方法:

    [root@onion ~]# umount /dev/pool/mylv
    [root@onion ~]# lvremove /dev/pool/mylv 
    Do you really want to remove active logical volume mylv? [y/n]: y
     Logical volume "mylv" successfully removed
    [root@onion ~]# vgremove pool
     Volume group "pool" successfully removed
    [root@onion ~]# pvremove /dev/sdb
     Labels on physical volume "/dev/sdb" successfully wiped
    

    查看

    [root@onion ~]# lvs
    [root@onion ~]# vgs
    [root@onion ~]# pvs
     PV     VG  Fmt  Attr PSize PFree
     /dev/sdc     lvm2 ---- 8.00g 8.00g
    
  • 相关阅读:
    窗体间传值
    winform 导出datagridview 到excel
    单击单元格任意地方事件
    CLR via 随书笔记
    值类型和引用类型的区别
    System.Object简介
    装箱与拆箱
    静态类
    关于Linq2Sql有外键表的更新引发的问题。
    滑动切换页面
  • 原文地址:https://www.cnblogs.com/wzxmt/p/12384915.html
Copyright © 2011-2022 走看看