2017년 3월 6일 월요일

ppc64le (POWER8) 기반의 Ubuntu에서 SW RAID 구성 및 복구하기

먼저, POWER8, 즉 ppc64le 아키텍처의 Ubuntu를 설치할 때, RAID adapter의 HW 기능이 아닌, Linux OS에서 지원하는 SW RAID를 이용하여 mirroring을 하면서 OS 설치하는 방법은 아래 URL을 참조하십시요.

https://wiki.kubuntu.org/ppc64el/SoftwareRAID

위 URL에서는 구성 및 설치 방법까지만 나옵니다.  특히, PReP 파티션, 즉 ppc64le의 bootloader용 파티션은 이렇게 SW RAID로는 설치가 안 된다는 이야기만 있을 뿐,  그래서 어떻게 하라는 말이 없습니다.

여기서는 이렇게 SW RAID로 Ubuntu OS 설치 후, PReP 파티션은 어떻게 보호할 것인가, 그리고 이렇게 mirroring된 HDD 2장 중 1장에 문제가 생겼을 경우 어떻게 복구하는지에 대해 간단히 정리했습니다.

요약하면 

1) PReP 파티션 부분은 OS 설치 이후, 그냥 dd 명령으로 /dev/sda1에서 /dev/sdb1으로 copy해주면 됩니다.   

2) Mirroring된 HDD 2장 중 1장에 문제가 생긴 경우, 복구는 madam 명령을 이용합니다.



먼저, 위 URL과 같이 OS를 SW RAID로 구성하여 설치를 끝내면 다음과 같이 disk가 2개 보입니다.  

/dev/sda1, sdb1  : PReP 파티션
/dev/sda2, sdb2  : 일반 Linux 파일시스템
/dev/sda3, sdb3  : Swap space용 파티션

이중 sda2와 sdb2는 뭉쳐져 md0 (mirror device 0)를 만들게 되고, sda3와 sdb3는 md1을 만들게 됩니다.


$ fdisk -l

Disk /dev/sda: 894.3 GiB, 960197124096 bytes, 1875385008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2C810299-3222-421A-B19C-6FF8B8E8E181

Device          Start        End    Sectors   Size Type
/dev/sda1        2048      16383      14336     7M PowerPC PReP boot
/dev/sda2       16384 1799501823 1799485440 858.1G Linux RAID
/dev/sda3  1799501824 1875384319   75882496  36.2G Linux RAID


Disk /dev/sdb: 894.3 GiB, 960197124096 bytes, 1875385008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E5BCD6F3-25B0-42B9-A0C3-87851E049FB8

Device          Start        End    Sectors   Size Type
/dev/sdb1        2048      16383      14336     7M Linux filesystem
/dev/sdb2       16384 1799501823 1799485440 858.1G Linux RAID
/dev/sdb3  1799501824 1875384319   75882496  36.2G Linux RAID


Disk /dev/md1: 36.2 GiB, 38818283520 bytes, 75816960 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/md0: 858 GiB, 921202327552 bytes, 1799223296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


md1이 swap space인지는 swapon -s 명령으로 확인 가능합니다.


test@ubuntu:~$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/md1                                partition       37908416        0       -1


위에서 언급한 것처럼, PReP 파티션은 OS 설치시에 SWRAID로는 mirror 구성이 안 되므로, 아래와 같이 그냥 dd 명령으로 copy 해주면 됩니다.  이렇게 copy를 완료한 뒤, 실제로 /dev/sda를 뽑아 문제를 일으킨 뒤 일단 shutdown을 하고 나서, /dev/sdb만 가지고 booting을 해보면 booting도 잘 되는 것을 확인했습니다.


test@ubuntu:~$ sudo dd if=/dev/sda1 of=/dev/sdb1 bs=1024


이제 mirror device의 복구에 대해 보겠습니다.  먼저, 현재 상태가 어떤지 확인하는 방법은 아래와 같이 /proc/mdstat을 보는 것입니다.  아래는 mirror device가 정상적인 상태입니다.


test@ubuntu:~$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda2[0] sdb2[2]
      899611648 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda3[3] sdb3[2]
      37908480 blocks super 1.2 [2/2] [UU]

unused devices: <none>


좀더 상세하게는, mdadm 명령을 써서 볼 수 있습니다.


test@ubuntu:~$ sudo mdadm --detail /dev/md0
[sudo] password for test:
/dev/md0:
        Version : 1.2
  Creation Time : Fri Dec  2 15:21:29 2016
     Raid Level : raid1
     Array Size : 899611648 (857.94 GiB 921.20 GB)
  Used Dev Size : 899611648 (857.94 GiB 921.20 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Dec  5 17:34:38 2016
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : ubuntu:0  (local to host ubuntu)
           UUID : 458b6f3e:8289b00c:a4e641ea:134631e7
         Events : 35835

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       2       8       18        1      active sync   /dev/sdb2


test@ubuntu:~$ sudo mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Fri Dec  2 15:21:41 2016
     Raid Level : raid1
     Array Size : 37908480 (36.15 GiB 38.82 GB)
  Used Dev Size : 37908480 (36.15 GiB 38.82 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Mon Dec  5 16:36:22 2016
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : ubuntu:1  (local to host ubuntu)
           UUID : a6154655:667b3e4a:922a28a0:3fb5af6b
         Events : 87

    Number   Major   Minor   RaidDevice State
       3       8        3        0      active sync   /dev/sda3
       2       8       19        1      active sync   /dev/sdb3



/dev/sda를 뽑았다가 다시 꽂은 경우, "mdadm --manage  --remove" 명령으로 문제 있는 파티션을 제거한 뒤 다시 "mdadm --manage  --add" 명령으로 추가하면 됩니다.   아래는 /dev/sda를 뽑았던 경우입니다.   여기서 PReP 파티션인 /dev/sda1은 mirror device에는 참여할 수 없는 파티션이므로, mdadm 명령이 아니라 dd 명령으로 copy 해줘야 한다는 것을 잊지 마시기 바랍니다.

test@ubuntu:~$ sudo mdadm --manage /dev/md0 --remove /dev/sda2
test@ubuntu:~$ sudo mdadm --manage /dev/md1 --remove /dev/sda3

test@ubuntu:~$ sudo mdadm --manage /dev/md0 --add /dev/sda2
test@ubuntu:~$ sudo mdadm --manage /dev/md1 --add /dev/sda3

이렇게 --add 한 뒤 두 HDD 사이에 sync가 일어나게 됩니다.   /proc/mdstat을 보면 복구 작업이 몇 % 진행되었는지도 보실 수 있습니다.

댓글 없음:

댓글 쓰기