Please enable Javascript to view the contents

RAID 下 XFS 运维操作

 ·  ☕ 4 分钟

xfs 文件系统不支持缩容,本篇主要是对 RAID 10 下换盘、扩容进行操作。

1. RAID 状态与盘状态

在 mdadm 中,RAID 状态:

  • clean, 正常
  • degraded,降级,依然可以读写,但是容错能力降低
  • reshaping,重组中,扩容、缩容时会出现
  • resyncing,同步数据中
  • recovering,恢复数据中,伴随降级,盘重建
  • failed,故障

在 mdadm 中,盘状态有:

  • active, 参与数据读写
  • spare, 热备盘,当有盘故障时,自动接替故障盘
  • failed,故障盘
  • sync,同步中,正常状态
  • rebuilding,重建中
  • set-x,相同标记下的全部盘是一组镜像

2. RAID 0

2.1 创建 RAID 0

  • 停掉 md0
1
2
umount /mnt/mdadmdm
mdadm --stop /dev/md0
  • 创建 RAID 0
1
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  • 查看 RAID 状态
1
mdadm --detail /dev/md0
1
2
3
4
5
    State : clean
       0     259        0        0      active sync   /dev/nvme0n1
       1     259        1        1      active sync   /dev/nvme1n1
       2     259        4        2      active sync   /dev/nvme2n1
       3     259        3        3      active sync   /dev/nvme3n1
  • 格式化 RAID
1
mkfs.xfs -f /dev/md0
  • 挂载 RAID
1
2
mkdir -p /mnt/mdadm
mount /dev/md0 /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        3.0T   21G  2.9T   1% /mnt/mdadm

3. RAID 1

3.1 创建 RAID 1

  • 停掉 md0
1
2
umount /mnt/mdadm
mdadm --stop /dev/md0
  • 创建 RAID 1
1
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1
  • 格式化 RAID
1
mkfs.xfs -f /dev/md0
  • 挂载 RAID
1
2
mkdir -p /mnt/mdadm
mount /dev/md0 /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        745G  5.3G  740G   1% /mnt/mdadm

3.2 单盘替换

  • 清空新盘
1
wipefs -a /dev/nvme2n1
  • 添加热备盘
1
mdadm /dev/md0 --add /dev/nvme2n1
  • 标记故障盘
1
mdadm /dev/md0 --fail /dev/nvme1n1
  • 移除故障盘
1
mdadm /dev/md0 --remove /dev/nvme1n1
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
    State : clean, degraded, recovering
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync   /dev/nvme0n1
       2     259        4        1      spare rebuilding   /dev/nvme2n1

3.3 加盘扩容

  • 将一块盘加入阵列
1
mdadm /dev/md0 --add /dev/nvme3n1
  • 扩容 RAID 1

新加的盘默认为热备盘,需要将热备盘标记为数据盘。

1
mdadm /dev/md0 --grow --raid-devices=3
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
5
    State : clean, degraded, recovering
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync   /dev/nvme0n1
       2     259        4        1      spare rebuilding   /dev/nvme2n1
       3     259        3        2      spare rebuilding   /dev/nvme3n1

因为 RAID 1 每个盘数据都一样,也就没有平衡或者扩容的操作了。

4. RAID 10

4.1 创建 RAID 10

  • 停掉 md0
1
2
umount /mnt/mdadm
mdadm --stop /dev/md0
  • 创建 RAID
1
mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  • 查看 RAID 状态
1
mdadm --detail /dev/md0
1
2
3
4
5
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync set-A   /dev/nvme0n1
       1     259        1        1      active sync set-B   /dev/nvme1n1
       2     259        4        2      active sync set-A   /dev/nvme2n1
       3     259        3        3      active sync set-B   /dev/nvme3n1
  • 格式化 RAID
1
mkfs.xfs -f /dev/md0
  • 挂载 RAID
1
2
mkdir -p /mnt/mdadm
mount /dev/md0 /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        1.5T   11G  1.5T   1% /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        1.5T   61G  1.4T   5% /mnt/mdadm

写了一个 50G 的文件 4m_seq_write.0.0

4.2 单盘替换

热备盘可以用于故障自动替换或者替换正常的数据盘。

  • 将热备盘加入阵列
1
mdadm /dev/md0 --add /dev/nvme4n1 /dev/nvme5n1
  • 移除热备盘
1
mdadm /dev/md0 --remove /dev/nvme5n1
  • 查看状态(热备盘为 spare)
1
mdadm --detail /dev/md0
1
2
3
4
5
6
7
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync set-A   /dev/nvme0n1
       1     259        1        1      active sync set-B   /dev/nvme1n1
       2     259        4        2      active sync set-A   /dev/nvme2n1
       3     259        3        3      active sync set-B   /dev/nvme3n1

       4     259        2        -      spare   /dev/nvme4n1
  • 剔除数据盘
