첫뻔째 과제.
하드웨어적으로 RAID1 이 구성된 시스템을 허물고
software 적으로 동일한 움직임을 구현하는것.
-> HDD0 , HDD1 이 동시에 읽고 쓰기가 이루어져 양 디스크가 완벽하게 동일한 구조로 작동.
-> 한쪽 디스크의 손상시 다른 한쪽으로 완벽하게 가동 가능 할 것
-> 한쪽 디스크가 서버에서 탈출 하는 재앙이 벌어진다고 해도...
솔라리스를 처음 접해보고, 리눅스라고 해봤자 ls 및 cat 등 명령어 밖에 몰랐던 터에 맡겨진 재앙과 같은
엄청난 업무에 당황했지만, 일단 주어진 시간이 여유가 있었다는 점 (실제 개시일은 다음달 예정)과 옆에서 아무 말 없이 믿고
맡겨 준다는 점(때론 단점이 되기도 한다)으로 어떻게든 해결.
하지만 선배 자신도 해본경험이 없는 내용이고, 그래서 회사내에서 물어 볼데도 없었던 지라 작업은 더더욱 난관에 봉착했다.
일단 알게 된것.
solaris 는 논리적으로 몇개의 슬라이스로 나눠 지며, 각각 고유의 역할을 담당하고 있다.
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1267 9.71GB (1267/0/0) 20354355
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
....
....
상기는 각각의 슬라이스 번호와 실린더,용량 정보.
초기에 인스톨 할때 설정했던 내용이기 때문에 보는 순간 알았지만
미러링을 구성하기 위해 필요한건 여분의 슬라이스 였다.
* metadb 정보를 저장하기 위한 10 ~ 30 mb 정도의 작은 공간.
슬라이스는 7번에 만들면 될 것 같았지만 문제는 그 용량을 어떻게 확보하느냐.
1. 가장 시스템에 영향을 안 끼칠것 같은 export/home 을 백업 받고,
2. 지운뒤
3. 30mb 만큼 도려낸 크기로 재 생성해서
4. 남겨진 30b 를 슬라이스 7에 할당하고
5. 백업을 복구.
나름대로 멋진 작전을 세웠지만,
실제 시스템에서 저 디렉토리에 뭐가 있을까... 하는 점이 가장 신경쓰인다.
유저들의 home 디렉토리가 되는 곳 같은데, 방대한 데이터들이 저장 되어 있다면
백업/복구 만으로도 엄청난 시간/비용이 소모될 것 같기 때문이다.
또한 아직 둔감하기만 한 유닉스인데
백업/복구가 만일 하나라도 실패한다면 그 책임은 어쩔 것인가...
인터넷에서 자료를 찾아보니 SWAP 영역을 이용하는 방법이 있었다.
SWAP 영역이야 항상 데이터가 일시적을 보관되는 영역일 테고, 그렇다면 백업/복구의 필요+위험은 사라진다.
하지만 빈번히 움직이고 있을 SWAP 영역을 언제 어느 시점에 어떤식으로 잘라낼 것인가?
# df -hF ufs
ファイルシステム サイズ 使用済み 使用可能 容量 マウント先
/dev/dsk/c0t0d0s0 9.9G 798M 9.0G 8% /
/dev/dsk/c0t0d0s3 9.9G 2.8G 6.9G 30% /usr
/dev/dsk/c0t0d0s4 9.9G 91M 9.7G 1% /var
/dev/dsk/c0t0d0s5 79G 1.9G 76G 3% /db
/dev/dsk/c0t0d0s6 16G 17M 16G 1% /export/home
# swap -lh
swap ファイル デバイス swaplo ブロック 空き容量
/dev/dsk/c0t0d0s1 29,65 8 20354344 20354344
현재 테스트 서버 환경이라 SWAP 영역의 사용은 거의 이뤄지고 있지 않은듯 하다.
각종 자료를 찾아보면 서버가 안가한 시간에(스왑이 활발하게 쓰여지지 않는 시점) 스왑을 잠시
언마운트 시켜서 잘라내라고 했는데, 실제로 한가한 시간은 언제일까
일단 스왑을 해제 한다.
# swap -d /dev/dsk/c0t0d0s1
/dev/dsk/c0t0d0s1 はダンプデバイスでした --
新しくダンプデバイスを選択するために dumpadm(1M) -d swap を起動しています
dumpadm: swap デバイスを使用できません
해제 되었는지 확인
# swap -l
swap デバイスが構成されていません
이제 스왑 영역을 format 에서 요리 할 수 있을 것 같은 기분이 든다.
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0
1. c0t1d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0
Specify disk (enter its number): 0
현재 작업하려는 것은 0 번 디스크 이므로 (기동중이다) 0 번 디스크를 선택
format> p
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!<cmd> - execute <cmd>, then return
quit
partition> p
Current partition table (original):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1315 10.07GB (1315/0/0) 21125475
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
1 번 슬라이스를 잘라서 요리하자.
metadb용 영역은 그다지 용량이 많이 필요하지 않다고 하니까 35mb 쯤 주도록 한다.
그런 의미에서 스왑 용량을 0.3gb 정도 줄였다.
partition> 1
Part Tag Flag Cylinders Size Blocks
1 swap wu 1 - 1315 10.07GB (1315/0/0) 21125475
Enter partition id tag[swap]:
Enter partition permission flags[wu]:
Enter new starting cyl[1]:
Enter partition size[21125475b, 1315c, 1315e, 10315.17mb, 10.07gb]: 10.04gb
partition> p
Current partition table (unnamed):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
partition> 7
Part Tag Flag Cylinders Size Blocks
7 unassigned wm 1311 - 1315 39.22MB (5/0/0) 80325
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[1311]: 1312
Enter partition size[80325b, 5c, 1316e, 39.22mb, 0.04gb]: 30mb
partition> p
Current partition table (unnamed):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 1312 - 1315 31.38MB (4/0/0) 64260
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
7번 슬라이스에 metadb 용 영역을 확보했다.
실제로 파티션이 같아 졌는지 확인 해 보자.
# format
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0
1. c0t1d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0
Specify disk (enter its number): 1
format> p
partition> p
Current partition table (original):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 1312 - 1315 31.38MB (4/0/0) 64260
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
이제 뭔가 할 수 있을 것 같은 기분이 든다.
앞서서 metadb 를 위한 공간을 모두 확보 했다.
그 다음 해야 할일은 다른 디스크(HDD1) 도 이것과 같은 파티션 상태로 만들어야 되는데
그럼 아까 했던 그 난리를 다시 해야 되느냐..
아니라는 걸 알았다.
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/cs2
이 명령어 한줄로 슬라이스 정보가 고스란히 HDD1 로 넘어간다.
참고로 c0t0d0 은 HDD0 , c0t1d0 은 HDD1 을 가르키며
s2 는 슬라이스 2번으로 솔라리스에서는 2번 슬라이스가 모든 디스크 정보를 가지고 있는것 같다...
이제 양 디스크에 metadb 정보를 생성 해 주자.
# metadb -a -c 3 -f c0t0d0s7 c0t1d0s7
-c 3 의 옵션으로 각각 디스크당 3개씩 정보가 들어간다. ( <- 왜 이렇게 하는거지 ? )
잘 생성 되었는지 확인.
# metadb
flags first blk block count
a u 16 8192 /dev/dsk/c0t0d0s7
a u 8208 8192 /dev/dsk/c0t0d0s7
a u 16400 8192 /dev/dsk/c0t0d0s7
a u 16 8192 /dev/dsk/c0t1d0s7
a u 8208 8192 /dev/dsk/c0t1d0s7
a u 16400 8192 /dev/dsk/c0t1d0s7
앞으로의 과정을 위해
일단 미러링의 이해와 참고를 위해 다음과 같은 표를 만들었다
+----+------------------+
| d0 | d10 ( c0t0d0s0 ) |
| | d20 ( c0t1d0s0 ) |
+----+------------------+
| d1 | d11 ( c0t0d0s1 ) |
| | d21 ( c0t1d0s1 ) |
+----+------------------+
| d3 | d13 ( c0t0d0s3 ) |
| | d23 ( c0t1d0s3 ) |
+----+------------------+
| d4 | d14 ( c0t0d0s4 ) |
| | d24 ( c0t1d0s4 ) |
+----+------------------+
| d5 | d15 ( c0t0d0s5 ) |
| | d25 ( c0t1d0s6 ) |
+----+------------------+
| d6 | d16 ( c0t0d0s6 ) |
| | d26 ( c0t1d0s6 ) |
+----+------------------+
d0 은 논리적인 하나의 디스크 이고, 그 아래에 있는 d10 과 d20 은 각각 마스터,세컨등의 하드디스크를 가리킨다.
d10 이 죽던 d20 이 죽던 OS 에서는 d0 이라는 하나의 디스크에 읽고 쓸 뿐인가...
# metainit -f d10 1 1 c0t0d0s0
d10: 連結/ストライプがセットアップされます
# metainit -f d11 1 1 c0t0d0s1
d11: 連結/ストライプがセットアップされます
# metainit -f d13 1 1 c0t0d0s3
d13: 連結/ストライプがセットアップされます
# metainit -f d14 1 1 c0t0d0s4
d14: 連結/ストライプがセットアップされます
# metainit -f d15 1 1 c0t0d0s5
d15: 連結/ストライプがセットアップされます
# metainit -f d16 1 1 c0t0d0s6
d16: 連結/ストライプがセットアップされます
마스터 디스크의 작업.
실제적인 슬라이스 0 부터 6번 까지를 ( 2번 제외. 2번은 안한다 )
미러링을 위해 d10 ~ d16 으로 지정해준다.
# metainit d20 1 1 c0t1d0s0
d20: 連結/ストライプがセットアップされます
# metainit d21 1 1 c0t1d0s1
d21: 連結/ストライプがセットアップされます
# metainit d23 1 1 c0t1d0s3
d23: 連結/ストライプがセットアップされます
# metainit d24 1 1 c0t1d0s4
d24: 連結/ストライプがセットアップされます
# metainit d25 1 1 c0t1d0s5
d25: 連結/ストライプがセットアップされます
# metainit d26 1 1 c0t1d0s6
d26: 連結/ストライプがセットアップされます
d20 시리즈들은 세컨더리 하드디스크의 슬라이스들을 연결한다.
디스크 자체는 실제 비어 있다. (파티션만 나눠져 있고)
# metainit d0 -m d10
d0: ミラーがセットアップされます
# metainit d1 -m d11
d1: ミラーがセットアップされます
# metainit d3 -m d13
d3: ミラーがセットアップされます
# metainit d4 -m d14
d4: ミラーがセットアップされます
# metainit d5 -m d15
d5: ミラーがセットアップされます
# metainit d6 -m d16
d6: ミラーがセットアップされます
이제, d10 ~ d16 과 d20 ~ d26 들을 대표하는 d0 ~ d6 에
d10 ~ d16을 연결 시켜주자.
d20 ~ d26는 나중에 한다.
# cp /etc/vfstab /etc/vfstab.beforesvm
# cp /etc/system /etc/system.beforesvm
※変更の前にバックアップをとっておくこと。
저 두개의 화일이 바뀔건데, 그 전에 백업을 받아 놓자.
# metaroot d0
※ /etc/vfstab や /etc/system の内容の一部が変更される。
スライス0(/) 以外のとろこは変更されない為、vfstabの変更を行なう必要がある。
위 명령을 실행하면 /etc/vfstab 랑 /etc/system 화일의 내용이 바뀐다.
vfstab 는 부팅시에 마운트 될 슬라이스에 대한 정보가 담겨져 있는데
그중에
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 ..... 부분이
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no - .... 로 바뀐다.
하지만 나머지 슬라이스에 대한 정보는 그대로 남아있다.
그러므로 수동으로 바꿔줘야 한다.
# vi /etc/vfstab
次のように編集する
******************************************************************************
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
fd - /dev/fd fd - no -
/proc - /proc proc - no -
#/dev/dsk/c0t0d0s1 - - swap - no -
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
#/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
/dev/md/dsk/d3 /dev/md/rdsk/d3 /usr ufs 1 no -
#/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
/dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no -
#/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
/dev/md/dsk/d5 /dev/md/rdsk/d5 /db ufs 2 yes -
#/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2 yes -
/dev/md/dsk/d6 /dev/md/rdsk/d6 /export/home ufs 2 yes -
/devices - /devices devfs - no -
ctfs - /system/contract ctfs - no -
objfs - /system/object objfs - no -
swap - /tmp tmpfs - yes -
******************************************************************************
원래 있던 애들을 주석을 달아버리고
그 밑에 새롭게 작성 했다.
이렇게 해서 리부팅 해 주면,
이제부터 d0 ~ d6 을 통해서 하드디스크에 억세스 하게 된다.
잠깐 바뀐 내용은 보자.
# diff /etc/vfstab /etc/vfstab.beforesvm
<
< #swap
< #/dev/dsk/c0t0d0s1 - - swap - no -
< /dev/md/dsk/d1 - - swap - no -
<
< #/
< #/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
< /dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
<
< #/usr
< #/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
< /dev/md/dsk/d3 /dev/md/rdsk/d3 /usr ufs 1 no -
<
< #/var
< #/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
< /dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no -
<
< #/db
< #/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
< /dev/md/dsk/d5 /dev/md/rdsk/d5 /db ufs 2 yes -
<
< #/export/home
< #/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2 yes -
< /dev/md/dsk/d6 /dev/md/rdsk/d6 /export/home ufs 2 yes -
<
---
> /dev/dsk/c0t0d0s1 - - swap - no -
> /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
> /dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
> /dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
> /dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
> /dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2
그리고 나서 리부팅 한다.
lockfs -af 를 걸어주는 이유는... 모르겠다@
# lockfs -af && shutdown -y -g 0 -i 6
[...]
그다음엔 아까 d0~d6 에 안 붙였던 d20~d26 들을 붙여 준다.
이때 미러링의 재동기화가 시작 된다.
# metattach d0 d20
d0: サブミラー d20 is attached
# metattach d1 d21
d1: サブミラー d21 is attached
# metattach d3 d23
d3: サブミラー d23 is attached
# metattach d4 d24
d4: サブミラー d24 is attached
# metattach d5 d25
d5: サブミラー d25 is attached
# metattach d6 d26
d6: サブミラー d26 is attached
온전히 붙였는지는 다음과 같이 확인할 수 있다.
아직 재 동기화는 진행중이다.
# metastat -p
d6 -m d16 d26 1
d16 1 1 c0t0d0s6
d26 1 1 c0t1d0s6
d5 -m d15 d25 1
d15 1 1 c0t0d0s5
d25 1 1 c0t1d0s5
d4 -m d14 d24 1
d14 1 1 c0t0d0s4
d24 1 1 c0t1d0s4
d3 -m d13 d23 1
d13 1 1 c0t0d0s3
d23 1 1 c0t1d0s3
d0 -m d10 d20 1
d10 1 1 c0t0d0s0
d20 1 1 c0t1d0s0
d1 -m d11 d21 1
d11 1 1 c0t0d0s1
d21 1 1 c0t1d0s1
재 동기화는 다음과 같이 확인한다.
하드디스크의 용량에 따라 시간의 차는 있지만 꽤 오래 걸렸다.
재 동기화가 완료되면 두개의 디스크는 동일해 진다.
(따로 떼어네서 세컨더리 디스크 내용 살펴보면 원래 마스터에 들어있던 내용 그대로 이다.)
# metastat | grep %
再同期実行中: 1 % 完了
再同期実行中: 0 % 完了
再同期実行中: 3 % 完了
再同期実行中: 4 % 完了
再同期実行中: 4 % 完了
再同期実行中: 3 % 完了
#
이후 덤프 재설정.
기본적으로 덤프는 스왑으로 지정 되 있는데
스왑도 현재는 /dev/dsk/c0t0s0d1 이 /dev/md/dsk/d1 로 바뀐 상황이라
이 처리도 해주자.
# rmdir /var/crash/*
# mkdir /var/crash/`hostname`
# chmod 700 /var/crash/`hostname`
# dumpadm -s /var/crash/`hostname` -d /dev/md/dsk/d1
Dump content: kernel pages
Dump device: /dev/md/dsk/d1 (swap)
Savecore directory: /var/crash/bento
Savecore enabled: yes
다음은 부팅을 위한 설정이다.
여기까지만 해도 디스크의 자료 복원 시키는데는 문제가 없지만
마스터 디스크가 완전히 날아가 버렸을때 세컨더리만 가지고는 부팅이 되지 않는다.
# /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t0d0s0
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 260 sectors starting at 50 (abs 16115)
솔라리스 10 에서는 installgrub 명령을 사용해야 하는듯.
에디터에서 다음을 추가 해 준다.
#vi /etc/system
* Begin MDD root info (do not edit)
rootdev:/pseudo/md@0:0,0,blk
set md:mirrored_root_flag=1
* End MDD root info (do not edit)
이후 ls 명령으로 다음을 확인한다.
# ls -l /dev/dsk/c0t0d0s0 /dev/dsk/c0t1d0s0
lrwxrwxrwx 1 root root 73 9月 3日 10:40 /dev/dsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0:a
lrwxrwxrwx 1 root root 73 9月 4日 09:51 /dev/dsk/c0t1d0s0 -> ../../devices/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0:a
확인한 내용을 바탕으로 다음을 실행한다.
# eeprom "nvramrc=devalias rootdisk /pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/disk@0,0:a devalias pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/disk@1,0:a"
# eeprom "use-nvramrc?=true"
# eeprom boot-device="rootdisk rootmirror net"
위험한 실험? 이긴 하지만
이렇게해서 마스터 하드를 서버로 부터 뽑았다.
결과는..
성공했다.
[출처] solaris 10, software RAID1 구축 #2 - 미러링|작성자 jirumi
하드웨어적으로 RAID1 이 구성된 시스템을 허물고
software 적으로 동일한 움직임을 구현하는것.
-> HDD0 , HDD1 이 동시에 읽고 쓰기가 이루어져 양 디스크가 완벽하게 동일한 구조로 작동.
-> 한쪽 디스크의 손상시 다른 한쪽으로 완벽하게 가동 가능 할 것
-> 한쪽 디스크가 서버에서 탈출 하는 재앙이 벌어진다고 해도...
솔라리스를 처음 접해보고, 리눅스라고 해봤자 ls 및 cat 등 명령어 밖에 몰랐던 터에 맡겨진 재앙과 같은
엄청난 업무에 당황했지만, 일단 주어진 시간이 여유가 있었다는 점 (실제 개시일은 다음달 예정)과 옆에서 아무 말 없이 믿고
맡겨 준다는 점(때론 단점이 되기도 한다)으로 어떻게든 해결.
하지만 선배 자신도 해본경험이 없는 내용이고, 그래서 회사내에서 물어 볼데도 없었던 지라 작업은 더더욱 난관에 봉착했다.
일단 알게 된것.
solaris 는 논리적으로 몇개의 슬라이스로 나눠 지며, 각각 고유의 역할을 담당하고 있다.
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1267 9.71GB (1267/0/0) 20354355
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
....
....
상기는 각각의 슬라이스 번호와 실린더,용량 정보.
초기에 인스톨 할때 설정했던 내용이기 때문에 보는 순간 알았지만
미러링을 구성하기 위해 필요한건 여분의 슬라이스 였다.
* metadb 정보를 저장하기 위한 10 ~ 30 mb 정도의 작은 공간.
슬라이스는 7번에 만들면 될 것 같았지만 문제는 그 용량을 어떻게 확보하느냐.
1. 가장 시스템에 영향을 안 끼칠것 같은 export/home 을 백업 받고,
2. 지운뒤
3. 30mb 만큼 도려낸 크기로 재 생성해서
4. 남겨진 30b 를 슬라이스 7에 할당하고
5. 백업을 복구.
나름대로 멋진 작전을 세웠지만,
실제 시스템에서 저 디렉토리에 뭐가 있을까... 하는 점이 가장 신경쓰인다.
유저들의 home 디렉토리가 되는 곳 같은데, 방대한 데이터들이 저장 되어 있다면
백업/복구 만으로도 엄청난 시간/비용이 소모될 것 같기 때문이다.
또한 아직 둔감하기만 한 유닉스인데
백업/복구가 만일 하나라도 실패한다면 그 책임은 어쩔 것인가...
인터넷에서 자료를 찾아보니 SWAP 영역을 이용하는 방법이 있었다.
SWAP 영역이야 항상 데이터가 일시적을 보관되는 영역일 테고, 그렇다면 백업/복구의 필요+위험은 사라진다.
하지만 빈번히 움직이고 있을 SWAP 영역을 언제 어느 시점에 어떤식으로 잘라낼 것인가?
# df -hF ufs
ファイルシステム サイズ 使用済み 使用可能 容量 マウント先
/dev/dsk/c0t0d0s0 9.9G 798M 9.0G 8% /
/dev/dsk/c0t0d0s3 9.9G 2.8G 6.9G 30% /usr
/dev/dsk/c0t0d0s4 9.9G 91M 9.7G 1% /var
/dev/dsk/c0t0d0s5 79G 1.9G 76G 3% /db
/dev/dsk/c0t0d0s6 16G 17M 16G 1% /export/home
# swap -lh
swap ファイル デバイス swaplo ブロック 空き容量
/dev/dsk/c0t0d0s1 29,65 8 20354344 20354344
현재 테스트 서버 환경이라 SWAP 영역의 사용은 거의 이뤄지고 있지 않은듯 하다.
각종 자료를 찾아보면 서버가 안가한 시간에(스왑이 활발하게 쓰여지지 않는 시점) 스왑을 잠시
언마운트 시켜서 잘라내라고 했는데, 실제로 한가한 시간은 언제일까
일단 스왑을 해제 한다.
# swap -d /dev/dsk/c0t0d0s1
/dev/dsk/c0t0d0s1 はダンプデバイスでした --
新しくダンプデバイスを選択するために dumpadm(1M) -d swap を起動しています
dumpadm: swap デバイスを使用できません
해제 되었는지 확인
# swap -l
swap デバイスが構成されていません
이제 스왑 영역을 format 에서 요리 할 수 있을 것 같은 기분이 든다.
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0
1. c0t1d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0
Specify disk (enter its number): 0
현재 작업하려는 것은 0 번 디스크 이므로 (기동중이다) 0 번 디스크를 선택
format> p
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!<cmd> - execute <cmd>, then return
quit
partition> p
Current partition table (original):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1315 10.07GB (1315/0/0) 21125475
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
1 번 슬라이스를 잘라서 요리하자.
metadb용 영역은 그다지 용량이 많이 필요하지 않다고 하니까 35mb 쯤 주도록 한다.
그런 의미에서 스왑 용량을 0.3gb 정도 줄였다.
partition> 1
Part Tag Flag Cylinders Size Blocks
1 swap wu 1 - 1315 10.07GB (1315/0/0) 21125475
Enter partition id tag[swap]:
Enter partition permission flags[wu]:
Enter new starting cyl[1]:
Enter partition size[21125475b, 1315c, 1315e, 10315.17mb, 10.07gb]: 10.04gb
partition> p
Current partition table (unnamed):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
partition> 7
Part Tag Flag Cylinders Size Blocks
7 unassigned wm 1311 - 1315 39.22MB (5/0/0) 80325
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[1311]: 1312
Enter partition size[80325b, 5c, 1316e, 39.22mb, 0.04gb]: 30mb
partition> p
Current partition table (unnamed):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 1312 - 1315 31.38MB (4/0/0) 64260
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
7번 슬라이스에 metadb 용 영역을 확보했다.
실제로 파티션이 같아 졌는지 확인 해 보자.
# format
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0
1. c0t1d0 <DEFAULT cyl 17846 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0
Specify disk (enter its number): 1
format> p
partition> p
Current partition table (original):
Total disk cylinders available: 17846 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 3928 - 5233 10.00GB (1306/0/0) 20980890
1 swap wu 1 - 1311 10.04GB (1311/0/0) 21061215
2 backup wm 0 - 17845 136.71GB (17846/0/0) 286695990
3 usr wm 2622 - 3927 10.00GB (1306/0/0) 20980890
4 var wm 1316 - 2621 10.00GB (1306/0/0) 20980890
5 unassigned wm 7402 - 17845 80.01GB (10444/0/0) 167782860
6 home wm 5234 - 7401 16.61GB (2168/0/0) 34828920
7 unassigned wm 1312 - 1315 31.38MB (4/0/0) 64260
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wu 0 0 (0/0/0) 0
이제 뭔가 할 수 있을 것 같은 기분이 든다.
앞서서 metadb 를 위한 공간을 모두 확보 했다.
그 다음 해야 할일은 다른 디스크(HDD1) 도 이것과 같은 파티션 상태로 만들어야 되는데
그럼 아까 했던 그 난리를 다시 해야 되느냐..
아니라는 걸 알았다.
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/cs2
이 명령어 한줄로 슬라이스 정보가 고스란히 HDD1 로 넘어간다.
참고로 c0t0d0 은 HDD0 , c0t1d0 은 HDD1 을 가르키며
s2 는 슬라이스 2번으로 솔라리스에서는 2번 슬라이스가 모든 디스크 정보를 가지고 있는것 같다...
이제 양 디스크에 metadb 정보를 생성 해 주자.
# metadb -a -c 3 -f c0t0d0s7 c0t1d0s7
-c 3 의 옵션으로 각각 디스크당 3개씩 정보가 들어간다. ( <- 왜 이렇게 하는거지 ? )
잘 생성 되었는지 확인.
# metadb
flags first blk block count
a u 16 8192 /dev/dsk/c0t0d0s7
a u 8208 8192 /dev/dsk/c0t0d0s7
a u 16400 8192 /dev/dsk/c0t0d0s7
a u 16 8192 /dev/dsk/c0t1d0s7
a u 8208 8192 /dev/dsk/c0t1d0s7
a u 16400 8192 /dev/dsk/c0t1d0s7
앞으로의 과정을 위해
일단 미러링의 이해와 참고를 위해 다음과 같은 표를 만들었다
+----+------------------+
| d0 | d10 ( c0t0d0s0 ) |
| | d20 ( c0t1d0s0 ) |
+----+------------------+
| d1 | d11 ( c0t0d0s1 ) |
| | d21 ( c0t1d0s1 ) |
+----+------------------+
| d3 | d13 ( c0t0d0s3 ) |
| | d23 ( c0t1d0s3 ) |
+----+------------------+
| d4 | d14 ( c0t0d0s4 ) |
| | d24 ( c0t1d0s4 ) |
+----+------------------+
| d5 | d15 ( c0t0d0s5 ) |
| | d25 ( c0t1d0s6 ) |
+----+------------------+
| d6 | d16 ( c0t0d0s6 ) |
| | d26 ( c0t1d0s6 ) |
+----+------------------+
d0 은 논리적인 하나의 디스크 이고, 그 아래에 있는 d10 과 d20 은 각각 마스터,세컨등의 하드디스크를 가리킨다.
d10 이 죽던 d20 이 죽던 OS 에서는 d0 이라는 하나의 디스크에 읽고 쓸 뿐인가...
# metainit -f d10 1 1 c0t0d0s0
d10: 連結/ストライプがセットアップされます
# metainit -f d11 1 1 c0t0d0s1
d11: 連結/ストライプがセットアップされます
# metainit -f d13 1 1 c0t0d0s3
d13: 連結/ストライプがセットアップされます
# metainit -f d14 1 1 c0t0d0s4
d14: 連結/ストライプがセットアップされます
# metainit -f d15 1 1 c0t0d0s5
d15: 連結/ストライプがセットアップされます
# metainit -f d16 1 1 c0t0d0s6
d16: 連結/ストライプがセットアップされます
마스터 디스크의 작업.
실제적인 슬라이스 0 부터 6번 까지를 ( 2번 제외. 2번은 안한다 )
미러링을 위해 d10 ~ d16 으로 지정해준다.
# metainit d20 1 1 c0t1d0s0
d20: 連結/ストライプがセットアップされます
# metainit d21 1 1 c0t1d0s1
d21: 連結/ストライプがセットアップされます
# metainit d23 1 1 c0t1d0s3
d23: 連結/ストライプがセットアップされます
# metainit d24 1 1 c0t1d0s4
d24: 連結/ストライプがセットアップされます
# metainit d25 1 1 c0t1d0s5
d25: 連結/ストライプがセットアップされます
# metainit d26 1 1 c0t1d0s6
d26: 連結/ストライプがセットアップされます
d20 시리즈들은 세컨더리 하드디스크의 슬라이스들을 연결한다.
디스크 자체는 실제 비어 있다. (파티션만 나눠져 있고)
# metainit d0 -m d10
d0: ミラーがセットアップされます
# metainit d1 -m d11
d1: ミラーがセットアップされます
# metainit d3 -m d13
d3: ミラーがセットアップされます
# metainit d4 -m d14
d4: ミラーがセットアップされます
# metainit d5 -m d15
d5: ミラーがセットアップされます
# metainit d6 -m d16
d6: ミラーがセットアップされます
이제, d10 ~ d16 과 d20 ~ d26 들을 대표하는 d0 ~ d6 에
d10 ~ d16을 연결 시켜주자.
d20 ~ d26는 나중에 한다.
# cp /etc/vfstab /etc/vfstab.beforesvm
# cp /etc/system /etc/system.beforesvm
※変更の前にバックアップをとっておくこと。
저 두개의 화일이 바뀔건데, 그 전에 백업을 받아 놓자.
# metaroot d0
※ /etc/vfstab や /etc/system の内容の一部が変更される。
スライス0(/) 以外のとろこは変更されない為、vfstabの変更を行なう必要がある。
위 명령을 실행하면 /etc/vfstab 랑 /etc/system 화일의 내용이 바뀐다.
vfstab 는 부팅시에 마운트 될 슬라이스에 대한 정보가 담겨져 있는데
그중에
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 ..... 부분이
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no - .... 로 바뀐다.
하지만 나머지 슬라이스에 대한 정보는 그대로 남아있다.
그러므로 수동으로 바꿔줘야 한다.
# vi /etc/vfstab
次のように編集する
******************************************************************************
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
fd - /dev/fd fd - no -
/proc - /proc proc - no -
#/dev/dsk/c0t0d0s1 - - swap - no -
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
#/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
/dev/md/dsk/d3 /dev/md/rdsk/d3 /usr ufs 1 no -
#/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
/dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no -
#/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
/dev/md/dsk/d5 /dev/md/rdsk/d5 /db ufs 2 yes -
#/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2 yes -
/dev/md/dsk/d6 /dev/md/rdsk/d6 /export/home ufs 2 yes -
/devices - /devices devfs - no -
ctfs - /system/contract ctfs - no -
objfs - /system/object objfs - no -
swap - /tmp tmpfs - yes -
******************************************************************************
원래 있던 애들을 주석을 달아버리고
그 밑에 새롭게 작성 했다.
이렇게 해서 리부팅 해 주면,
이제부터 d0 ~ d6 을 통해서 하드디스크에 억세스 하게 된다.
잠깐 바뀐 내용은 보자.
# diff /etc/vfstab /etc/vfstab.beforesvm
<
< #swap
< #/dev/dsk/c0t0d0s1 - - swap - no -
< /dev/md/dsk/d1 - - swap - no -
<
< #/
< #/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
< /dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
<
< #/usr
< #/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
< /dev/md/dsk/d3 /dev/md/rdsk/d3 /usr ufs 1 no -
<
< #/var
< #/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
< /dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no -
<
< #/db
< #/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
< /dev/md/dsk/d5 /dev/md/rdsk/d5 /db ufs 2 yes -
<
< #/export/home
< #/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2 yes -
< /dev/md/dsk/d6 /dev/md/rdsk/d6 /export/home ufs 2 yes -
<
---
> /dev/dsk/c0t0d0s1 - - swap - no -
> /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
> /dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /usr ufs 1 no -
> /dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no -
> /dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /db ufs 2 yes -
> /dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /export/home ufs 2
그리고 나서 리부팅 한다.
lockfs -af 를 걸어주는 이유는... 모르겠다@
# lockfs -af && shutdown -y -g 0 -i 6
[...]
그다음엔 아까 d0~d6 에 안 붙였던 d20~d26 들을 붙여 준다.
이때 미러링의 재동기화가 시작 된다.
# metattach d0 d20
d0: サブミラー d20 is attached
# metattach d1 d21
d1: サブミラー d21 is attached
# metattach d3 d23
d3: サブミラー d23 is attached
# metattach d4 d24
d4: サブミラー d24 is attached
# metattach d5 d25
d5: サブミラー d25 is attached
# metattach d6 d26
d6: サブミラー d26 is attached
온전히 붙였는지는 다음과 같이 확인할 수 있다.
아직 재 동기화는 진행중이다.
# metastat -p
d6 -m d16 d26 1
d16 1 1 c0t0d0s6
d26 1 1 c0t1d0s6
d5 -m d15 d25 1
d15 1 1 c0t0d0s5
d25 1 1 c0t1d0s5
d4 -m d14 d24 1
d14 1 1 c0t0d0s4
d24 1 1 c0t1d0s4
d3 -m d13 d23 1
d13 1 1 c0t0d0s3
d23 1 1 c0t1d0s3
d0 -m d10 d20 1
d10 1 1 c0t0d0s0
d20 1 1 c0t1d0s0
d1 -m d11 d21 1
d11 1 1 c0t0d0s1
d21 1 1 c0t1d0s1
재 동기화는 다음과 같이 확인한다.
하드디스크의 용량에 따라 시간의 차는 있지만 꽤 오래 걸렸다.
재 동기화가 완료되면 두개의 디스크는 동일해 진다.
(따로 떼어네서 세컨더리 디스크 내용 살펴보면 원래 마스터에 들어있던 내용 그대로 이다.)
# metastat | grep %
再同期実行中: 1 % 完了
再同期実行中: 0 % 完了
再同期実行中: 3 % 完了
再同期実行中: 4 % 完了
再同期実行中: 4 % 完了
再同期実行中: 3 % 完了
#
이후 덤프 재설정.
기본적으로 덤프는 스왑으로 지정 되 있는데
스왑도 현재는 /dev/dsk/c0t0s0d1 이 /dev/md/dsk/d1 로 바뀐 상황이라
이 처리도 해주자.
# rmdir /var/crash/*
# mkdir /var/crash/`hostname`
# chmod 700 /var/crash/`hostname`
# dumpadm -s /var/crash/`hostname` -d /dev/md/dsk/d1
Dump content: kernel pages
Dump device: /dev/md/dsk/d1 (swap)
Savecore directory: /var/crash/bento
Savecore enabled: yes
다음은 부팅을 위한 설정이다.
여기까지만 해도 디스크의 자료 복원 시키는데는 문제가 없지만
마스터 디스크가 완전히 날아가 버렸을때 세컨더리만 가지고는 부팅이 되지 않는다.
# /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t0d0s0
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 260 sectors starting at 50 (abs 16115)
솔라리스 10 에서는 installgrub 명령을 사용해야 하는듯.
에디터에서 다음을 추가 해 준다.
#vi /etc/system
* Begin MDD root info (do not edit)
rootdev:/pseudo/md@0:0,0,blk
set md:mirrored_root_flag=1
* End MDD root info (do not edit)
이후 ls 명령으로 다음을 확인한다.
# ls -l /dev/dsk/c0t0d0s0 /dev/dsk/c0t1d0s0
lrwxrwxrwx 1 root root 73 9月 3日 10:40 /dev/dsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@0,0:a
lrwxrwxrwx 1 root root 73 9月 4日 09:51 /dev/dsk/c0t1d0s0 -> ../../devices/pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/sd@1,0:a
확인한 내용을 바탕으로 다음을 실행한다.
# eeprom "nvramrc=devalias rootdisk /pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/disk@0,0:a devalias pci@0,0/pci8086,3597@4/pci8086,329@0/pci1014,26d@1/disk@1,0:a"
# eeprom "use-nvramrc?=true"
# eeprom boot-device="rootdisk rootmirror net"
위험한 실험? 이긴 하지만
이렇게해서 마스터 하드를 서버로 부터 뽑았다.
결과는..
성공했다.
[출처] solaris 10, software RAID1 구축 #2 - 미러링|작성자 jirumi