BigAdmin System Administration Portal
특집 기사
Print-friendly VersionPrint-friendly Version

Solaris 10 OS에서 영역의 「Update on Attach」기능과 패치 적용

Enda O'Connor, 2009년 6월

소개

Solaris 10 5/08 운영 체제 이후, 시스템 관리자는 영역을 분리 및 연결할 수 있게 되었습니다. 즉 1개의 시스템에서 영역을 분리하여 다른 시스템에 연결하는 것입니다. 초기 기능에는 비전역 영역이 연결되어 있는 원본과 대상의 두 시스템이 같은 소프트웨어 레벨의 패키지 버전, 패치 레벨 및 아키텍처를 가질 필요가 있었기 때문에 몇 가지 제한이 있었습니다. 즉, sun4v 시스템에서 sun4u 시스템으로, 혹은 이전의 Solaris 릴리스에서 최신의 Solaris 업데이트 릴리스로 영역을 이동할 수는 없었습니다.

Solaris 10 10/08 릴리스에서는 zoneadm attach-u 인수를 지정하는 「Update on Attach」명령에 따라 새로운 기능이 제공되었습니다.

이 기사에서는 「Update on Attach」에 대해 기술하며 다음의 항목을 다룹니다.

어느 패키지가 업데이트될지 결정하는 기준

「Update on Attach」를 사용하면, 연결된 영역은 다음 규칙에 따라 전역 영역과 같은 소프트웨어 레벨로 업데이트됩니다. 어느 패키지가 업데이트되는지는 이러한 규칙에 의해 결정됩니다.

  1. 비전역 영역 패키지에 SUNW_PKG_ALLZONES=true 설정이 있는 경우, 패키지는 업데이트되도록 선택됩니다.
  2. 패키지가 계승된 패키지 디렉토리에 비트를 전달하는 경우, 패키지는 업데이트되도록 선택됩니다. (「계승된 패키지 디렉토리」란, 전역 영역에서 비전역 영역으로 계승된 디렉토리를 가리킵니다. 스파스 영역은 기본값으로 /usr, /lib, /platform/sbin을 계승합니다. zonecfg 명령의 add inherit-pkg-dir 하위 명령으로 추가된 디렉토리는 모두 계승된 패키지 디렉토리가 됩니다.)
  3. 위의 1 또는 2에 의존하는 패키지는 SUNW_PKG_ALLZONES 설정이나 계승된 패키지 디렉토리에 비트를 전달하는지에 상관없이 모두 업데이트됩니다.

한 번 패키지를 업데이트하도록 선택하면, 영역을 최초로 설치했을 때 패키지를 설치한 것과 같은 처리가 다음 처리를 실행하기 위해서 행해집니다.

  • 업데이트되는 비전역 영역에서 패키지 삭제
  • 연결을 실행하고 있는 전역 영역에서 연결되어 있는 비전역 영역으로 스풀된 패키지 설치

예를 들어 SUNWcsr을 업데이트하는 경우, 전역 영역의 /var/sadm/pkg/SUNWcsr/save/pspool/SUNWcsr/ 디렉토리가, 연결된 비전역 영역의 업데이트된 SUNWcsr 패키지를 프로비저닝하기 위해 사용됩니다. 이 디렉토리는 zoneadm install 처음에 새로운 비전역 영역의 SUNWcsr 패키지를 프로비저닝하기 위해 사용되는 것입니다.

때문에 상기 3번 항목의 예로 패키지 A에 SUNW_PKG_ALLZONES=true가 있을 때, 패키지는 업데이트하도록 선택됩니다. 패키지 A는 패키지 B에 의존합니다. 패키지 B에는 SUNW_PKG_ALLZONES=true가 없으며 /etc 디렉토리에 전달되기 위해 상기 1, 2의 어느 조건도 충족시키지 않습니다. 그러나 패키지 A는 패키지 B에 의존하므로 패키지 B도 업데이트하도록 선택됩니다.

