RAID 0 MD device 증설 방법

사용하는 RAID 0 의 MD device 를 증설하는 여러 방법에 대해 작성해보겠습니다.

테스트 RAID 디바이스 생성

아래와 같은 방법으로 디스크 3장을 RAID 0 디바이스로 생성 할 수 있습니다.

$ sudo mdadm --create --level=0 --raid-devices=3 /dev/md0 /dev/xvdb /dev/xvdc /dev/xvdd
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Apr  8 23:19:51 2024
        Raid Level : raid0
        Array Size : 31432704 (29.98 GiB 32.19 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Apr  8 23:19:51 2024
             State : clean
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : 0
              UUID : 3336d55a:441542ed:a51f9c0c:b2fa98dc
            Events : 0

    Number   Major   Minor   RaidDevice State
       0     202       16        0      active sync   /dev/sdb
       1     202       32        1      active sync   /dev/sdc
       2     202       48        2      active sync   /dev/sdd
       
$ sudo mkfs.xfs /dev/md0
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0               isize=512    agcount=16, agsize=491008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=7856128, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=3840, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

$ sudo df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md0       xfs    30G  247M   30G   1% /data

$ sudo cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 xvdd[2] xvdc[1] xvdb[0]
      31432704 blocks super 1.2 512k chunks

unused devices: <none>

온라인 증설 (운영중에 증설)

아래와 같은 방법으로 운영중에 ARRAY 에 신규 디스크를 추가하고 파일시스템을 증설 할 수 있습니다.

$ sudo mdadm -Gv --level=0 --raid-devices=4 --add /dev/md0 /dev/xvde
mdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/xvde

위와 같이 신규 디스크를 array 에 추가를 합니다.
이 과정에서 array 는 RAID 0 에서 RAID 4 로 변경이 되고 reshape 이 수행됩니다.
reshape 과정이 완료되면 다시 RAID 0 로 변경 됩니다.

$ sudo cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid4 xvde[4] xvdd[2] xvdc[1] xvdb[0]
      31432704 blocks super 1.2 level 4, 512k chunk, algorithm 5 [5/4] [UUU__]
      [>....................]  reshape =  1.6% (174108/10477568) finish=9.8min speed=17410K/sec

unused devices: <none>

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Apr  8 23:19:51 2024
        Raid Level : raid4
        Array Size : 31432704 (29.98 GiB 32.19 GB)
     Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
      Raid Devices : 5
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr  8 23:23:50 2024
             State : clean, FAILED, reshaping
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

        Chunk Size : 512K

Consistency Policy : resync

    Reshape Status : 4% complete
     Delta Devices : 1, (4->5)

              Name : 0
              UUID : 3336d55a:441542ed:a51f9c0c:b2fa98dc
            Events : 27

    Number   Major   Minor   RaidDevice State
       0     202       16        0      active sync   /dev/sdb
       1     202       32        1      active sync   /dev/sdc
       2     202       48        2      active sync   /dev/sdd
       4     202       64        3      spare rebuilding   /dev/sde
       -       0        0        4      removed

위 내용은 reshape 중인 array 의 상태입니다.

$ sudo cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid0 xvde[4] xvdd[2] xvdc[1] xvdb[0]
      41910272 blocks super 1.2 512k chunks

unused devices: <none>

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Apr  8 23:19:51 2024
        Raid Level : raid0
        Array Size : 41910272 (39.97 GiB 42.92 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr  8 23:34:31 2024
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : 0
              UUID : 3336d55a:441542ed:a51f9c0c:b2fa98dc
            Events : 91

    Number   Major   Minor   RaidDevice State
       0     202       16        0      active sync   /dev/sdb
       1     202       32        1      active sync   /dev/sdc
       2     202       48        2      active sync   /dev/sdd
       4     202       64        3      active sync   /dev/sde

위와 같이 reshape 이 완료되면 다시 RAID 0 가 됩니다.

$ sudo lsblk -o NAME,SIZE,TYPE
NAME    SIZE TYPE
xvda      8G disk
└─xvda1   8G part
xvdb     10G disk
└─md0    40G raid0
xvdc     10G disk
└─md0    40G raid0
xvdd     10G disk
└─md0    40G raid0
xvde     10G disk     <<<----!!!! 추가된 디스크
└─md0    40G raid0    <<<----!!!! array 에 추가된 상태

위와 같이 lsblk 를 통해서도 해당 내용을 확인 할 수 있습니다.

$ sudo xfs_growfs /data
meta-data=/dev/md0               isize=512    agcount=16, agsize=491008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=7856128, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=3840, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7856128 to 10477568

$ sudo df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md0       xfs    40G  319M   40G   1% /data

MD device 가 증설이 완료되면 위와 같이 파일시스템을 xfs_growfs 를 이용하여 증설을 하면 온라인 중에 파일시스템 확장이 완료 됩니다.

오프라인 증설 (신규 디스크 추가 없이)

Cloud 환경에서는 기존에 사용중이던 디스크의 용량 증설이 쉽게 가능하고 해당 특성을 이용하면 아래와 같은 방법으로 신규 디스크 추가 없이 파일시스템 증설이 가능합니다.

[root@ip-172-31-39-227 ~]# lsblk -o NAME,SIZE,TYPE
NAME    SIZE TYPE
xvda      8G disk
└─xvda1   8G part
xvdb     10G disk   <<
└─md100  30G raid0
xvdc     10G disk   <<
└─md100  30G raid0
xvdd     10G disk   <<
└─md100  30G raid0

기존에 10G 디스크 3개를 사용하는 MD device 입니다.

$ sudo df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md100     xfs    30G  247M   30G   1% /data

$ sudo umount /data

$ sudo mdadm --stop /dev/md100
mdadm: stopped /dev/md100

파일시스템 증설을 위해 위와 같이 umount 및 MD device stop 을 수행합니다.

$ sudo lsblk -o NAME,SIZE,TYPE
NAME    SIZE TYPE
xvda      8G disk
└─xvda1   8G part
xvdb     20G disk   <<
└─md100  30G raid0
xvdc     20G disk   <<
└─md100  30G raid0
xvdd     20G disk   <<
└─md100  30G raid0

위와 같이 기존에 10G 디스크를 20G 디스크로 수정이 완료 되었습니다.

$ sudo cat /etc/mdadm.conf | grep ARRAY
cat: /etc/mdadm.conf: No such file or directory

$ sudo mdadm --examine --scan
ARRAY /dev/md/100  metadata=1.2 UUID=cea56678:c6a875c3:b205f109:e890c88e name=100

$ sudo mdadm --examine --scan > /etc/mdadm.conf

$ sudo cat /etc/mdadm.conf | grep ARRAY
ARRAY /dev/md/100  metadata=1.2 UUID=cea56678:c6a875c3:b205f109:e890c88e name=100

MD Device 작업을 위해 mdadm.conf 에 array 정보를 추가합니다.

$ sudo mdadm --assemble --update=devicesize /dev/md100
mdadm: /dev/md100 has been started with 3 drives.

$ sudo mdadm --detail /dev/md100  | grep "Array Size"
        Array Size : 62889984 (59.98 GiB 64.40 GB)

위와 같이 /dev/md100 디바이스의 용량을 업데이트하고 Array 의 용량이 증가 된 것을 확인 할 수 있습니다.

$ sudo mount /dev/md100 /data

$ sudo df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md100     xfs    30G  247M   30G   1% /data

$ sudo xfs_growfs /data
meta-data=/dev/md100             isize=512    agcount=16, agsize=491008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=7856128, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=3840, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7856128 to 15722496

$ sudo df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md100     xfs    60G  463M   60G   1% /data

위와 같이 xfs_growfs 를 이용하여 파일시스템을 확장하면 정상적으로 파일시스템이 확장된 것을 볼 수 있습니다.

참고 자료

chhanz's profile image

chhanz

2024-04-09

Read more posts by this author