리눅스/기본

Linux에서 Raid 구성

Seob 2014. 5. 19. 09:53
반응형


서버들을 이용하면 안에 컨트롤러를 통해 쉽게 레이드가 구성이 가능합니다.


이번은 CentOS에서 Linux 접속하여 구성하는 방식입니다.


나름 귀찮은 방법이기도 하지만 해보도록 하겠습니다.


우리가 구성할 레이드는 RAID 6 입니다.


RAID 6 은 오류 체크 및 수정하는 패리티 정보가 1차적과 2차적으로 저장되는 방식입니다.


1,2 차적으로 저장하는 방식이기 때문에 Disk Fail은 총 2개까지가 허용되며


그만큼 용량에서도 Disk - 2 가 되버리죠.


하지만 안정성을 고려한다면 Raid 6 만한 것은 없네요.



RAID 구성




현재 300GB 디스크가 있습니다.


이 디스크는 OS가 깔려있는 디스크입니다.


그리고 새롭게 20GB 디스크를 5개 추가했습니다.


이 5개의 디스크로 구성해보도록 하겠습니다.



물리적으로 디스크 5개를 추가 후 Linux에 접속합니다.


추가된 디스크를 확인하는 방법은 다음과 같습니다.


[root@seob00 /]# fdisk -l


Disk /dev/sda: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0004da6b


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1        9139    73400320   83  Linux

/dev/sda2            9139       18276    73400320   83  Linux

/dev/sda3           18276       18538     2097152   82  Linux swap / Solaris

/dev/sda4           18538       39163   165673984    5  Extended

/dev/sda5   *       18538       39163   165672960   83  Linux


Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000



Disk /dev/sdc: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000



Disk /dev/sdd: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000



Disk /dev/sde: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000



Disk /dev/sdf: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


/dev/sda은 OS 디스크입니다. 즉 300 기가 디스크죠. 


나머지 /dev/sdb ~ /dev/sdf은 20GB 디스크 입니다.


그 외 다르게 확인하는 방법입니다.


[root@seob00 /]# ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4  /dev/sda5  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde  /dev/sdf


/dev/sda가 1~5 이렇게 나누는것은


/usr/local, /home, /, swap 등 .. 여러가지가 있기 때문에 나뉘어지는 것입니다.



먼저 디스크를 장착하면 리눅스 타입으로 변환해줘야합니다.


2TB 이상일 경우는 parted로 해줘야하지만, 현재 20GB이기 때문에 fdisk로 하겠습니다.


[root@seob00 /]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0xff4537fc.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-2610, default 1): 엔터

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 엔터 

Using default value 2610


Command (m for help): w // w은 저장하는 것입니다.

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.


위와같이 /dev/sdb부터 /dev/sdf까지 동일하게 실행시켜주시길 바랍니다.


[root@seob00 /]# fdisk -l


Disk /dev/sda: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0004da6b


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1        9139    73400320   83  Linux

/dev/sda2            9139       18276    73400320   83  Linux

/dev/sda3           18276       18538     2097152   82  Linux swap / Solaris

/dev/sda4           18538       39163   165673984    5  Extended

/dev/sda5   *       18538       39163   165672960   83  Linux


Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xff4537fc


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+  83  Linux


Disk /dev/sdc: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x52ad1b1d


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1        2610    20964793+  83  Linux


Disk /dev/sdd: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x75d4c7d8


   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1        2610    20964793+  83  Linux


Disk /dev/sde: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x3c8d642a


   Device Boot      Start         End      Blocks   Id  System

/dev/sde1               1        2610    20964793+  83  Linux


Disk /dev/sdf: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xb5acb161


   Device Boot      Start         End      Blocks   Id  System

/dev/sdf1               1        2610    20964793+  83  Linux


처음 fdisk -l와 달라진 것은 제가 굵게 표시했습니다.


각각 번호 1이 붙었네요. 이것으로 레이드를 곧바로 구성할 수 있습니다.


구성 전 레이드를 묶을 장치를 생성해줍니다.


[root@seob00 /]# ls /dev/md*

ls: cannot access /dev/md*: No such file or directory

[root@seob00 /]# mknod /dev/md6 b 9 6

[root@seob00 /]# ls /dev/md*