비전역 영역이 사용하는 계승된 패키지 디렉토리를 고려하는 경우, 선택 기준은 중요합니다. 전체 루트 비전역 영역의 경우에는 계승된 패키지 디렉토리는 없습니다. 따라서 같은 소프트웨어 레벨에서 실행되는 스파스 영역에 비해 업데이트하도록 선택되는 패키지는 적어집니다.

또한 SUNW_PKG_THISZONE=true가 설정된 전역 영역 패키지는 모두 자동적으로 제외되는 것도 고려할 필요가 있습니다. 즉 패키지가 비전역 영역에 있는 경우 업데이트되지 않습니다.

「Update on Attach」와 통상 업그레이드

앞으로 진행하기 전에 지원받고 있는 업그레이드 기구 중 하나에 의한 표준 업그레이드와 「Update on Attach」를 사용하는 방법의 차이를 이해하면 좋을 것입니다. 표준 업그레이드를 실시하면 Solaris에 속한 비전역 영역은 모두 업그레이드됩니다. 즉 업그레이드 과정에서 전달되는 모든 새로운 패키지와 기능이 수신되고 구 패키지는 삭제됩니다. 또한 비전역 영역과 전역 영역은 업데이트 릴리스로 전달되는 패치와 패키지 버전이 같은 소프트웨어 레벨이 됩니다.

바꾸어 말하자면 업데이트 이미지는 전역 영역 및 비전역 영역에 적용됩니다. 업그레이드를 하는 동안 전역 영역과 비전역 영역에 관한 의존 관계 검사는 행해지지 않습니다. 또한 이미지의 일부인 패키지는 모두 전역 영역을 포함한 모든 영역에 걸쳐 배치됩니다.

이에 비해 「Update on Attach」를 사용하는 경우, 전역 영역 및 업데이트되는 비전역 영역 모두의 소프트웨어 목록이 취득됩니다. 그 다음, 앞서 말한 3가지 기준에 따라 zoneadm에 의해 비전역 영역의 업데이트 패키지가 결정됩니다.

따라서 시스템에서 비전역 영역을 모두 분리하여 전역 영역에서 후속 업데이트 릴리스로 표준 업그레이드한 다음, 비전역 영역에 대해 「Update on Attach」를 사용할 경우, 업그레이드 시에 연결된 영역에 대하여 시스템 전체의 표준 업그레이드를 행한 경우와는 다른 결과가 됩니다. 다음의 항목이 1개라도 해당되지 않는 경우, 업데이트로 전달된 새로운 패키지는 모두 연결된 비전역 영역에 전파되지 않습니다.

  • 패키지가 SUNW_PKG_ALLZONES=true의 조건 충족
  • 패키지가 계승된 패키지 디렉토리에 비트를 전달
  • ALLZONES=true가 설정된 패키지, 계승된 패키지 디렉토리에 전달된 패키지, 또는 양쪽 모두의 조건을 채우는 패키지가 새로운 패키지에 의존

ALLZONES=true가 설정되어 있거나 계승된 패키지 디렉토리에 전달된 패키지가 아닌 한, 구 패키지는 어느 것도 삭제되지 않습니다.

「Update on Attach」의 주요 사용 목적은 사용자에 의한 대화적 처리를 최소한으로 억제하면서 어떤 시스템에서 다른 시스템으로 비전역 영역을 이행할 수 있도록 하는 것입니다. Solaris 10 10/08 릴리스 이전에는 연결된 비전역 영역의 시스템 소프트웨어가, 연결된 비전역 영역이 존재하는 시스템과 정확하게 같은 소프트웨어 레벨에 있도록 해야 했습니다. 영역의 「Update on Attach」를 사용하면 시스템 관리자는 낮은 패치 레벨 영역에 연결할 수 있게 되고, 영역은 자동적으로 연결 위치의 전역 영역과 같은 패치 레벨로 업데이트됩니다. 또한 sun4v 시스템에서 sun4u 시스템으로, 혹은 sun4u 시스템에서 sun4v 시스템으로 비전역 영역을 이행할 수도 있게 되었습니다.

