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,使其不至于过大浪费或过小需要频繁扩容

    参考文档


  • 相关阅读:
    21.Android之SQLite数据库学习
    20.(转)Android的样式(Style)和主题(Theme)
    19.Android之文件存储方法学习
    18.Android之SharedPreferences数据存储学习
    17.(转) Android之四大基本组件介绍与生命周期
    16.(转) Android之Support v4、v7、v13的区别和应用场景
    15.Android中LinearLayout布局一些小记录
    14.Android之Layout布局学习
    13. (转) Android一些布局属性详解
    12.Android之Tabhost组件学习
  • 原文地址:https://www.cnblogs.com/William-Guozi/p/disk-manager.html
Copyright © 2011-2022 走看看