zoukankan      html  css  js  c++  java
  • Disk:磁盘管理之LVM和系统磁盘扩容

    简介


    • 小伙伴们好,好久不见,今天想给大家介绍一下关于磁盘管理的方法和心得;磁盘管理可谓运维工作中的重要内容,主要包括磁盘的合理规划以及扩缩容
    • 常用的磁盘管理方法为LVM(Logical Volume Manager 逻辑卷管理),这种方法能够实现磁盘的灵活扩缩容,使得磁盘得以充分使用,节约成本;但LVM只适用于数据盘的管理,对于系统盘,则需要通过其他工具进行扩容,本文将从这两个方面展开介绍,不足之处,欢迎批评指正。

    LVM逻辑卷管理


    关于LVM的一些知识

    • LVM利用Linux内核的 device-mapper 来实现存储系统的虚拟化(系统分区独立于底层硬件)。通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区,可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间。
    • 简单来说:LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。

    LVM的基本组成块如下:

    • 物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。
    • 卷组Volume group (VG):将一组物理卷收集为一个管理单元。
    • 逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。

    LVM的操作命令:

    • 如图所示,为LVM的逻辑图,硬盘分区,分区创建为PV,PV创建为VG,VG创建为LV
      img-w500

    下面举几个例子

    创建逻辑卷和删除逻辑卷
    fdisk /dev/sdb                              # 对磁盘进行分区
    n, +3G, t, 8e, w
    partprobe /dev/sdb
    cat /proc/partitions 
    pvcreate /dev/sdb{5,6}                      # 创建PV
    pvs                                         # 查看PV
    pvdisplay                                   # 查看PV详情
    pvdisplay /dev/sdb5                         # 只显示一个PV
    pvscan                                      # 扫描存在的PV
    vgcreate myvg /dev/sdb{5,6}                 # 创建vg
    vgs                                         # 显示创建的vg
    vgdisplay myvg                              # 显示vg详情
    pvdisplay /dev/sdb5                         # 查看PE
    vgremove myvg                               # 删除myvg
    vgcreate -s 8M myvg /dev/sdb{5,6}           # 创建PE为8MB的VG
    pvs                                         # 查看pv属于哪个vg
    pvmove /dev/sdb5                            # 移除一个pv
    vgreduce myvg /dev/sdb5                     # 从vg中移除一个pv
    pvcreate /dev/sdb7                          # 创建pv
    vgextend myvg /dev/sdb7                     # vg扩展
    lvcreate -L 50M -n testlv myvg              # 创建lv
    lvs                                         # 显示lv
    lvdisplay                                   # 显示lv详情
    lvdisplay /dev/myvg/testlv                  # 显示testlv详情
    mke2fs -j /dev/myvg/testlv                  # 格式化lv
    mount /dev/myvg/testlv /mnt/                # 挂载lv
    umount /mnt/                                # 卸载mnt
    lvremove /dev/myvg/testlv                   # 移除lv
    
    扩展LG
    lvcreate -L 2G -n testlv myvg               # 创建lv
    mke2fs -j /dev/myvg/testlv                  # 格式化lv
    mkdir /users
    vim /etc/fstab                              # 设定开机自动挂载
    /dev/myvg/testlv /users ext4 defaults 0 0  # 将该条目添加到fstab
    mount -a                                    # 挂载fstab内容
    mount                                       # 查看挂载
    df -lh                                      # 查看挂载大小
    vgs                                         # 确保VFree足够
    lvextend -L 5G /dev/myvg/testlv             # 扩展lv
    lvextend /dev/myvg/testlv  /dev/sdb7        # 动态扩展lv
    df -lhP                                     # 查看文件系统磁盘利用率
    lvs                                         # 查看lv大小
    resize2fs -p /dev/myvg/testlv               # 更新逻辑磁盘扩展
    df -lhP                                     # 查看文件系统磁盘利用率
    
    缩减LG
    df -lhP                                     # 查看文件系统磁盘利用率
    umount /users/                              # 先卸载
    mount                                       # 查看挂载
    e2fsck -f /dev/myvg/testlv                  # 强行进行文件系统检测
    resize2fs /dev/myvg/testlv 3G               # 调整磁盘逻辑大小
    lvreduce -L 3G /dev/myvg/testlv             # 调整磁盘物理大小
    mount -a                                    # 重新挂载
    df -lhP                                     # 查看系统磁盘利用率
    cat test.txt                                # 查看文件是否正常
    
    快照卷
    lvcreate -L 50M -n testlv-snap -s -p r /dev/myvg/testlv  # 创建快照卷
    mount /dev/myvg/testlv-snap /mnt/           # 挂载快照
    cat test.txt                                # 查看文件是否正常 
    cd /mnt/
    tar jcf /tmp/users.tar.bz2 ./*              # 归档文件
    umount /mnt/                                # 卸载mnt
    lvremove /dev/myvg/tetlv-snap               # 移除快照
    tar vxf /tmp/users.tar.bz2 -C ./            # 展开归档
    

    系统盘扩容


    • 系统盘一般在系统创建的时候生成,无法进行逻辑卷规划,但随着时间的推移,系统盘不够用的情况常有发生,因此系统盘的扩容则成为一个很重要的工作,下面就介绍扩容系统盘的方法
    • 根据系统安装扩容工具
    # CentOS 系统
    yum install cloud-utils-growpart
    yum install xfsprogs
    
    # Ubuntu、Debain系统
    apt install cloud-guest-utils
    apt install xfsprogs
    
    • 运行fdisk -l命令查看现有云盘大小
    • 如果磁盘不足,可先在云平台进行扩容
    [root@ecshost ~]# fdisk -l
    Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 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: 0x0008d73a
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048    41943039    20970496   83  Linux
    
    • 运行df -h命令查看云盘分区大小
    • 也就是查看系统盘分区的大小
    [root@ecshost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        20G  1.5G   18G   8% /
    devtmpfs        7.8G     0  7.8G   0% /dev
    tmpfs           7.8G     0  7.8G   0% /dev/shm
    tmpfs           7.8G  344K  7.8G   1% /run
    tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
    tmpfs           1.6G     0  1.6G   0% /run/user/0
    
    • 运行growpart <DeviceName> <PartionNumber>命令调用growpart为需要扩容的云盘和对应的第几个分区扩容
    [root@ecshost ~]# growpart /dev/vda 1
    CHANGED: partition=1 start=2048 old: size=41940992 end=41943040 new: size=209710462,end=209712510
    
    • 运行resize2fs <PartitionName>命令调用resize2fs扩容文件系统
    [root@ecshost ~]# resize2fs /dev/vda1
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/vda1 is mounted on /; on-line resizing required
    old_desc_blocks = 2, new_desc_blocks = 7
    The filesystem on /dev/vda1 is now 26213807 blocks long.
    
    • 运行df -h命令查看云盘分区大小
    [root@ecshost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        99G  1.6G   93G   2% /
    devtmpfs        7.8G     0  7.8G   0% /dev
    tmpfs           7.8G     0  7.8G   0% /dev/shm
    tmpfs           7.8G  500K  7.8G   1% /run
    tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
    tmpfs           1.6G     0  1.6G   0% /run/user/0
    
    • 系统盘的扩容实现了,但系统盘的缩容也时有需求,现在还不知道有什么好的解决方案,希望有见解的小伙伴留言讨论

    总结


    • 逻辑卷的管理方法可有效的实现数据盘的扩缩容,建议挂载数据盘以100G的标准添加,设定规范的PV大小,方便磁盘的管理
    • 系统盘目前只能够实现扩容,建议初始系统盘设定规范,比如100G,使其不至于过大浪费或过小需要频繁扩容

    参考文档


  • 相关阅读:
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    Java实现 LeetCode 803 打砖块 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    Java实现 LeetCode 803 打砖块 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    英文标点
    post sharp 与log4net 结合使用,含执行源码 转拷
  • 原文地址:https://www.cnblogs.com/William-Guozi/p/disk-manager.html
Copyright © 2011-2022 走看看