요약

  • RFC 1514는hrStorageTable을 고정된 한도를 가진 논리 저장 공간, 즉 물리 장치의 원용량이 아니라 요청 주체가 실제로 사용할 수 있는 양으로 측정되는 것으로 기술했습니다.
  • 크기와 사용량 값은hrStorageAllocationUnits의 개수였습니다. 동반 단위 없이는 단순 정수를 바이트로 해석할 수 없습니다.
  • 별도의 장치, 디스크, 파티션, 파일 시스템 테이블이 다른 계층을 보존했으며, 0으로 설정된 링크는 저장 공간이 존재하지 않음이 아니라 연관 정보를 사용할 수 없음을 의미할 수 있었습니다.

모두 옳은 두 개의 용량

관리 스테이션이 같은 호스트에 대해 두 개의 창을 여는 상상을 해 보십시오. 한 창은 디스크 컨트롤러를 따라가며 장기 저장 장치의 용량을 보고합니다. 다른 창은 애플리케이션이 실제로 데이터를 할당할 수 있는 풀을 따라갑니다. 이 풀은 포맷과 파일 시스템 참조 정보에 소모되는 공간을 제외하며, 고정된 할당량에서 멈출 수도 있습니다. 파티션, 마운트된 파일 시스템, 메모리나 스왑의 한 구간을 나타낼 수도 있습니다. 두 번째 수치가 더 작다고 해서 첫 번째 수치와 모순되는 것은 아닙니다.

운영상의 실수는 그 다음에 옵니다. 어떤 익스포터가 두 필드를 모두 "디스크 크기"라 부르고 행 유형과 단위를 버린 채 두 개의 정수만 대시보드로 보내는 것입니다. 대시보드는 이 불일치를 용량 누락으로 취급합니다. 원래 관찰 어디에도 그 결론을 정당화하는 내용은 없었습니다. 비교하기 전에 근거가 먼저 평탄화된 것입니다.

RFC 1514는 SNMP의 어휘 안에서 이 범주 오류를 막았습니다. Host Resources MIB는 어느 한 운영체제의 인벤토리 모델을 보편화하지 않으면서 개인용 컴퓨터와 유닉스 계열 시스템을 위한 공통 객체를 추구했습니다. 그 해법은 모든 플랫폼이 동일한 물리 계층 구조를 노출한다고 가장하는 것이 아니라, 개념적 테이블을 정의하고 각 테이블이 누구의 관점을 나타내는지 명시하는 것이었습니다.

요청 측에서 바라본 풀

결정적인 문단은hrStorageTable의 설명에 있습니다. 고정된 자원 한도를 가진, 할당된 논리 저장 영역마다 하나의 항목이 이 테이블에 속했습니다. 그 수치가 나타내는 것은 포맷이나 파일 시스템 참조 정보가 소모하는 공간을 제외하고 요청 주체가 실제로 사용할 수 있는 양이었습니다. 이는 운영체제가 평상시 보는 물리 저장 실체가 아니라, 애플리케이션이 볼 수 있는 영역이었습니다.

이 표현은 "용량"을 관계적 개념으로 만듭니다. 이 값은 추상적인 물질을 설명하지 않습니다. 특정 할당 표면이 자신만의 규칙 아래 제공할 수 있는 것이 무엇인지를 설명합니다. 포맷된 매체는 여전히 물리적으로 메타데이터에 쓰인 섹터를 담고 있지만, 그 섹터는 애플리케이션에 페이로드 저장 공간으로는 제공되지 않습니다. 할당량은 기반 장치가 다른 곳에 여유를 두고 있더라도 하나의 논리 영역만 제한할 수 있습니다. 스왑, 버퍼 풀, RAM 구간은 디스크가 아니면서도 저장 공간으로 동작할 수 있습니다.

이 테이블에는 등재 규칙도 있었습니다. 파일 시스템이 없는 테이프나 플로피는 매체로 존재한다는 이유만으로는 보통 등재되지 않았습니다. 운영체제가 이를 요청 애플리케이션에 일반적으로 단위별로 할당하지 않았기 때문입니다. 따라서 물리적 존재만으로는 불충분했습니다. 이 테이블은 자신이 진단하려는 논리 할당 계약에 참여하는 자원만을 골랐습니다.

단위는 숫자와 함께 다녔다

각 저장 행은hrStorageAllocationUnits를 제공했는데, 이는 그 풀에서 할당되는 객체의 바이트 크기였습니다. 섹터, 블록, 버퍼, 패킷 단위로 측정되는 풀은 흔히 1보다 큰 단위를 사용했습니다.hrStorageSize와hrStorageUsed는 그런 단위의 개수를 보고했습니다.

산수는 의미 체계가 온전히 유지된 후에야 단순해집니다. 표현되는 바이트 수는 개수 곱하기 할당 단위입니다.hrStorageSize는 저장하면서hrStorageAllocationUnits는 버리는 수집기는 용량을 저장한 것이 아니라, 크기 조정되지 않은 좌표 하나를 저장한 것입니다. 행의 단위가 바뀌었는데도 그 식별이 안정적이라고 가정하면, 깨끗한 시계열조차 인위적인 급변을 만들어 낼 수 있습니다.

이는 곤란한 인코딩 세부사항이 아니었습니다. 덕분에 이기종 호스트가 모든 풀을 바이트 단위 할당으로 강요당하지 않고 저장 공간을 노출할 수 있었습니다. 공통 계층은 그 쌍을 어떻게 해석할지 정의했고, 기반 시스템은 자신만의 지역 할당 선택을 유지했습니다.

디스크에는 자기 테이블이 있었다

