사용자의 시스템이 Volume Manager가 제어하는 volume을 사용하고 더구나 root 디스크가 포함되어 있을 경우 O/S를 업그레이드할 때 실패하는 경우가 발생한다.
Volume Manager하의 Solaris 업그레이드시 upgrade-start와 upgrade-finish가 실행하게 된다. 그러나 불행하게도 이 스크립트는 모든 환경에서 성공하는 것은 아니다. 다음의 단계를 실행했을 경우에만 root 디스크를 복구할 수 있다.
1) CD-ROM으로 부팅한다.
# boot cdrom -sw
2) root 파일 시스템을 마운트한다.(root 디스크와는 별개)
# mount /dev/dsk/c0t0d0s0 /a
3) /a/etc/system 파일을 편집한다.
VXVM BEGIN과 VXVM END 사이의 라인을 "*"로 막는다.
NOTE: There might be a file /a/etc/system.prevm
That could be used. The lines look like the following:
*rootdev:/pseudo/vxio@0:0
*set vxio:vol_rootdev_is_volume=1
4) Edit /a/etc/vfstab
Volume Manager에 해당하는 부분을 주석처리한다.
NOTE: There might be a file /a/etc/vfstab.prevm
4a) vfstab의 정보를 이용하여 root 디바이스를 시스템의 root 디스크로 변환한다.
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
vfstab 파일에 "NOTE:"로 시작되는 라인이 있다. 이것이 원래의 부트 디바이스의 정보를 나타낸다. 이 정보를 참조해서 원래의 vftab 파일을 복원한다.
#NOTE: volume rootvol (/) encapsulated partition c0t0d0s0
4b) 같은 과정으로 다른 volume들을 복원한다.(/usr, /opt 등)
5) format c0t0d0 (root 디스크 별개)
원래의 slice들로 복원한다. 귀찮은 작업이 되겠지만 디스크상의 모든 파티션들의 시작과 끝에 해당하는 실린더들을 계산하여 설정해주어야 한다. /etc/vx/reconfig.d/disk.d/cxtydz/vtoc 파일을 보면 Volume Manager가 실행되기 전의 volume 테이블 내용이 들어있다.
6) 모든 slice들을 마운트해서 정상인지 확인한다.
# mount /dev/dsk/c0t0d0s0 /a
# mount /dev/dsk/c0t0d0s6 /a/usr
# mount /dev/dsk/c0t0d0s3 /a/var
# ...
7) 멀티유저모드로 재부팅한다.
# init 6
6) 모든 vm 패치와 패키지를 삭제한다.
# pkgrm SUNWvxva
# pkgrm SUNWvxvm
7) 존재하는 Volume Manager 장치 드라이버들을 삭제한다.
# rm /kernel/drv/*vx*
8) /etc/vx로 가서 /etc/vx/elm 디렉토리를 제외한 모든 파일과 디렉토리들을 삭제한다.
9) Volume Manager 디렉토리들을 옮긴다.
# mv /VX* /old.VX*
10) O/S를 업그레이드한다.
11) vm 패키지를 다시 설치한다.
pkgadd SUNWvxva
pkgadd SUNWvxvm
필요한 패치
12) Volume Manager를 실행하고 root volume을 복원한다.
# rm /etc/vx/reconfig.d/state.d/install-db
# vxiod set 10
# vxconfigd -m disable
# vxdctl init
# vxdctl enable
# vxdiskadm (select option 2)
13) root 디스크를 다시 미러링한다.
Volume Manager하의 Solaris 업그레이드시 upgrade-start와 upgrade-finish가 실행하게 된다. 그러나 불행하게도 이 스크립트는 모든 환경에서 성공하는 것은 아니다. 다음의 단계를 실행했을 경우에만 root 디스크를 복구할 수 있다.
1) CD-ROM으로 부팅한다.
# boot cdrom -sw
2) root 파일 시스템을 마운트한다.(root 디스크와는 별개)
# mount /dev/dsk/c0t0d0s0 /a
3) /a/etc/system 파일을 편집한다.
VXVM BEGIN과 VXVM END 사이의 라인을 "*"로 막는다.
NOTE: There might be a file /a/etc/system.prevm
That could be used. The lines look like the following:
*rootdev:/pseudo/vxio@0:0
*set vxio:vol_rootdev_is_volume=1
4) Edit /a/etc/vfstab
Volume Manager에 해당하는 부분을 주석처리한다.
NOTE: There might be a file /a/etc/vfstab.prevm
4a) vfstab의 정보를 이용하여 root 디바이스를 시스템의 root 디스크로 변환한다.
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
vfstab 파일에 "NOTE:"로 시작되는 라인이 있다. 이것이 원래의 부트 디바이스의 정보를 나타낸다. 이 정보를 참조해서 원래의 vftab 파일을 복원한다.
#NOTE: volume rootvol (/) encapsulated partition c0t0d0s0
4b) 같은 과정으로 다른 volume들을 복원한다.(/usr, /opt 등)
5) format c0t0d0 (root 디스크 별개)
원래의 slice들로 복원한다. 귀찮은 작업이 되겠지만 디스크상의 모든 파티션들의 시작과 끝에 해당하는 실린더들을 계산하여 설정해주어야 한다. /etc/vx/reconfig.d/disk.d/cxtydz/vtoc 파일을 보면 Volume Manager가 실행되기 전의 volume 테이블 내용이 들어있다.
6) 모든 slice들을 마운트해서 정상인지 확인한다.
# mount /dev/dsk/c0t0d0s0 /a
# mount /dev/dsk/c0t0d0s6 /a/usr
# mount /dev/dsk/c0t0d0s3 /a/var
# ...
7) 멀티유저모드로 재부팅한다.
# init 6
6) 모든 vm 패치와 패키지를 삭제한다.
# pkgrm SUNWvxva
# pkgrm SUNWvxvm
7) 존재하는 Volume Manager 장치 드라이버들을 삭제한다.
# rm /kernel/drv/*vx*
8) /etc/vx로 가서 /etc/vx/elm 디렉토리를 제외한 모든 파일과 디렉토리들을 삭제한다.
9) Volume Manager 디렉토리들을 옮긴다.
# mv /VX* /old.VX*
10) O/S를 업그레이드한다.
11) vm 패키지를 다시 설치한다.
pkgadd SUNWvxva
pkgadd SUNWvxvm
필요한 패치
12) Volume Manager를 실행하고 root volume을 복원한다.
# rm /etc/vx/reconfig.d/state.d/install-db
# vxiod set 10
# vxconfigd -m disable
# vxdctl init
# vxdctl enable
# vxdiskadm (select option 2)
13) root 디스크를 다시 미러링한다.