/dev/md6


레이드를 구성하기 위한 장치가 생겼습니다.


먼저 위에 mknod에 쓰인 옵션에 대해 설명을 조금 드리겠습니다.



 Block Device 장치

 md 장치의 주 번호

 RAID 번호 (ex 레이드 0을 구성할 때 9가 아닌 0을 적으면 됨)


현재 저희는 Block Device 장치에 RAID 6을 만들기 위해 생성했습니다.


여기서 크게 외우실 것은 없고 맨 마지막 6만 주의깊게 보시면 됩니다.



이제 본격적인 레이드 구성에 들어가겠습니다.


[root@seob00 /]# mdadm --create /dev/md6 --level=6 --raid-devices=5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md6 started.


생각보다 간단합니다.


마운트할 장치를 선택해주고 레이드 레벨을 선택하고, 어느 장치를 레이드 6 에 쓸것인지 적는 것입니다.


옵션에 대한 자세한 설명입니다.



--create 

 장치명

 --level=

 레이드 레벨

 --raid-devices=

 장치 수 // 장치 수를 적고 뒤에 구성할 장치의 이름을 나열하고 구분은 띄어쓰기로 한다.


만약 레이드 1을 구성하시게 된다면 다음과 같이 작성하시면 됩니다.


mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1



구성된 레이드 장치에 대해 확인하기 위해서는 다음 명령어로 확인하실 수 있습니다.


[root@seob00 /]# mdadm --query --detail /dev/md6

/dev/md6:

        Version : 1.2

  Creation Time : Mon May 19 18:31:54 2014

     Raid Level : raid6

     Array Size : 62843904 (59.93 GiB 64.35 GB)

  Used Dev Size : 20947968 (19.98 GiB 21.45 GB)

   Raid Devices : 5

  Total Devices : 5

    Persistence : Superblock is persistent


    Update Time : Mon May 19 18:34:55 2014

          State : clean, resyncing 

 Active Devices : 5

Working Devices : 5

 Failed Devices : 0

  Spare Devices : 0


         Layout : left-symmetric

     Chunk Size : 512K


  Resync Status : 48% complete


           Name : seob00:6  (local to host seob00)

           UUID : 8edb3835:bb073866:374cefa3:1ce3c3a2

         Events : 7


    Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1

       1       8       33        1      active sync   /dev/sdc1

       2       8       49        2      active sync   /dev/sdd1

       3       8       65        3      active sync   /dev/sde1

       4       8       81        4      active sync   /dev/sdf1


위에 보시면 언제 생성했는지와 크기, 그리고 사용할 수 있는 디스크 크기와 레이드 구성 수.


Fail과 Spare 정보도 확인이 가능합니다.


이것을 통해서 Spare도 할당이 가능한가보네요.



정상적으로 레이드를 구성했으면 또 다시 리눅스 타입으로 변환해줘야합니다.


저는 ext4 타입으로 변환하도록 하겠습니다.


[root@seob00 /]# mkfs.ext4 /dev/md6

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=384 blocks

3932160 inodes, 15710976 blocks

785548 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

480 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624, 11239424


Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 22 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.


/dev/md6 장치가 ext4 타입으로 변환되었습니다.


mkfs를 쓰지 않고 마운트 시켜본적은 없지만..


아마 되지 않을꺼라 생각합니다.


기본적으로 fdisk 같은 경우에도 새로 파티션 생성 시 ext2가 기본이 되는 것으로 알고 있습니다.



구성된 레이드를 마운트 시켜보도록 하겠습니다.


[root@seob00 /]# mkdir data

[root@seob00 /]# mount /dev/md6 data

[root@seob00 /]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda5       156G   31G  118G  21% /

tmpfs           495M   76K  495M   1% /dev/shm

/dev/sda1        69G  181M   66G   1% /home

/dev/sda2        69G   17G   49G  26% /usr/local

/dev/md6         59G  180M   56G   1% /data


data 라는 디렉터리를 생성 후 /dev/md6을 해당 폴더에 마운트 시켰습니다.


df -h 명령어를 주니 제대로 할당이 되어있네요.


또한 제가 처음에 말했듯이 20GB 5개면 100GB 입니다.