RFC 1514는 물리 인벤토리를 지우지 않았습니다. 장치 그룹은 호스트에 담긴 장치를 기술했으며, 프로세서, 네트워크 인터페이스, 프린터, 디스크를 위한 개별 테이블을 두었습니다. 디스크 저장 테이블은 장기 저장 장치를 기술하고 킬로바이트 단위로 용량을 제공했습니다. 파티션 테이블과 파일 시스템 테이블은 각자의 식별과 관계를 더했습니다.

이 테이블들을 조인할 수 있었지만, 조인은 자연법칙이 아니라 하나의 주장이었습니다.hrPartitionFSIndex는 파티션에 파일 시스템이 없거나 파일 시스템 정보를 사용할 수 없을 때 0이 될 수 있었습니다.hrFSStorageIndex는 로컬 파일 시스템에서 사용량과 공간 부족 진단에 유용한 논리 저장 행을 가리켰으며, 이 역시 그런 정보를 사용할 수 없으면 0이 될 수 있었습니다.

0은 기반 매체의 부재를 증명하지 않았습니다. 이 관리 관점에서 사용 가능한 관계의 부재를 표시했을 뿐입니다. 없는 링크를 만들어 내면 더 완전한 도식이 되지만 덜 진실한 기록이 됩니다.

실패 카운터는 손실 대장이 아니었다

hrStorageAllocationFailures는 대표된 풀이 저장 공간이 부족하여 수용할 수 없었던 요청을 셉니다. 이 필드는 낮은 사용률 표본만을 보이는 조용한 고사용 풀과 이미 할당을 거부하기 시작한 풀을 구분하는 데 도움이 될 수 있습니다. 그래도 요청 프로세스, 거부된 바이트, 사용자 영향, 지속 시간, 복구, 데이터 손실은 가리키지 않았습니다.

원래 객체는 정의된 초기값이 없는 SNMP Counter 유형을 사용했지만, RFC 1514는 0으로 초기화할 것을 권고했습니다. RFC 2790은 이 경고를 유지하면서 소비자의 책임을 더 분명히 했습니다: 관리 스테이션은 그 초기화에 의존해서는 안 됩니다. 따라서 단일 판독값만으로는 부팅, 설치 또는 기타 가정된 기점 이후 몇 번의 실패가 있었는지 증명할 수 없습니다. 유의미한 주장에는 연속적인 에포크와 관찰 간 델타가 필요했습니다.

이는 용량 모델에 인접하지만 서로 다른 문제입니다. 크기 필드는 풀의 표현된 한도를 정의했고, 카운터는 거부된 요청을 관찰했습니다. 어느 필드도 다른 필드를 대신할 수 없으며, 어느 쪽도 비즈니스나 사용자 결과를 확립하지 못했습니다.

쓰기 가능하다고 승인된 것은 아니었다

RFC 1514는 자신의 MIB를 소개하면서 프로토콜 접근을 행정적 승인과 구분했습니다. 객체의 읽기-쓰기 접근은 쓰기가 프로토콜상 의미를 가진다는 뜻이었지, 누가 쓰는 것이 허용되는지를 결정하지 않았습니다.hrStorageSize는 읽기-쓰기였지만, 그 문법은 모든 디스크를 크기 조정하는 보편적 원격 명령이 아니었습니다.

RFC 2790은 의도된 통제 표면을 명확히 했습니다. 크기 조정은 그 조작이 의미를 가지고 기반 시스템이 수행할 수 있는 경우에만 적용됩니다. 예컨대 버퍼 풀에 배정된 메모리나 가상 메모리에 배정된 디스크 공간을 변경하는 경우입니다. 능력은 여전히 지역적이었고, 승인은 여전히 행정적 결정이었습니다. 공통 스키마는 가능한 조작을 기술했을 뿐, 호스트 위에 주권적 관리자를 발명하지 않았습니다.

후속 RFC는 또한 읽기 가능한 Host Resources 객체가 민감한 구성과 성능 데이터를 노출할 수 있고, 쓰기 가능한 객체는 호스트 동작을 바꿀 수 있다고 경고했습니다. 이는 보안 문제가 논의되지 않았다는 RFC 1514의 진술에 비해 상당한 진전이었습니다. 그러나 기반이 되는 구분, 즉 문법·구현·권한은 서로 다른 사실이라는 점은 이미 1993년에도 보였습니다.

모델은 자신의 대체를 살아남았다

RFC 2790은 2000년에 RFC 1514를 폐기(obsolete)하고 모듈을 SMIv2 형식으로 옮겼습니다. 그러나 저장 테이블을 디스크 인벤토리로 접지 않았습니다. 논리 영역, 고정 한도, 요청 주체 가용성, 포맷 오버헤드 제외라는 언어를 보존했습니다. 할당 단위, 선택적 파일 시스템 연관, 별도의 장치 계층 구조도 유지했습니다.

이 연속성이 역사적 결과입니다. 인터넷 관리 프레임워크는 모든 호스트가 하나의 내부 온톨로지를 공유할 필요가 없었습니다. 각 호스트가 원격 관리자가 수치의 의미를 알 수 있을 만큼의 구조를 공개하기만 하면 되었습니다. 상호운용성은 유형·단위·관계를 둘러싼 좁은 계약에서 왔지, "용량" 같은 레이블이 지역적 현실을 지운다고 가장하는 데서 오지 않았습니다.

오늘날의 독자에게 이 교훈은 SNMP를 넘어섭니다. 지표의 조건이 함께 다닐 때에만 지표는 이식 가능해집니다. 표현된 계층, 행 식별, 단위, 연관, 에포크를 보존하십시오. 그래야 대시보드가 물리적 공급, 논리적 한도, 가용 공간, 거부 이벤트를 서로 바꾸어 놓지 않고 비교할 수 있습니다. 그 필드들이 버려지면, 이후의 정교함으로도 사라진 의미를 재구성할 수 없습니다.

출처