• Linux系统LVM逻辑卷创建过程以及自动化脚本


    转至:https://cloud.tencent.com/developer/article/1068328

    Linux系统LVM逻辑卷创建过程以及自动化脚本

    最近在上海新建机房的时候,给了我 2 台 M2 机型服务器,在做初始化的时候发现有一堆磁盘:

    [root@Centos64:~]# fdisk -l | grep '300.1 GB' | sort
    Disk /dev/sda: 300.1 GB, 300069052416 bytes
    Disk /dev/sdb: 300.1 GB, 300069052416 bytes
    Disk /dev/sdc: 300.1 GB, 300069052416 bytes
    Disk /dev/sdd: 300.1 GB, 300069052416 bytes
    Disk /dev/sde: 300.1 GB, 300069052416 bytes
    Disk /dev/sdf: 300.1 GB, 300069052416 bytes
    Disk /dev/sdg: 300.1 GB, 300069052416 bytes
    Disk /dev/sdh: 300.1 GB, 300069052416 bytes
    Disk /dev/sdi: 300.1 GB, 300069052416 bytes
    Disk /dev/sdj: 300.1 GB, 300069052416 bytes
    Disk /dev/sdk: 300.1 GB, 300069052416 bytes
    Disk /dev/sdl: 300.1 GB, 300069052416 bytes

    其中挂载的只有 /dev/sda,其他都在那闲着。运管那边告诉我这个机型不能做 raid。而根据我这边的业务需求,我并不能一次用到这么多分区,所以必须使用 LVM 合并使用。

    关于 LVM 的创建,目前网络上一堆详细教程,用起来也非常简单,这里就只贴一下我的过程。

    ①、用 fdisk 给每一个磁盘创建一个 8e 分区:

    [root@Centos64:~]# fdisk /dev/sdb
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n               #创建
    Command action
       e   extended
       p   primary partition (1-4)
    p                                     #选择主分区
    Partition number (1-4): 1 
    First cylinder (1-36481, default 1): 1
    Last cylinder, +cylinders or +size{K,M,G} (1-36481, default 36481): #直接回车选择最大
    Using default value 36481
    
    Command (m for help): t              #输入t进入类型选择
    Selected partition 1
    Hex code (type L to list codes): 8e  #输入8e格式
    Changed system type of partition 1 to 8e (Linux LVM)
    
    Command (m for help): w              #w保存

    这样就完成了一块磁盘,接着我们依次将其他 sdc 到 sdl 的磁盘也操作一把。

    ②、全部完成后,使用 pvcreate 将所有分区转化成物理卷,即添加 LVM 属性信息并划分 PE 存储单元:

    [root@Centos64:~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
      
      Physical volume "/dev/sdb1" successfully created
      Physical volume "/dev/sdc1" successfully created
      Physical volume "/dev/sdd1" successfully created
      Physical volume "/dev/sde1" successfully created
      Physical volume "/dev/sdf1" successfully created
      Physical volume "/dev/sdg1" successfully created
      Physical volume "/dev/sdh1" successfully created
      Physical volume "/dev/sdi1" successfully created
      Physical volume "/dev/sdj1" successfully created
      Physical volume "/dev/sdk1" successfully created
      Physical volume "/dev/sdl1" successfully created

    创建完 PV 之后,就可以使用 pvdisplay 或 pvs 查看详细信息了,篇幅有限,这里我就不贴了。

    ③、下面我们需要创建一个 VG,然后 PV 都加入到这个卷组当中,卷名可自定义,比如 vg:

    [root@Centos64:~]# vgcreate vg /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
      
        Volume group "vg" successfully created

    同样,在创建好 VG 以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看 VG 的信息(略)

    ④、接着,使用 lvcreate 命令基于 VG 创建逻辑卷,vg 和 lvm 我们自定义的名称:

    [root@Centos64:~]# lvcreate -l 100%VG -n lvm vg
      
       Logical volume "lvm" created

    同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息(略)

    ⑤、格式化创建的逻辑卷:

    [root@Centos64:~]# mkfs.ext4 /dev/vg/lvm 

    ⑥、挂载分区:

    [root@Centos64:~]# mkdir /data
    [root@Centos64:~]# echo '/dev/vg/lvm  /data  ext4 noatime,acl,user_xattr  1 2' >> /dev/fstab
    [root@Centos64:~]# mount -a
    [root@Centos64:~]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda1             9.9G  2.1G  7.4G  22% /
    /dev/sda3              20G  370M   19G   2% /usr/local
    tmpfs                  16G     0   16G   0% /dev/shm
    /dev/sda4             244G  205M  232G   1% /data1
    /dev/mapper/vg-lvm   3.1T  932M  3.0T   1% /data

    这样,我们就完成了 LVM 的手工创建过程了,我还有一台 M2 要弄,而且听运管说以后会继续交付这类机型,我可不想这么苦逼的操作了,光那个创建 8e 格式分区就已经很坑了。

    所以,就将上面的操作串成脚本,一键完成:

    #!/bin/bash
    partition=/data                # 定义最终挂载的名称
    vgname=vg                      # 定义逻辑卷组的名称
    lvname=lvm                     # 定义逻辑卷的名称
    code='b c d e f g h i k j l'   # 根据分区的实际情况修改
    
    disk=
    for i in $code  
    do
    fdisk /dev/sd$i << EOF          # 这里自动化完成了所有分区fdisk苦逼的交互步骤
    n
    p
    1
    1
    
    t
    8e
    w
    EOF
    disk="$disk /dev/sd${i}1" # 将所有分区拼起来
    done
    
    pvcreate $disk
    vgcreate $vgname $disk
    lvcreate -l 100%VG -n $lvmname $vgname
    mkfs.ext4 /dev/$vgname/$lvmname
    
    mkdir -p $partition
    echo "/dev/$vgname/$lvmname  $partition  ext4 noatime,acl,user_xattr  1 2' >> /dev/fstab
    mount -a
    df -h

    哦了,就写这么多,以备后用。

  • 相关阅读:
    深入理解计算机系统(第三版)作业题答案(第三章)
    深入理解计算机系统(第三版)作业题答案(第二章)
    greedy算法(python版)
    Dijkstra算法(Swift版)
    Breadth-first search 算法(Swift版)
    递归演示程序(swift)
    Node.js之异步流控制
    Node.js之单利模式
    Node.js之循环依赖
    一个完整的Node.js RESTful API
  • 原文地址:https://www.cnblogs.com/my-first-blog-lgz/p/13404823.html
Copyright © 2020-2023  润新知