Linux에서 Raid 구성
서버들을 이용하면 안에 컨트롤러를 통해 쉽게 레이드가 구성이 가능합니다.
이번은 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에 쓰인 옵션에 대해 설명을 조금 드리겠습니다.
b |
Block Device 장치 |
9 |
md 장치의 주 번호 |
6 |
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에 대한 테스트도 마치겠습니다.