「Update on Attach」의 주요 사용 목적 한 가지는, 다른 시스템 간에 Solaris Containers를 신속하고 용이하게 이행할 수 있게끔 하는 것입니다. 컨테이너란 비전역 영역과 리소스 제어를 조합한 것을 말합니다. 사용 예를 들겠습니다. Sun Fire T2000 서버에서 각각 특정 데이터베이스를 가지는 5개의 컨테이너가 실행되고 있으며, 시간의 흐름에 따라 그 중 1개의 데이터베이스가 특별히 증대한 경우, 시스템 리소스가 고갈되어 성능 문제가 발생하는 일이 있습니다. 영향을 받은 컨테이너를 더욱 고성능 시스템으로 이행하지 못하면 최종 사용자는 컨테이너, 컨테이너 내의 소프트웨어 및 소프트웨어 구성을 다른 시스템에 복제하여 최종적으로는 구 컨테이너에서 새로운 컨테이너로 스위치를 만들어야 하는 경우가 있습니다. 그러나 영역 이행으로 이 작업이 훨씬 용이해집니다. 영향을 받은 컨테이너를 데이터베이스, 구성 및 관련된 작업 부하별로 새로운 시스템으로 이동할 수 있게 되어, 이에 따라 이 컨테이너와 구 시스템상의 나머지 4대의 컨테이너를 사용할 수 있는 리소스가 증가하기 때문입니다.

패치 적용과 영역의 「Update on Attach」

비전역 영역을 전역 영역과 같은 패치 레벨로 만들 수 있는 「Update on Attach」는 많은 관심을 모았습니다. 일례를 들겠습니다. 시스템 관리자는 패치 번들을 적용하기 전에 모든 비전역 영역을 분리하고, 그 후에 전역 영역에 패치 번들을 적용할 수 있습니다. 그리고 번들을 적용해 시스템을 재부트한 뒤, 영역의 zoneadm -z <zonename> attach -u 명령으로 비전역 영역을 전역 영역과 같은 패치 레벨로 되돌릴 수 있습니다.

이것을 실행하는 주된 이유는 「Update on Attach」를 사용하는 것이 연속해서 영역에 패치를 적용하는 것보다 훨씬 속도가 빠르기 때문입니다. 복수의 zoneadm attach 명령을 실행할 수도 있습니다. 주된 문제점은 전역 영역에서 적용된 패치나 비전역 영역의 계승된 패키지 디렉토리 구성에 따라서는, 「Update on Attach」를 사용한 경우 연결되어 있는 모든 비전역 영역에 patchadd를 사용해 전역 영역과 비전역 영역에 패치를 적용한 경우와는 다른 결과가 될 가능성이 있다는 것입니다.

이러한 일이 일어나는 이유를 설명하기 위해 조금 부자연스럽지만, 한 가지 예를 들겠습니다. 비전역 영역 중 1개가 전체 루트 영역이고, 적용된 패치 중 1개가 Mozilla Firefox에 패치를 적용하는 패치 125539-05인 경우, 전역 영역에는 125539-05가 적용되지만 영역의 「Update on Attach」에서는 비전역 영역의 SUNWfirefox는 업데이트되지 않습니다. 따라서 패치 125539-05는 비전역 영역에 적용되지 않습니다.

대신, 연결된 영역에 patchadd를 사용하면 125539-05는 patchadd에 의해 비전역 영역에 적용됩니다. 이것은 영역 이행이 영역의 업그레이드와는 다른 계획을 포함하고 있기 때문입니다. 응용 프로그램 레벨의 소프트웨어(SUNWfirefox 등)를 업그레이드할지 어떨지는 시스템 관리자만이 결정할 수 있는 것입니다. 따라서 영역의 「Update on Attach」는 그러한 결정을 시스템 관리자에게 맡기고, 응용 프로그램 레벨의 소프트웨어 업데이트는 행하지 않습니다. 이와 달리 종래의 업그레이드는 매체상의 소프트웨어를 모두 업그레이드합니다.

