实验室:在 Linux 上设置 lvm、raid

题外话:这个 LR 是合成的。
这里描述的一些任务可以更简单地完成,但由于 l/r 的任务是了解
有了raid和lvm功能,有些操作就被人为地复杂化了。

执行LR的工具要求:

  • Virtualbox等虚拟化工具
  • 以Linux安装镜像为例 Debian9
  • 可以通过互联网下载多个软件包
  • 通过 ssh 连接到已安装的 VM(可选)

ВНИМАНИЕ

这项实验室工作涉及数据安全这样一个微妙的问题——这是一个需要关注的领域。
这会让您因最小的错误(一个额外的字母或数字)而丢失所有数据。
由于您正在做实验室工作,因此您不会有任何危险,只是您必须重新开始做这件事。
在现实生活中,一切都更加严重,因此您应该非常仔细地输入磁盘名称,理解
您到底在使用当前命令做什么以及您正在使用哪些磁盘。

第二个要点是磁盘和分区的命名:根据情况,磁盘编号可能会有所不同
来自实验室工作中命令中呈现的那些值。
因此,例如,如果从阵列中删除sda磁盘,然后添加新磁盘,则会显示新磁盘
在名为 sda 的系统上。 如果在添加新磁盘之前重新启动,则新磁盘
该磁盘将命名为 sdb,旧磁盘将命名为 sda

实验室必须以超级用户 (root) 身份运行,因为大多数命令都需要
提升权限,通过 sudo 不断提升权限是没有意义的

学习材料

  • 的RAID
  • LVM
  • Linux 操作系统中的磁盘命名
  • 什么是节
  • 什么是分区表以及它存储在哪里?
  • 什么是 grub

使用的公用事业

1)查看磁盘信息

  • lsblk -o 名称、大小、FSTYPE、类型、挂载点
  • fdisk -l
    2)查看信息并使用LVM
  • PVS
  • 扩展
  • pv创建
  • 调整大小
  • vgs
  • 减量
  • LVS
  • 延伸
    3)查看信息并使用RAID
  • 猫 /proc/mdstat
  • mdadm的
    4) 挂载点
  • 安装
  • 卸除
  • 猫 /etc/fstab
  • 猫 /etc/mtab
    5)磁盘重新分区
  • fdisk /dev/XXX
    6)复制分区
  • dd if=/dev/xxx of=/dev/yyy
    7) 使用分区表
  • 部分
  • 磁盘
  • mkfs.ext4文件
    8) 使用引导加载程序
  • grub 安装 /dev/XXX
  • 更新GRUB
    9) 杂项
  • 易于
  • rsync的

实验室工作由3部分组成:

  • 使用 lvm、raid 设置工作系统
  • 模拟其中一个磁盘故障
  • 即时更换磁盘、添加新磁盘和移动分区。

任务1(操作系统安装及LVM、RAID配置)

1)创建一个新的虚拟机,赋予其以下特征:

  • 1 GB RAM
  • 1 CPU
  • 2 个硬盘(将它们命名为 ssd1、ssd2 并分配相同的大小,选中热插拔和 SSD 框)
  • 配置为 4 个端口的 SATA 控制器

实验室:在 Linux 上设置 lvm、raid

