스토리이알피
Solstice Disksuite 설정하기 본문
Solstice Disksuite 설정하기
-------------------------------------------------------------------------
1) MetaDB
- DiskSuite의 전체의 config정보와 metadevice의 상태 정보를 가지고 있는 DB
- slice 당 20M 정도면 충분하고, 최소 2개의 DB 복사본(Replicas) 요구된다.
권장 사항 : Disk 1 - 3 Replcas
Disk 2~4 - 각 Disk 당 2 Replias (총 4 ~ 8 )
Disk 5 이상 - 각 Disk당 1 Replicas
- MetaDB를 생성할 공간이 없으면, swap를 조금 줄이고, 공간을 확보한다.
- Os Mirror시에는 , 두 Disk에 각각 2개 이상의 MetaDB를 생성한다.
< metadb 확인 시 Replica를 1개만 만들어서, metatool에서 \"urgent\" 상태 확인 >
#metadb ; metatool
#metadb -a -f -c1 c0t0d0s7 [c0t1d0s7 ]
; -a는 adding, 초기화 또는 추가로 더할 때 사용
-f는 Force, 초기 생성 시나, 삭제 시 사용
-c는 각각의 Slice에 database Replicas의 copy본을 생성한다.
<한번 생성된 slice에는 Replicas를 추가로 더할 수가 없으므로, 지우고 새로 만들어 준다>
#metadb -d -f c0t0d0s7; metadb
;metatool에서 \"critical \" 상태 확인 <- 치명적 에러
#metadb -a -f -c3 c0t0d0s7;metadb
; metatool에서 \"Attention\" 상태 확인 후 commit 버튼을 눌러서 Attention의
이유를 확인한다. Or \"Problem List\"에서 확인 가능
[ 추가 Control가 있을 경우, 실험한다.]
#metadb -a -c3 c1t0d0s7;
;여전히 \"Attention\"이다 T_T, DiskSuite 4.2의 권고 사항은 Controler 3개 이상이다.
-------------------------------------------------------------------------------
2) Cancate
- Random I/O 성능이 좋다 <- Seek Time이 줄어 들어서..
- /var, /usr , / 등 모든 mount point에 사용 가능하다. --> 미리 Mirror 되어 있을 것을 권장
한 번 늘인 놈을 다시 줄일 수는 없다.
- ufs expand시 Encapsulate 지원 --> Mirror, Cancate만이 기존의 data 유지
[ c0t0d0s3 = 100m, c0t 1d0s3=100m라고 가정하고 실험한다. ]
< 한 slice를 사용하다가, 공간이 부족해서 cancate로 늘일 때 >
# newfs /dev/dsk/c0t0d0s3
# mount /dev/dsk/c0t0d0s3 /test
# cd /test; mkfile 90m file1;touch test
# mkfile 50m file2 <-- Disk 공간 부족으로 Fail
# umount /test
# metainit d100 2 1 c0t0d0s3 1 c0t1d0s3
# metastat Or metastat -p (간단히 표시); 상태 확인
# mount /dev/md/dsk/d100 /test
# df -k ; 아직 200m가 되지 않았음을 확인한다.
# growfs -M /test /dev/md/rdsk/d100 ; c0t1d0s4가 자동으로 format 된다.
cf> growfs /dev/md/rdsk/d100 ; mount 되어 있지 않을 때
# df -k ; 200m 됨을 확인
# cd /test;mkfile 50m file2; touch test2 <--만들어 짐을 확인
- cancate 뽀개기
# umount /test
# metaclear d100; metastat
# mount /dev/dsk/c0t0d0s3 /test
# cd /test;ls;more test2 <-- 모든 파일이 존재 하지만, I/O Error 발생
<-- 이 사실로 Cancate의 작동 원리를 생각해 보라...
<미리 생성되어 있는 cancate에 또 다른 Slice 붙여서 용량 늘이기>
# metattach d100 c3t4d0s0
# growfs -M /test /dev/md/rdsk/d100
< System slice (var) Cancate 하기 >
c0t0d0s3 = /var :1g , c0t1d0s3=2g 로 가정
# metainit -f d20 2 1 c0t0d0s3 1 c0t1d0s3 ; system slice는 -f option 필요
# /etc/vfstab에서 \"/dev/md/dsk/d20 /dev/md/rdsk/d20 /var.... \" 확인
바뀌지 않았으면 수정해 둔다.
# reboot ;system mount point 이므로...
# df -k ; 용량이 아직 변하지 않았다.
# growfs -M /var /dev/md/rdsk/d20
# df -k ; 용량 증가 확인
--------------------------------------------------------------------------
3) Stripe
- Sequential I/O 성능이 좋다, 대용량 Av 파일 편집 등에 탁월
- Encapsulate 지원되지 않는다. Stripe구성 시 기존 정보 파괴
- interlace 설정값(default 16k)에 따라, 성능이 좌우된다.
[ c0t0d0s3=1g,c0t0d0s4=1g, c0t1d0s3=1g,c0t1d0s4=1g ]
;interlace가 틀린 두 개의 stripe를 만들어서, /tmp에 복사 시간을 비교해 본다.
# metainit d50 1 2 c0t0d0s3 c0t1d0s3 ;newfs /dev/md/rdsk/d50
# metanit d60 1 2 c0t0d0s4 c0t1d0s4 i=1024k ;newfs ~
#mkdir d50; mount /dev/md/dsk/d50 /d50
#mkdir d60; mount /dev/md/dsk/c60 /d60
#cd d50;mkfile 500m ;cp 500m /tmp <- cp 시간 잰다.
# rm /tmp/500m
# cp d60l;mkfile 500m; cp 500m /tmp <-- cp 시간 비교..
---------------------------------------------------------------------------
4) Mirror
- Encapsulate 지원된다.
- Read Option : Round Robin(교대로 읽기), Geometric( sequential에 빠름 ) ,
First ( target hdd의 성능이 느릴 때 )
- Write option : Parallel , Serial ( Write 시간 길어짐 )
- Pass Number : Reboot 시 Sync단계 0 - none
Mirror 하는 Slice가 여러 개 있을 땐, 이 값을 틀리게 줘야 병목이 줄어든다.
swap은 항상 \'0\' 로 준다.
* Root DIsk Mirror 하기
[c0t0d0s0 = root, c0t0d0s1 = swap , c0t1d0 은 target이라 가정 ]
- System Mount point : /, /swap, /var, /usr... 은 meta device에 일단 넣어 둔 후
Reboot 한 뒤, md로 OS를 시작시킨 후, target Disk를 붙여서 미러링 해야 한다.
-백업 & target Disk slice 생성
# cp /etc/vfstab /etc/vfstab_before_md
# cp /etc/system /etc/system_before_root_mirror
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -n os_mirror -s - /dev/rdsk/c0t1d0s2
- 진행하면서, metatool & 로 변하는 모양을 잘 본다.
<root>
# metainit -f d10 1 1 c0t0d0s0 ; sub Disk d10
# metainit d20 1 1 c0t1d0s0 ; sub Disk d20
# metainit d50 -m d10 ; meta device d50 속에 sub disk d10 넣기
#metaroot d50 ; vfstab의 / 부분을 자동으로 변경하고, system file로 변경
<swap>
# metainit -f d11 1 1 c0t0d0s1 ; swap
# metainit d21 1 1 c0t1d0s1
# metainit d51 -m d11
..... /var 나 다른 놈이 있으며 계속 작업
#vi /etc/vfstab 수정; / 이외의 부분은 자동으로 안 바뀐다.
# Reboot
- 이제 target disk를 source에 붙여서 동기화시킨다.
이때, disk I/O 작업이 없어야 한다.
# lockfs -fa ; ufs lock 걸기 , i/o 발생이 없으면 안 해도 무방
# metattach d50 d20
# metattach d51 d21...
#metastat 나 metatool에서 Sync 되는 것을 확인한다.
- OBP에 mirror Disk 정보 입력
# cd /usr/platform/sun4u/sbin
# format 명령으로 Mirror Disk의 물리적 주소를 적어 둔다.
# eeprom use-nvramrc\\?=true
# eeprom nvramrc=\'devalias os_mirr /pci@1f,4000/scsi@3/disk@3,0\'
; > ok mode에서 reset 해야 설정됨
또는 okmode에서 devlias로 작업...
- Boot Test
; 소스, 미러 디스크를 둘 다 장착되어 있는 상태에서
ok> boot os_mirr로 test
; 소스 디스크를 빼고, test 할 경우, 간혹 metadb가 소스 디스크 쪽을
사용하고 있으면, 싱글모드로 빠져서 정상 부팅이 안 될 때가 있다.
이때는, 싱글 상태에서 빠져버린 디스크 쪽의 metadb를 지우면 된다.
# metadb -d -f c0t0d0s7
* Root disk unmirror 하기
; 미러링을 제거할 때는, 미러링 할 때의 반대 순서로 하면 된다.
#metadetach d50 d20
#metadetach d51 d21
#metaroot /dev/dsk/c0t0d0s0
; /etc/vfstab에서 / 이외의 부분은 자동으로 바뀌지 않으므로,
/dev/md을 원 OS 영역으로 바꿔준다.
# Reboot
# df -k로 / 에서 md가 사라진 것을 확인
# metaclear -r d50; metaclear d10
# metaclear -r d51; metaclear d11
# metaclear d20; metaclear d21...
; 더 이상 md 기능을 사용치 않으려면, metadb를 다 지우고
pkg를 찾어서 제거한다.
cf> Swap 은 Sync 할 필요성이 없어서 mirror 목록에서 빼 버려도 될 것 같은데...,
Swap가 없어도 Boot 하는데, 지장이 없을 텐데.... 왜 사용할까?
------------------------------------------------------------------------
5) Raid 5
- Read 성능은 좋으나, Write성능은 나쁘다.
- Raid3 은 sequential I/O에 좋으나, random i/o는 나쁘다.
# metainit d5 -r c3t4d0s3 c3t5d0s3 c3t6d0s3 [ -i 16k ]
# newfs /dev/md/rdsk/d5
# mount .... /raid5 ; mkfiles 500m 500m;touch raid5
* hot spare pool
# metahs -a hsp01 c0t7d0s3
# metaparam -h hsp01 d5
cf > 복수개의 Raid Metadevice를 하나의 spare에 둘 수 있다.
- hot spare설정 후, 강제로 disk(c3t4d0s3) 를 하나 빼고, 미리 만들어 두었던
raid5 파일을 수정하여, hot spare에 Volume이 자동으로 Re-sync
됨을 확인한다.
<-- 자동 sync 가 안 될 땐, raid5 mount 자리에, 작은 파일을 하나 만들어서
I/O를 발생시킨다.
<-- gui에서 volume의 Attention 표시와 빠진 디스크 자리에 spare가 들어감을
확인
* hot spare로 넘어 가 있을 때 file Disk 교환
# metareplace -e d5 c3t4d0s3
- 다시 Resync 되고, Attention이 사라진다.
* hot spare가 없을 때, Disk 수동 교환하기
# metareplace d5 c3t4d0s3 c3t7d0s4
-----------------------------------------------------------------------
6) UFS logging
- 대용량 FS가 깨졌을 때, 복구 시간을 단축시키기 위하여 저널링 log 사용하기
- log : Fs= 1M:100M
- / , /var/ ,/usr/ opt 등 System Mount point은 사용 불가
- Raid5에서 사용하는 것은 성능 때문에 권장하지 않는다.
* 기존의 fs에 ufs logging 기능을 더할 때
/data = c0t3d0s6,
# umount /data
# metainit d60 -t c0t3d0s6 c0t4d0s3
# vfstab 수정, mount
* 첨부터 ufs logging meta device 만들기
# metainit d61 -t c0t3d0s5 c0t4d0s3
# newfs /dev/md/rdsk/d61
# mount
7) 기 타
- 사용하지 않은 기능이 있을 때, boot시 경고 메시지가 출력되므로
/etc/system 파일에서 주석 처리한다.
- 제거하기
1. 무식하게 제거하기
- md 실행 전에 백업해 두었던 system 파일을 restore 시키고,
vfstab을 restore 시킨 후, reboot 한다.
2. 깔끔하게 제거하기
- 모든 meta device를 제거한다.
단, system mount point (특히 OS 미러 시 ), 바로 제거할 수 없으므로
생성한 반대 순서로 차례차례 제거해 나가야 한다.
vfstab에서 모든 md를 원래 slice로 변경하고,
특히 / 부분은 \"metaroot /dev/rdsk/오리지널 슬라이스\"를 꼭 해준 뒤
Reboot 하여, 모든 meta device를 제거한다.
- 모든 slice가 md에서 빠진 후, metadb를 제거하고, pkg를 제거한다.
=======================================================
Solstice DiskSuite
솔라리스 9에는 Solstice DiskSuite라는 것이 있다. 한마디로 말해 소프트웨어 레이드(RAID) 프로그램이다.
이 슈트를 쓰는 가장 큰 이유는 미러링에 있다고 생각한다. 두 개의 하드디스크를 미러링 한 다음 한 개의 하드가 고장 났다면, 고장한 하드를 떼어버리고, vfstab에서 md부분을 원래대로 예를 들어 c0d0s0해 주면 완벽하게 복구된다.
디스크를 통째로 미러링 하는 방법도 있다고 하는데, 그건 인터넷을 뒤져보자. 여기서 설명하는 건 단순한 이해를 돕고자 함이다.
1. 전제조건
c0d0s7과 c0d1s7 (각각 12GB)을 /export/home으로 설정할 것이다. 모든 작업은 루트로 했다. c0d0s7과 c0d1s7은 모두 포맷을 마친 상태다. (나중에 알았지만 포맷 안 해도 된다)
2. 메타 DB 생성
메타 DB라는 걸 먼저 생성한다.
# metadb -a -f -c 1 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7
-a는 생성하라는 거고 -f는 강제로 실행하라는 거고 -c 1은 리플리카의 개수. 기본값이 1이다.
3. 이제 md.tab를 수정할 차례다.
md.tab을 vi로 열어보면 각종 설정에 대한 설명이 나온다. 한번 읽어보는 것도 도움될 것이다. 솔라리스 8에서는 이 파일의 위치가 좀 달라질 수 있다. 솔라리스 9 x86 12/02 버전을 사용했다.
3-1. 미러
# vi /etc/lvm/md.tab
d0 2 1 /dev/dsk/c0d0s7 1 /dev/dsk/c0d1s7
d0 메타 장치 이름
2 2개의 슬라이스를 만듦
1 뒤에 나오는 1개의 논리 디바이스를 한 개의 슬라이스를 만듦
/dev/dsk/cXtXdXsX 논리 디바이스 이름
d0 2 1 /dev/dsk/c0d0s7 1 /dev/dsk/c0d1s7
| | | | | |
+ + +-------+ +-------+
/dev/dsk/c0d0s7 슬라이스를 1개의 슬라이스로, /dev/dsk/c0d1s7 슬라이스를 1개의 슬라이스로 해서 총 2개의 슬라이스 가지는 한 개의 d0 메타 장치를 만듦
3-2. 스트라이핑
# vi /etc/lvm/md.tab
d0 1 2 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7 -i 32k
d0 메타 장치 이름
1 1개의 슬라이스를 만듦
2 뒤에 나오는 2개의 논리 디바이스를 한 개의 디바이스로 만듦
/dev/dsk/cXdXsX 논리 디바이스 이름
-i 32k 인터레이스 사이즈 (32k 단위로 데이터를 쪼갬)
d0 1 2 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7 -i 32k
| | | | | | |
+ + +-------+---------------+----------+--+
/dev/dsk/c0d0s7 슬라이스와 /dev/dsk/c0d1s7 슬라이스를 한 개의 32k의인터레이스 사이즈를 가지는 1개의 슬라이스로 한개의 d0메타 장치를 만듦
3-3. 다음과 같이 하면 어떻게 될까?
d0 2 3 c0t1d0s2 c0t2d0s2 c0t3d0s2 -i 16k \\
3 c1t1d0s2 c1t2d0s2 c1t3d0s2 -i 32k
RAID 1+0를 구현했다. ^^
여기까지 하면 vi /etc/lvm/md.tab에 들어가는 내용이 무엇인지 감을 잡았으리라 믿는다. 이외에도 많다. RAID 5도 구현할 수 있다. md.tab의 man페이지를 참고하자.
4. 마운팅 및 포맷
d0 디바이스를 초기화하고 포맷한 다음 마운팅 하면 된다.
# metainit d0
# newfs /dev/md/rdsk/d0
# vi /etc/vfstab
/dev/md/dsk/d0 /dev/md/rdsk/d0 /export/home ufs 2 yes -
# mountall
'컴퓨터 > 서버팁' 카테고리의 다른 글
리눅스 /etc/fstab 설정 (1) | 2019.12.08 |
---|---|
D2 Array 추가 (0) | 2019.12.08 |
Raid2에서 Raid5로 변경 (0) | 2019.12.08 |
SUN 서버 Customer Service Report (0) | 2019.12.08 |
솔라리스 디스크 추가 (0) | 2019.12.08 |