또한 전체 루트 비전역 영역에서는 SUNWupdatemgru가 설치되어 있지 않으면 패치 유틸리티 패치가 전달하는 패키지가 업데이트되지 않습니다. 이것은 사실상 전체 루트 비전역 영역에 SUNWupdatemgru가 설치되어 있지 않으면 전역 영역에 후속 버전이 설치되어 있는 경우, 영역의 패치 유틸리티 패치 110254/119255가 전역 영역과 동기화되지 않을 가능성을 시사하고 있습니다.

이것은 119254/119255가 패치를 적용하는 SUNWswmt, SUNWinstall-patch-utils-rootSUNWpkgcmdsu의 각 패키지가 모두 SUNW_PKG_ALLZONES=false 조건을 채우고 있기 때문입니다. 또한 전체 루트 영역에는 계승된 패키지 디렉토리가 없기 때문에 이러한 패키지는 업데이트 패키지로 선택되지 않습니다. 다만 SUNWupdatemgru가 설치되어 있는 경우는 제외합니다. 이것은 SUNWupdatemgruSUNW_PKG_ALLZONES=true의 조건을 채우고 또한 SUNWswmt에 의존하는 패키지이며, 나아가 그 SUNWswmtSUNWinstall-patch-utils-rootSUNWpkgcmds에 의존하는 패키지이기 때문입니다.

따라서 SUNWswmt, SUNWinstall-patch-utils-rootSUNWpkgcmds는 모두 선택됩니다. SUNWupdatemgruSUNWswmt에 의존하고, 그 SUNWswmtSUNWinstall-patch-utils-rootSUNWpkgcmds에 의존하기 때문입니다.

통상 SUNWupdatemgruSUNWzonerSUNWzoneu와 같은 설치 소프트웨어 그룹에 있기 위해 어느 비전역 영역에나 설치됩니다. 그러나 시스템이 최소한의 소프트웨어 그룹 설치에 의해 프로비저닝된 후에 영역 패키지가 추가된 경우 SUNWupdatemgru가 설치되어 있지 않기 때문에 전체 루트 비전역 영역에 있는 패치 유틸리티 패키지는 모두 「Update on Attach」에서는 업데이트되지 않습니다.

업데이트되는 패키지는 모두 처음에 비전역 영역에서 삭제됩니다. 다음으로, 영역을 처음 설치하기 위해 사용된 것과 같은 기능을 사용하여 그 패키지는 전역 영역에서 재설치됩니다. (이 기능은 CR 6818813으로 인해 후속 업데이트 릴리스로 변경될 예정입니다. CR 6818813이 수정된 뒤에는 업데이트 패키지로 선택된 패키지 중 전역 영역에 설치된 패키지와 버전이 일치하는 것은 모두 삭제되지 않고 비전역 영역의 패키지가 단순히 대체됩니다. 이로 인해 「Update on Attach」 성능의 고속화도 전망됩니다.)

따라서 영역을 최초로 설치하기 위해 사용된 것과 같은 기능이 「Update on Attach」에서도 사용됩니다. 업데이트되는 패키지의 경우에는 패키지의 모든 패치 패키지 undo.Z 패키지가, 전역 영역에서 연결되는 비전역 영역으로 계승됩니다. 전역 영역에 대규모 패치 적용이 행해지는 경우, 연결된 전역 영역이 거의 또는 전혀 패치 적용이 되지 않은 시스템에서 분리되어 있으면 이에 따라 비전역 영역의 점유 용량이 현저하게 증가하는 일이 있습니다.

최종 사용자가 단순히 patchadd를 사용해 전역 영역과 비전역 영역에 패치를 적용하면, 연결되어 있는 각각의 비전역 영역 내에 undo.Z가 생성됩니다. 이것에는 그 비전역 영역 내에서 실제로 대체된 파일만이 포함되어 있습니다. 스파스 영역의 경우 patchadd로 작성된 undo.Z에는 /lib, /platform, /bin 또는 /sbin에 존재하는 어떤 파일도 포함되지 않게 됩니다. 따라서 영역의 「Update on Attach」기능에 의해 전역 영역에서 계승된 undo.Z보다 크기는 작아집니다.