2) 开始安装 Linux,当您开始选择硬盘驱动器时,请执行以下操作:

  • 分区方式:手动,之后你应该看到这样的图片:
    实验室:在 Linux 上设置 lvm、raid

  • 为/boot设置单独的分区:选择第一个磁盘并在其上创建新的分区表

    • 分区大小:512M
    • 挂载点:/boot
    • 对第二个盘重复设置,但由于不能同时挂载/boot两次,所以选择挂载点:none,最终得到如下(有门框的图,懒得重做了):
      实验室:在 Linux 上设置 lvm、raid

  • RAID 设置:

    • 选择第一个磁盘上的可用空间并将分区类型配置为 RAID 的物理卷
    • 选择“完成分区设置”
    • 对第二个磁盘重复完全相同的设置,结果如下:
      实验室:在 Linux 上设置 lvm、raid
    • 选择“配置软件 RAID”
    • 创建MD设备
    • 软件 RAID 设备类型:选择镜像阵列
    • RAID XXXX 阵列的活动设备:选择两个驱动器
    • 备用设备:默认为 0
    • RAID XX 阵列的活动设备:选择您在 raid 下创建的分区
    • 完成
    • 结果,你应该得到这样的图片:
      实验室:在 Linux 上设置 lvm、raid

  • 配置LVM:选择配置逻辑卷管理器

    • 保持当前分区布局并配置 LVM:是
    • 创建卷组
    • 卷组名称:系统
    • 新卷组的​​设备:选择您创建的 RAID
    • 创建逻辑卷
    • 逻辑卷名称:root
    • 逻辑卷大小:磁盘大小的 25
    • 创建逻辑卷
    • 逻辑卷名称:var
    • 逻辑卷大小:磁盘大小的 25
    • 创建逻辑卷
    • 逻辑卷名称:log
    • 逻辑卷大小:磁盘大小的 15
    • 通过选择“显示配置详细信息”,您应该得到以下图片:
      实验室:在 Linux 上设置 lvm、raid
    • 完成 LVM 设置后,您应该会看到以下内容:
      实验室:在 Linux 上设置 lvm、raid

  • 分区布局:逐个选择在LVM中创建的每个卷并对其进行布局,例如对于root,如下所示:

    • 用作:ext4
    • 挂载点:/
    • 标记根分区的结果应如下所示:
      实验室:在 Linux 上设置 lvm、raid
    • 对var和log重复分区操作,选择合适的挂载点(/var和/var/log手动输入),得到如下结果:
      实验室:在 Linux 上设置 lvm、raid
    • 选择完成分区
    • 系统会询问您几个问题,因为您仍然有未安装的分区并且交换未配置。 这两个问题都应该得到否定的回答。

  • 最终结果应如下所示:
    实验室:在 Linux 上设置 lvm、raid
    3) 通过在第一台设备(sda)上安装 grub 来完成操作系统安装并引导系统。
    4)将/boot分区的内容从sda驱动器(ssd1)复制到sdb驱动器(ssd2)

    dd if=/dev/sda1 of=/dev/sdb1

    5) 在第二台设备上安装grub:

  • 查看系统中的磁盘:

    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  • 列出上一个命令给您的所有磁盘并描述它是什么类型的磁盘

  • 找到未安装 grub 的驱动器并执行此安装:
    grub-install /dev/sdb

  • 使用 cat /proc/mdstat 命令查看有关当前 raid 的信息并记下您所看到的内容。

  • 查看命令的输出:pvs、vgs、lvs、mount 并写下您到底看到了什么

用你自己的话描述你做了什么以及你从任务中得到了什么结果。

完成此任务后,建议保存虚拟机文件夹的备份副本或制作
流浪盒子: https://t.me/bykvaadm/191

结果:具有磁盘 ssd1、ssd2 的虚拟机

任务 2(模拟其中一个磁盘发生故障)