하지만 RAID 6 은 2개가 Fail나도 데이터 손실이 방지하도록 패리티 정보를 2차적까지 저장한다고 했습니다.


그렇기 때문에 Disk 3개의 용량만 나오는 것입니다.



이것으로 Linux에서 Raid 구성에 대해 마칩니다.



RAID 6에 대한 테스트




간단하게 RAID 6에 대한 테스트입니다.


총 5개가 되어야할 디스크에 1개의 디스크를 물리적으로 빼보았습니다.


처음 말했듯이 RAID 6은 2개의 디스크까지 Fail을 허용한다고 했습니다.



또한, 제가 끄기전 data 폴더에 aa 라는 파일을시험삼아 생성했습니다.


당연히 논리적이라면 aa 라는 파일이 날라가지 않겠죠.


[root@seob00 /]# mount /dev/md127 /data

[root@seob00 /]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda5       156G   31G  118G  21% /

tmpfs           495M   72K  495M   1% /dev/shm

/dev/sda1        69G  181M   66G   1% /home

/dev/sda2        69G   17G   49G  26% /usr/local

/dev/md127       59G  180M   56G   1% /data

[root@seob00 /]# cd data

[root@seob00 data]# ls

aa  lost+found


쫌 이상하네요.


/dev/md6 이라는 이름이 /dev/md127 이라는 이름으로 변경되었습니다.


뭐 건든것도 없는데 말이죠..


무튼 이것은 무시하고 다시 마운트 시키니 aa 라는 파일이 그대로 있습니다.



이건 굳이 테스트하지 않아도 당연히 되겠죠.


그럼 이번에는 추가적으로 2개의 디스크를 더 빼보겠습니다.


그러면 총 3개의 디스크가 Fail나게 되어버립니다.




2개만 남겨두고 테스트 해보겠습니다.


[root@seob00 ~]# fdisk -l


Disk /dev/sda: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0004da6b


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1        9139    73400320   83  Linux

/dev/sda2            9139       18276    73400320   83  Linux

/dev/sda3           18276       18538     2097152   82  Linux swap / Solaris

/dev/sda4           18538       39163   165673984    5  Extended

/dev/sda5   *       18538       39163   165672960   83  Linux


Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xff4537fc


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+  83  Linux


Disk /dev/sdc: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x52ad1b1d


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1        2610    20964793+  83  Linux


mount 시킬 /dev/md127 자체가 사라졌습니다.


절대 경로로 확인해본 결과


[root@seob00 ~]# ls /dev/md*

/dev/md127


/dev/md:

md-device-map


[root@seob00 ~]# mount /dev/md127 /data

mount: you must specify the filesystem type


/dev/md127 장치는 살아있는데 마운트를 시킬 수 없는 듯 싶습니다.


[root@seob00 ~]# mdadm --query --detail /dev/md127

/dev/md127:

        Version : 1.2

  Creation Time : Mon May 19 18:31:54 2014

     Raid Level : raid6

  Used Dev Size : 20947968 (19.98 GiB 21.45 GB)

   Raid Devices : 5

  Total Devices : 2

    Persistence : Superblock is persistent


    Update Time : Mon May 19 18:47:03 2014

          State : active, FAILED, Not Started 

 Active Devices : 2

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 0


         Layout : left-symmetric

     Chunk Size : 512K


           Name : seob00:6  (local to host seob00)

           UUID : 8edb3835:bb073866:374cefa3:1ce3c3a2

         Events : 23


    Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1

       1       8       33        1      active sync   /dev/sdc1

       2       0        0        2      removed

       3       0        0        3      removed

       4       0        0        4      removed


disk를 그냥 빼버렸기 때문에 .. Failed 라고 뜨지는 않습니다.


그냥 2개의 disk가 돌아가고 있네요.


맨 아래 보시면 3개의 Disk가 removed 되어있습니다.


마운트도 시킬 수 없기 때문에 .. 사실상 데이터가 완전히 날라갔다고 보면 되죠.


이 상태에서 새로운 디스크를 추가시킨다해도 전에 있던 정보들이 날라갔기 때문에 그냥 단순히 새로운 Raid 6을 구성한다고 보시면 됩니다.


이것으로 RAID6에 대한 테스트도 마치겠습니다.


반응형