1
mdadm /dev/md0 --fail /dev/nvme3n1
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
5
6
7
8
    State : clean, degraded, recovering
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync set-A   /dev/nvme0n1
       1     259        1        1      active sync set-B   /dev/nvme1n1
       2     259        4        2      active sync set-A   /dev/nvme2n1
       4     259        2        3      spare rebuilding   /dev/nvme4n1

       3     259        3        -      faulty   /dev/nvme3n1

此时阵列处于降级状态,正在重建数据。

  • 移除故障盘
1
mdadm /dev/md0 --remove /dev/nvme3n1

4.3 加盘扩容

  • 将两块盘加入阵列
1
mdadm /dev/md0 --add /dev/nvme3n1 /dev/nvme5n1
  • 查看状态(新盘为 spare)
1
mdadm --detail /dev/md0
1
2
3
4
5
6
7
8
9
    State : clean
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync set-A   /dev/nvme0n1
       1     259        1        1      active sync set-B   /dev/nvme1n1
       2     259        4        2      active sync set-A   /dev/nvme2n1
       4     259        2        3      active sync set-B   /dev/nvme4n1

       3     259        3        -      spare   /dev/nvme3n1
       5     259        5        -      spare   /dev/nvme5n1

新加入的盘默认为热备盘。

  • 扩容 RAID 10
1
mdadm /dev/md0 --grow --raid-devices=6
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
5
6
7
8
    State : clean, reshaping
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync set-A   /dev/nvme0n1
       1     259        1        1      active sync set-B   /dev/nvme1n1
       2     259        4        2      active sync set-A   /dev/nvme2n1
       4     259        2        3      active sync set-B   /dev/nvme4n1
       5     259        5        4      active sync set-A   /dev/nvme5n1
       3     259        3        5      active sync set-B   /dev/nvme3n1

等等 reshaping 状态结束,cat /proc/mdstat 可以看到需要多久时间完成。

  • 扩容文件系统
1
xfs_growfs /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        2.2T   66G  2.2T   3% /mnt/mdadm

文件系统扩容完成。

5. RAID 6

5.1 创建 RAID 6

  • 停掉 md0
1
2
umount /mnt/mdadm
mdadm --stop /dev/md0
  • 创建 RAID 6
1
mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
  • 格式化 RAID
1
mkfs.xfs -f /dev/md0
  • 挂载 RAID
1
2
mkdir -p /mnt/mdadm
mount /dev/md0 /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        1.5T   11G  1.5T   1% /mnt/mdadm

5.2 单盘替换

  • 清空新盘
1
wipefs -a /dev/nvme4n1
  • 添加热备盘
1
mdadm /dev/md0 --add /dev/nvme4n1
  • 标记故障盘
1
mdadm /dev/md0 --fail /dev/nvme3n1
  • 移除故障盘
1
mdadm /dev/md0 --remove /dev/nvme3n1
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
5
6
    State : clean, degraded, recovering
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync   /dev/nvme0n1
       1     259        1        1      active sync   /dev/nvme1n1
       2     259        4        2      active sync   /dev/nvme2n1
       4     259        2        3      spare rebuilding   /dev/nvme4n1

5.3 加盘扩容

  • 清空新盘
1
wipefs -a /dev/nvme5n1
  • 添加热备盘
1
mdadm /dev/md0 --add /dev/nvme5n1
  • 调整 RAID 设备数量
1
mdadm /dev/md0 --grow --raid-devices=5
  • 查看状态
1
mdadm --detail /dev/md0
1
2
3
4
5
6
7
    State : clean, degraded, reshaping
    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync   /dev/nvme0n1
       1     259        1        1      active sync   /dev/nvme1n1
       2     259        4        2      active sync   /dev/nvme2n1
       4     259        2        3      spare rebuilding   /dev/nvme4n1
       5     259        5        4      active sync   /dev/nvme5n1

不会自动平衡数据,而是新的数据会逐步写入新盘。

  • 扩容文件系统
1
xfs_growfs /mnt/mdadm
  • 查看磁盘大小
1
df -h /mnt/mdadm/
1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        2.2T   16G  2.2T   1% /mnt/mdadm

6. 生成测试数据

  • 4M 顺序写
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
fio \
  --name=4m_seq_write \
  --rw=write \
  --bs=4M \
  --ioengine=libaio \
  --direct=1 \
  --numjobs=1 \
  --iodepth=8 \
  --size=50G \
  --time_based \
  --runtime=60 \
  --group_reporting \
  --directory=/mnt/mdadm

用于生成测试数据。

  • 计算文件的 MD5 值
1
md5sum /mnt/mdadm/4m_seq_write.0.0

用于校验调整之后文件的完整性。


微信公众号
作者
微信公众号