1)如果您已选中热插拔框,则可以动态删除磁盘

  • 在机器属性中删除磁盘ssd1
  • 找到你的虚拟机文件存放的目录,删除ssd1.vmdk
    2) 确保您的虚拟机仍在运行
    3)重新启动虚拟机并确保其仍在运行
    4)检查RAID阵列的状态:cat /proc/mdstat
    5)在VM界面添加一个相同大小的新磁盘,命名为ssd3
    6) 执行操作:
  • 使用 fdisk -l 查看新磁盘已到达系统
  • 将分区表从旧磁盘复制到新磁盘: sfdisk -d /dev/XXXX | sfdisk /dev/YYY
  • 使用 fdisk -l 查看结果
  • 将新磁盘添加到 raid 阵列: mdadm —manage /dev/md0 —add /dev/YYY
  • 查看结果:cat /proc/mdstat. 您应该看到同步已经开始
    7) 现在您需要手动同步不属于 RAID 的分区。
    为此,我们将使用 dd 实用程序,从“活动”磁盘复制到您最近安装的新磁盘

    dd if=/dev/XXX of=/dev/YYY

    8) 同步完成后,在新驱动器上安装grub
    9) 重新启动虚拟机以确保一切正常
    用你自己的话描述你做了什么以及你从任务中得到了什么结果。
    结果:磁盘 ssd1 已删除,磁盘 ssd2 已保存,磁盘 ssd3 已添加。

    任务 3(添加新磁盘并移动分区)

    这是所有提出的任务中最复杂、最繁重的。
    仔细检查您正在做什么以及使用哪些磁盘和分区。
    建议在运行之前先制作一份副本。
    该任务独立于 2 号任务;它可以在 1 号任务之后执行,并根据磁盘名称进行调整。
    该实验室任务的第二部分应该导致与完成第一部分后完全相同的状态。

    为了使您的工作更轻松,我建议不要从主机上物理删除磁盘,而仅
    在机器属性中断开它们。 从虚拟机中操作系统的角度来看,它看起来完全相同,但是您可以
    如果出现问题,请重新连接磁盘并通过回滚几个点来继续工作,如果
    你有问题。 例如,您可能做得不正确或忘记将 /boot 分区复制到新磁盘。
    我只能建议您多次仔细检查正在使用的磁盘和分区,甚至更好
    在一张纸上写下磁盘、分区和“物理”磁盘编号之间的对应关系。 美丽而清晰的树
    球队抽签 lsblk,尽可能经常使用它来分析你已经做了什么以及需要做什么。

    对于故事...

    想象一下,您的服务器已经在 2 个 SSD 驱动器上运行了很长时间,突然...

    1) 通过从虚拟机属性中删除磁盘并重新启动来模拟 ssd2 磁盘故障
    2)查看磁盘和RAID当前状态:

    cat /proc/mdstat
    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    3) 你很幸运 - 你的老板允许你购买几张新磁盘:

    2 个大容量 SATA,用于将带有日志的分区移动到单独磁盘这一拖延已久的任务

    2 个 SSD 来替换失效的 SSD,以及替换仍在运行的 SSD。

    请注意,服务器篮仅支持一次安装4个磁盘,
    因此,您无法一次添加所有磁盘。

    选择 HDD 容量比 SSD 大 2 倍。
    SSD容量比之前的SSD大1,25倍。

    4)添加一张新的ssd盘,命名为ssd4,添加后查看发生了什么:

    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    5)首先要注意旧盘上数据的安全。
    这次我们将使用LVM传输数据:

    • 首先,您需要将文件表从旧磁盘复制到新磁盘:
      sfdisk -d /dev/XXX | sfdisk /dev/YYY

      将 x、y 替换为正确的磁盘并找出该命令的作用。

      运行 lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT 并将其输出与之前的调用进行比较。
      有什么变化?
      使用dd命令将/boot数据复制到新磁盘

      dd if=/dev/XXX of=/dev/YYY

      如果 /boot 仍安装在旧磁盘上,则应将其重新安装在活动磁盘上:

      mount | grep boot # смотрим куда смонтирован диск
      lsblk # смотрим какие диски есть в системе и смотрим есть ли диск, полученный из предыдущего пункта
      umount /boot # отмонтируем /boot
      mount -a # выполним монтирование всех точек согласно /etc/fstab. 
      # Поскольку там указана точка монтирования /dev/sda, то будет выполнено корректное перемонтирование на живой диск

      在新的 SSD 驱动器上安装引导加载程序

      grub-install /dev/YYY

      我们为什么要执行这个操作?

      创建一个新的 raid 阵列,仅包含一个新的 SSD 磁盘:

      mdadm --create --verbose /dev/md63 --level=1 --raid-devices=1 /dev/YYY

      如果不指定特殊键,上述命令将不起作用。
      阅读帮助并将此键添加到命令中。

      使用 cat /proc/mdstat 命令检查操作结果。 发生了什么变化?
      运行 lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT 并将其输出与之前的调用进行比较。
      有什么变化?
      6)下一步是配置LVM
      执行pvs命令查看当前物理卷信息
      创建一个新的物理卷,包括之前创建的 RAID 阵列:

      pvcreate /dev/md63

      运行 lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT 并将其输出与之前的调用进行比较。
      有什么变化?
      再次运行 pvs 命令。 发生了什么变化?
      让我们使用以下命令增加卷组系统的大小:

      vgextend system /dev/md63

      运行命令并记下您看到的内容和发生的变化。

      vgdisplay system -v
      pvs
      vgs
      lvs -a -o+devices

      LV var、log、root 当前位于哪个物理磁盘上?

      使用正确的设备名称将数据从旧驱动器移至新驱动器。

      pvmove -i 10 -n /dev/system/root /dev/md0 /dev/md63 

      对所有逻辑卷重复该操作

      运行命令并记下您看到的内容和发生的变化。

      vgdisplay system -v
      pvs
      vgs
      lvs -a -o+devices
      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

      让我们通过删除旧的 raid 磁盘来更改 VG。 替换正确的团队名称。

      vgreduce system /dev/md0

      运行命令并记下您看到的内容和发生的变化。

      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
      pvs
      vgs

      为了让画面更美观,将/boot重新挂载到第二个ssd盘(ssd4)并运行lsblk。 结果,ssd3盘不
      不应该安装任何东西。 仔细检查/boot分区不为空! ls /boot 应该表明
      几个文件和文件夹。 研究该部分存储的内容并记下哪个文件目录负责什么。
      7) 移除ssd3磁盘并根据上述技术规格添加ssd5、hdd1、hdd2,结果:
      ssd4 - 第一个新的 SSD
      SSD5 - 第二个新 SSD
      hdd1 - 第一个新硬盘
      hdd2 - 第二个新硬盘

      8)检查添加磁盘后发生了什么:

      fdisk -l
      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

      9) 让我们恢复主raid阵列的运行:

      • 复制分区表,更换正确的磁盘:
        sfdisk -d /dev/XXX | sfdisk /dev/YYY
      • 请注意,当我们从旧磁盘复制分区表时,似乎新的大小
        不使用整个硬盘容量。
        因此,很快我们就需要调整这个分区的大小并扩展raid。
        通过运行命令亲自查看:

        lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

        10) 将启动分区/boot从ssd4复制到ssd5

        dd if=/dev/XXX of=/dev/YYY

        11) 在新驱动器(ssd5)上安装grub
        12)调整ssd5磁盘第二个分区的大小

        运行磁盘分区实用程序:

        fdisk /dev/XXX

        输入 d 键删除现有分区(选择 2)
        输入键 n 创建新分区
        输入键 p 表示分区类型为“主”
        输入键 2 以便新分区具有第二个数字
        第一个扇区:按 Enter 键接受自动计算的分区开头大小
        最后一个扇区:按 Enter 键接受自动计算的分区末尾的大小
        输入 l 键查看所有可能的分区类型的列表,并在其中找到 Linux raid auto
        输入 t 键更改创建的分区的类型 (2),然后输入上一步中找到的数字。
        输入 w 键将更改写入磁盘。
        12)重新读取分区表并检查结果

        partx -u /dev/XXX
        lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

        将新磁盘添加到当前 raid 阵列(不要忘记替换正确的磁盘)

        mdadm --manage /dev/md63 --add /dev/sda2

        让我们将阵列中的磁盘数量扩展到 2:

        mdadm --grow /dev/md63 --raid-devices=2

        查看结果:我们标记了 2 个数组,但该数组中包含的两个部分的大小不同

        lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

        13)增加ssd4磁盘上的分区大小

        运行磁盘分区实用程序:

        fdisk /dev/XXX

        输入 d 键删除现有分区(选择 2)
        输入键 n 创建新分区
        输入键 p 表示分区类型为“主”
        输入键 2 以便新分区具有第二个数字
        第一个扇区:按 Enter 键接受自动计算的分区开头大小
        最后一个扇区:按 Enter 键接受自动计算的分区末尾的大小
        在标记末尾,选择“否”以将分区成员身份的签名保留在阵列中。
        输入 w 键将更改写入磁盘。
        12)重新读取分区表并检查结果

        partx -u /dev/XXX
        lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

        请注意,现在 sda2、sdc2 分区的大小大于 raid 设备的大小。

        13) 在此阶段,raid 规模现在可以扩大

        mdadm --grow /dev/md63 --size=max
        lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT # check result

        查看 lsblk 并注意发生了什么变化
        14) 然而,虽然我们改变了raid的大小,但vg root、var、log本身的大小并没有改变

        • 看PV大小:
          pvs
        • 让我们扩大 PV 的大小:
          pvresize /dev/md63
        • 看PV大小:
          pvs

          15) 添加新出现的位置 VG var,root

          lvs # посмотрим сколько сейчас размечено
          lvextend -l +50%FREE /dev/system/root
          lvextend -l +100%FREE /dev/system/var
          lvs # проверьте что получилось

          至此,您已完成主阵列到新磁盘的迁移。 与ssd1一起工作,ssd2完成

          16) 我们的下一个任务是将 /var/log 移动到新磁盘,为此我们将在 HDD 磁盘上创建一个新阵列和 lvm。

          • 让我们看看新的硬盘驱动器有什么名称
            fdisk -l
          • 让我们创建一个 raid 阵列
            mdadm --create /dev/md127 --level=1 --raid-devices=2 /dev/sdc /dev/sdd
          • 让我们在大磁盘的 raid 上创建一个新的 PV
            pvcreate data /dev/md127
          • 让我们在此 PV 中创建一个名为 data 的组
            vgcreate data /dev/md127
          • 让我们创建一个具有所有可用空间大小的逻辑卷并将其命名为 val_log
            lvcreate -l 100%FREE -n var_log data # lvs # посмотрим результат
          • 将创建的分区格式化为ext4
            mkfs.ext4 /dev/mapper/data-var_log
          • 让我们看看结果
            lsblk

            17) 将日志数据从旧分区转移到新分区

            临时安装一个新的日志存储

            mount /dev/mapper/data-var_log /mnt

            让我们同步分区

            apt install rsync
            rsync -avzr /var/log/ /mnt/

            让我们找出/var/log中当前正在运行哪些进程

            apt install lsof
            lsof | grep '/var/log'

            停止这些进程

            systemctl stop rsyslog.service syslog.socket

            执行分区的最终同步(自上次同步以来可能已更改的数据)

            rsync -avzr /var/log/ /mnt/

            交换部分

            umount /mnt
            umount /var/log
            mount /dev/mapper/data-var_log /var/log

            让我们检查一下发生了什么

            lsblk

            18) 编辑/etc/fstab
            fstab - 记录引导时挂载分区的规则的文件
            我们的任务是找到 /var/log 挂载的行并修复设备 system-logdata-var_log

            19) 此阶段最重要的事情是不要忘记更改 radela 表(例如 ext4)。 因为无论我们如何更改各种raid、lvm,直到分区上的FS通知分区大小现在已更改为止,我们都将无法使用新的空间。 使用命令 resize2fs 改变FS。

            20) 最后和弦

            • 让我们重新启动吧。 如果您正确执行了所有操作,您将被带回操作系统(这是确保一切正常运行所必需的。此步骤除了自测试之外没有任何意义)
            • 检查我们想做的一切是否真的完成了:
              pvs
              lvs
              vgs
              lsblk
              cat /proc/mdstat

            21) [可选] 按照以下步骤操作

            • 重启时按F12指定不同的驱动器以确保可以启动
              来自任何一个 SSD 驱动器,这样我们就不用担心其中一个出现故障
            • 现在您在 VG 系统中有不必要的 LV 登录。 在 root 或 var 之间分配此空间,但不使用
              设计 100%FREE 使用 -L 键手动指定尺寸:

              -L 500M
            • 修复/boot位于两个分区且不同步的问题,无需正确执行此操作,
              它作为示例添加到此处。 不要忘记先将 /boot 的内容复制到某处。

              • 创建一个新的 raid 并在其中包含 sda1,sda2
              • 将这些分区包含在现有 raid 中并将 /boot 恢复到主 raid,但不安装它。

来源: habr.com

添加评论