전체 루트 영역과 스파스 루트 영역

전체 루트 영역이 아닌 스파스 루트 영역(양 영역은 같은 시스템으로 동시에 프로비저닝되고 있기 때문에 같은 패키지 및 패치 레벨에 있습니다)에 「Update on Attach」를 사용하면 업데이트되는 양 영역에서 다른 수의 패키지가 업데이트됩니다. 따라서 Solaris 10 5/08 OS 상에서 작성되어 Solaris 10 10/08 레벨로 업데이트된 스파스 루트 영역에서는 505개의 패키지가 업데이트 패키지로 선택됩니다. 한편, 전체 루트 영역에서는 311개의 패키지가 업데이트 패키지로 선택됩니다.

때문에 패치 적용의 속도 향상을 위해 영역의 「Update on Attach」 사용을 검토하기 전에, 「Update on Attach」를 사용해 비전역 영역을 전역 영역과 같은 패치 레벨로 하는 방법과, 연결되어 있으면서 패치를 적용할 수 있는 모든 비전역 영역에 단순히 patchadd를 사용하는 방법의 차이를 인식할 필요가 있습니다.

IDR(Interim Diagnostic Relief) 패치와 특별 패치의 존재

Sun에서 제공되는 IDR 패치가 연결된 영역에 설치되어 있는 경우, 비전역 영역을 분리하기 전에 완전히 똑같은 IDR이 대상의 전역 영역에 적용되고 있거나, IDR이 원본의 비전역 영역에서 삭제되어 있어야 합니다. Solaris 10 5/09 OS에서는 zoneadm attach 명령으로 제공되고 있는 -b 인수로 영역 연결 중에 IDR을 삭제함으로써 이 문제에 대응하고 있습니다.

또한 Solaris 10 업데이트 이미지 구축에만 사용되고 지금까지 릴리스되지 않은 「특별 패치」라고 불리는 패치의 존재도 해결해야 합니다. 특별 패치에 대해서는, 현재 릴리스되고 있는 패치 140197의 CR 6743776으로 대응하고 있습니다. 이러한 특별 패치 처리에 관한 영구적인 해결책은 Solaris 10 5/09 OS의 패치 139555-08에서 전달되는 CR 6791625로 대응하고 있습니다.

「Update on Attach」를 실행하기 위한 순서

1. 원본 시스템에서 zoneadm -z <zonename> detach를 실행합니다. (주: 분리 기능은 Solaris 10 5/08 OS에서 도입되었습니다.)

2. 대상 시스템으로 영역 경로를 이동합니다.

3. 대상 전역 영역의 커널 패치 레벨이 139555(Solaris 5/09 이후의 업데이트 레벨)가 아닌 경우, 다음 명령을 실행하고, 원본 비전역 영역 패키지를 강제로 재생성합니다. 관련된 CR은 6685069입니다.

#rm <zonepath>/SUNWdetached.xml

4. 대상 시스템에서 zonecfg를 사용하여 영역을 재구성합니다.

5. 마지막으로 다음의 명령을 실행합니다.

#zoneadm -z <zonename> attach -u

영역 이행에 필요한 순서의 상세 설명에 대해서는 비전역 영역을 이행하는 방법을 참조하십시오.

Solaris 10 5/09에서는 에러 보고 기능도 개선되었습니다. 다운그레이드로 간주되는 패키지(즉, 연결되어 있는 비전역 영역의 패키지 버전이 연결되어 있던 원본 전역 영역의 패키지 버전보다 높은 경우)에 대해, 이전 릴리스에서는 모든 사례가 하나씩 보고되었습니다. 다시 말해서, zoneadm attach -u를 실행하면 한 번에 1개의 에러밖에 보고되지 않았습니다. Solaris 10 5/09 OS에서는 처음에 zoneadm attach -u를 실행하면 한 번에 모든 에러가 보고됩니다.

상세 정보

다음으로 추가 리소스를 몇 가지 소개합니다.


Comments (latest comments first)

Discuss and comment on this resource in the BigAdmin Wiki

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub