服务器操作指北(3)LVM 组建 RAID5
创建于 2023-03-31
更新于 2023-10-27
科技
服务器
LVM

前言

实验室最近又新添置了两台服务器,一台偏向计算,一台偏向存储。存储的这台服务器,出厂竟然还没装系统,机房服务器上架的时候问安装人员,说忘了……索性就自己研究了一下 IPMI 远程装机的操作方式,装了个 Ubuntu 20.04 上去,鉴于网络认证之类的东西还需要 GUI,就没有装服务器版。另外由于还有三块 16T 机械硬盘,在安装的时候选择了 LVM

一、LVM 简介

逻辑卷管理(Logical volume management,LVM),为电脑中的大量存储设备(Mass storage devices)提供更有弹性的硬盘分割方式。它是一种抽象化存储技术,实现的方式,根据操作系统而有所不同。基本上,它是在驱动程序与操作系统之间增加一个逻辑层,以方便系统管理硬盘分割系统。

(摘自Wikipedia 逻辑卷管理

二、磁盘维护

考虑到服务器后续还要继续加装硬盘,先组 raid 后挂载 lvm 的方式扩展起来麻烦一点,单纯做存储也不是很考虑存储速度,所以就采用了在 lvm 的基础上做 raid 的方案。

  1. 硬盘分区

    传统的 fdisk 命令仅支持最大 2T 分区的创建,16T 硬盘分区需要使用 parted 命令。

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 查询硬盘信息,默认情况下新硬盘应该是 sdb、sdc、sdd 依次排列 lsblk -o name,size,fstype,type,mountpoint # 查询硬盘挂载点,默认情况下应该是/dev/sdb、/dev/sdc、/dev/sdd 依次排列 sudo fdisk -l # 使用 parted 进行分区(其他两块硬盘同理) sudo parted /dev/sdb > GNU Parted 3.3 > Using /dev/sdb > Welcome to GNU Parted! Type 'help' to view a list of commands. > (parted) mklabel gpt # 设置为 GPT 分区表 > (parted) mkpart p 0% 100% # 全盘设置一个分区,不要使用"mkpart p 0 -1",会提示分区未对齐 > (parted) print # 检查分区情况,默认分区标号应该是 1 > Model: ATA TOSHIBA MG08ACA1 (scsi) > Disk /dev/sdb: 16.0TB > Sector size (logical/physical): 512B/4096B > Partition Table: gpt > Disk Flags: > > Number Start End Size File system Name Flags > 1 1049kB 16.0TB 16.0TB p > (parted) toggle 1 lvm # 将当前分区标记为 lvm

    其余硬盘也进行相同操作,最后使用 partprobe 命令使系统重新识别分区表。

  2. 物理卷(PV)创建

    分区完成后,使用 pvcreate 命令创建用于 lvm 管理的基本物理卷。

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sudo pvcreate /dev/sdb1 > Physical volume "/dev/sdb1" successfully created. sudo pvcreate /dev/sdc1 > Physical volume "/dev/sdc1" successfully created. sudo pvcreate /dev/sdd1 > Physical volume "/dev/sdd1" successfully created. sudo pvscan # 检查物理卷创建情况 > PV /dev/sda2 VG vgubuntu lvm2 [893.75 GiB / 0 free] > PV /dev/sdb1 lvm2 [14.55 TiB] > PV /dev/sdc1 lvm2 [14.55 TiB] > PV /dev/sdd1 lvm2 [14.55 TiB] > Total: 4 [44.53 TiB] / in use: 1 [893.75 GiB] / in no VG: 3 [<43.66 TiB]
  3. 卷组(VG)创建

    基于物理卷,将三块硬盘构建为卷组

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    sudo vgcreate vg_data /dev/sdb1 /dev/sdc1 /dev/sdd1 # 创建卷组 > Volume group "vg_data" successfully created sudo vgdisplay vg_data # 检查卷组信息 > --- Volume group --- > VG Name vg_data > System ID > Format lvm2 > Metadata Areas 3 > 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 3 > Act PV 3 > VG Size <43.66 TiB > PE Size 4.00 MiB > Total PE 11444733 > Alloc PE / Size 0 / 0 > Free PE / Size 11444733 / <43.66 TiB > VG UUID 4ism44-rf5M-IfNk-ZhVs-dmjb-bQAf-nV1QsH
  4. 逻辑卷(LV)创建

    这一步将进行逻辑卷和 raid 的创建,在 lvm 中创建 raid 只需要通过--type指定 raid 类型即可。

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    sudo lvcreate -n lv_data -l 100%FREE --type=raid5 vg_data > Using default stripesize 64.00 KiB. > Rounding size (11444733 extents) down to stripe boundary size (11444732 extents) > Logical volume "lv_data" created. sudo lvdisplay vg_data/lv_data #检查逻辑卷信息 > --- Logical volume --- > LV Path /dev/vg_data/lv_data > LV Name lv_data > VG Name vg_data > LV UUID Pqmdyk-zkzE-TvjZ-1N6U-fsf5-S01p-mUCr8L > LV Write Access read/write > LV Creation host, time node02, 2023-03-30 21:52:14 +0800 > LV Status available > # open 0 > LV Size <29.11 TiB > Current LE 7629820 > Segments 1 > Allocation inherit > Read ahead sectors auto > - currently set to 768 > Block device 253:8
  5. 文件系统创建与自动挂载

    文件系统的选择一般有 ext4xfs 两种,可以根据生成需求自行确定,这里选择 zfs 作为文件系统。

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sudo apt install xfsprogs # 安装 zfs 工具 sudo mkfs.xfs /dev/vg_data/lv_data # 该步骤等待时间较长,30t 空间耗时在 5 分钟左右 > meta-data=/dev/vg_data/lv_data isize=512 agcount=32, agsize=244154224 blks > = sectsz=4096 attr=2, projid32bit=1 > = crc=1 finobt=1, sparse=1, rmapbt=0 > = reflink=1 > data = bsize=4096 blocks=7812935168, imaxpct=5 > = sunit=16 swidth=32 blks > naming =version 2 bsize=4096 ascii-ci=0, ftype=1 > log =internal log bsize=4096 blocks=521728, version=2 > = sectsz=4096 sunit=1 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 sudo mkdir /mnt/data # 创建挂载点,可根据需求进行修改 sudo mount /dev/vg_data/lv_data /mnt/data # 挂载 df -h # 检查挂载结果 > /dev/mapper/vg_data-lv_data 30T 208G 29T 1% /mnt/data

    mount 命令挂载的硬盘会在重启后失效,开机自动挂载需要修改 /etc/fstab 文件,添加挂载信息如下。

    • 第一个参数 /dev/vg_data/lv_data 是要挂载的分区或存储设备,这里是一个逻辑卷的内核名称。
    • 第二个参数 /mnt/data 是挂载位置,也就是分区或存储设备在文件系统中的路径。
    • 第三个参数 xfs 是文件系统类型,也就是分区或存储设备使用的格式。
    • 第四个参数 defaults 是挂载选项,表示使用文件系统的默认参数,例如 rw, suid, dev, exec, auto, nouser, async 等。
    • 第五个参数 0 是 dump 参数,表示是否使用 dump 工具备份该分区或存储设备,0 表示不备份,1 表示备份。
    • 第六个参数 2 是 pass 参数,表示是否使用 fsck 工具检查该分区或存储设备,0 表示不检查,1 表示优先检查,2 表示次优先检查。
    bash
    1
    /dev/vg_data/lv_data /mnt/data xfs defaults 0 2
  6. 性能测试

    最后使用 dd 命令对磁盘性能进行了测试,结果不是很理想,不过能用就行。

    bash
    1
    2
    sudo dd if=/dev/vg_data/lv_data of=/dev/null bs=1M count=1024 > 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 16.8916 s, 63.6 MB/s

三、杂记

在之前的博客 服务器操作指北(1)DenyHosts 中提过通过 denyhost 工具进行恶意访问屏蔽,但是该工具很长时间未更新了,目前从网上找到使用定时脚本进行屏蔽的方式,原文在参考链接中,记录脚本内容如下。

shell
1
2
3
4
5
6
7
8
#!/bin/bash #set -x list=$(sudo lastb |awk '{print $3}'|sort |uniq -c|awk '{if ($1 > 4) print $2}') for ip in ${list} do echo ALL: ${ip} >> /etc/hosts.deny #加入黑名单 echo > /var/log/btmp #清空失败记录,防止脚本下次执行重复统计IP done

后续只需要配合定时任务即可。

SHELL
1
2
3
crontab -e #内容为每1小时执行一次脚本 * */1 * * * sudo bash /home/ubuntu/ssh_deny.sh

参考

本文作者: 有次元袋的 tiger
本文链接: https://www.superheaoz.top/2023/03/284/
版权声明: 本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的个人天地