이 장에서는 AFS 클라이언트 시스템을 관리하는 방법에 대해 설명하며, 이 시스템은 사용자가 AFS 파일공간에 액세스할 수 있고 AFS 서버 프로세스와 통신할 수 있는 시스템입니다(클라이언트 시스템은 제대로 구성되었으면 AFS 서버 시스템으로서도 동시에 기능할 수 있습니다). AFS 클라이언트 기계에는 다음과 같은 특징이 있습니다.
시스템에 클라이언트 기능들을 설치하는 방법을 배우려면 AFS 빠른 시작의 내용을 참조하십시오.
이 장에서는 표시된 명령을 사용하여 다음 타스크를 수행하는 방법에 대해
설명합니다.
| 재부트시 설정한 캐쉬 크기 표시 | cat /usr/vice/etc/cacheinfo |
| 현재 캐쉬 크기 및 이용도 표시 | fs getcacheparms |
| 재부트없이 디스크 캐쉬 크기 변경 | fs setcachesize |
| 캐쉬 관리 프로그램 시작 | afsd |
| CellServDB 파일 내용 표시 | cat /usr/vice/etc/CellServDB |
| 커널 메모리에서 데이터베이스 서버 시스템 목록 표시 | fs listcells |
| 커널 메모리에서 데이터베이스 서버 시스템 목록 변경 | fs newcell |
| setuid의 셀 상태 체크 | fs getcellstatus |
| setuid의 셀 상태 설정 | fs setcell |
| 서버 탐침 간격 설정 | fs checkservers -interval |
| 시스템의 셀 멤버쉽 표시 | cat /usr/vice/etc/ThisCell |
| 시스템의 셀 멤버쉽 변경 | Edit /usr/vice/etc/ThisCell |
| 캐쉬 파일/디렉토리 플러쉬 | fs flush |
| 볼륨에서 캐쉬된 모두 플러쉬 | fs flushvolume |
| 볼륨 대 마운트지점 맵핑 갱신 | fs checkvolumes |
| 캐쉬 관리 프로그램의 서버 선호 사항 순위 표시 | fs getserverprefs |
| 캐쉬 관리 프로그램의 서버 선호 사항 순위 설정 | fs setserverprefs |
| 등록할 클라이언트 시스템 주소 표시 | fs getclientaddrs |
| 등록할 클라이언트 시스템 주소 설정 | fs setclientaddrs |
| 경로 및 상태 메시지 표시 제어 | fs messages |
| 시스템의 시스템 유형 표시 및 변경 | fs sysname |
| 비동기 기록 사용 가능 | fs storebehind |
AFS 클라이언트 시스템의 커널에는 보통 캐쉬 관리 프로그램이라고 하는 수정내용 세트가 포함되며, 이를 사용하면 AFS 파일 및 디렉토리에 액세스할 수 있고, AFS 서버 프로세스와 통신할 수도 있습니다. 보통 캐쉬 관리 프로그램을 프로세스나 프로그램으로 애기하기도 하며, 프로세스나 프로그램처럼 동작하기도 합니다. 이 프로그램을 구성할 때, 그 사용법이 완전하게 정확하지는 않음을 기억하는 것이 좋습니다.
캐쉬 관리 프로그램은 주로 시스템에서 실행중인 응용프로그램을 위해 파일들을 패치합니다. 응용프로그램이 AFS 파일에 요청하면, 캐쉬 관리 프로그램은 볼륨 위치(VL) 서버에게 문의하여 파일이 포함된 볼륨이 들어있는 파일 서버 시스템 목록을 확보합니다. 그런 다음 캐쉬 관리 프로그램은 응용프로그램의 시스템 호출 요청을 해당 시스템에서 실행중인 파일 서버에 대한 원격 프로시듀어 호출(RPC)로 변환시킵니다. 파일 서버가 파일을 전달하면, 캐쉬 관리 프로그램은 이를 응용프로그램에 전달하기 전에 로컬 캐쉬에 저장합니다.
파일 서버는 파일과 함께 콜백이라는 데이터 구조를 전달합니다(보다 정확하게 말하면, 읽기/쓰기 볼륨에서 패치한 각 파일의 콜백과 읽기 전용 볼륨에서 패치한 모든 데이터의 단일 콜백을 전달합니다). 유효한 콜백은 캐쉬 관리 프로그램이 캐쉬한 파일 사본이 파일 서버에서 유지하는 중앙 사본과 일치함을 나타냅니다. 다른 AFS 클라이언트 시스템에 있는 응용프로그램이 중앙 사본을 변경하면 파일 서버는 콜백을 중단시키고, 캐쉬 관리 프로그램은 시스템에 있는 응용프로그램이 다음번에 파일에서 데이터를 요청할 때 새로운 버전을 검색해야 합니다. 그러나, 콜백이 중단되어 있는 동안은 캐쉬 관리 프로그램이 계속해서 시스템에 있는 응용 프로그램에게 캐쉬된 버전의 파일을 제공하여 불필요한 네트워크 전송을 줄일 수 있습니다.
이 장의 표시된 절에서는 다음 캐쉬 관리 프로그램 기능을 구성하고 사용자 정의하는 방법에 대해 설명합니다. 첫번째(디스크나 메모리 캐쉬 선택)를 제외한 모든 것은 선택적이며, 이는 AFS가 이에 대해 적합한 기본값을 설정하기 때문입니다.
클라이언트 시스템 자체에서 모든 구성을 변경해야 합니다(콘솔이나 텔넷 연결과 같은 직접 연결을 통해). 캐쉬 관리 프로그램을 원격으로 구성할 수 없습니다. 몇몇 명령을 실행하려면 로컬 수퍼유저 루트로 로그인해야 하지만, 다른 명령에는 특권이 필요하지 않습니다. 이 장에서 설명하는 모든 파일들은 실제로 각 AFS 클라이언트 시스템의 로컬 디스크에 상주해야 합니다(예를 들어 AFS에 있는 파일로 기호 링크될 수 없습니다).
AFS의 패키지 프로그램은 클라이언트 시스템 구성의 다른 측면을 단순화할 수 있으며, 여기에는 시스템의 AFS 초기설정 파일에서의 설정도 포함됩니다. package 프로그램을 사용한 클라이언트 시스템 구성을 참조하십시오.
이 절에서는 모든 클라이언트 시스템의 로컬 /usr/vice/etc 디렉토리에 있어야 하는 클라이언트 구성 파일에 대해 간단히 설명합니다. 시스템에서 디스크 캐쉬를 사용하는 경우, 캐쉬 전용 파티션이 있어야 하며, 보통 /usr/vice/cache 디렉토리에서 마운트됩니다.
Windows 사용자를 위한 주: 이 책에서 설명하는 몇몇 파일들은 Windows 운영 체제를 실행하는 시스템에 없습니다. 또한 Windows는 슬래쉬( / ) 대신 역슬래쉬( \ )를 사용하여 경로 이름에서 각 요소를 구분합니다.
클라이언트 시스템의 로컬 디스크에 있는 /usr/vice/etc 디렉토리에는 캐쉬 관리 프로그램이 제대로 동작하기 위한 구성 파일들이 있어야 합니다. 이 구성 파일들은 캐쉬 관리 프로그램 구성의 가장 기본적인 측면을 제어합니다.
셀에 있는 클라이언트 시스템이 동일하게 수행되는 중요한 경우, 중앙 소스에서 이들 파일들을 갱신하는 것이 가장 효과적입니다. 다음 설명에는 파일을 유지하는 최상의 방법에 대해 설명하는 절의 포인터도 포함됩니다.
AFS 빠른 시작에서는 클라이언트 시스템을 설치할 때 이 파일을 작성하는 방법에 대해 설명합니다. 메모리 캐쉬를 사용하는 시스템에서 캐쉬 크기를 변경하려면, 파일을 편집한 뒤 시스템을 재부트하십시오. 디스크 캐쉬를 사용하는 시스템에서는, fs setcachesize 명령을 실행하여 재부트하지 않고도 캐쉬 크기를 변경할 수 있습니다. 그 명령에 대해서는 캐쉬 유형, 크기 및 위치 결정의 내용을 참조하십시오.
캐쉬 관리 프로그램은 셀의 데이터베이스 서버 시스템에 도달하여 파일공간에서 파일을 패치할 수 있어야 합니다. CellServDB 파일에 있는 정보가 틀리거나 누락되면 액세스 속도가 느려지거나 완전히 봉쇄됩니다. 셀의 데이터베이스 서버 시스템이 변경될 때 마다 파일을 갱신하는 것이 중요합니다.
afsd 프로그램이 캐쉬 관리 프로그램을 시작하면, 커널 메모리로 파일 내용을 로드합니다. 캐쉬 관리 프로그램은 재부트 사이에 파일을 읽지 않으므로, 파일의 변경사항을 커널 메모리에 적용할 수 있도록 하려면 시스템을 재부트해야 합니다. 또는 fs newcell 명령을 실행하여 파일을 변경하지 않고 직접 커널 메모리로 변경사항을 삽입할 수 있습니다. 중앙 소스에서 파일을 업그레이드하는 것도 편리할 수 있습니다. 그 명령에 대해서는 데이터베이스 서버 시스템 정보 유지의 내용을 참조하십시오.
(클라이언트 시스템에 있는 CellServDB 파일은 서버 시스템의 /usr/afs/etc 디렉토리에 있는 것과 같지 않습니다. 이 보존되는 파일은 로컬 셀의 데이터베이스 서버 시스템만을 나열합니다. 서버 CellServDB 파일 유지에 대한 명령은, 서버 CellServDB 파일 유지의 내용을 참조하십시오).
AFS 빠른 시작에서는 AFS 클라이언트 기능을 설치할 때 이 파일을 작성하는 방법에 대해 설명합니다. 클라이언트 시스템의 셀 멤버쉽 변경방법에 대해서는 클라이언트 시스템의 셀 멤버쉽 설정의 내용을 참조하십시오.
이 파일뿐만 아니라, /usr/vice/etc 디렉토리에는 때때로 다음 유형의 파일 및 하위 디렉토리가 포함됩니다.
디스크 캐쉬를 사용하는 클라이언트 시스템에는 캐쉬 전용 로컬 디스크 디렉토리가 있어야 합니다. 일반 마운트 포인트는 /usr/vice/cache이지만, 사용할 공간이 좀 더 있는 다른 파티션을 사용할 수도 있습니다.
캐쉬 디렉토리에 있는 파일을 직접 삭제하거나 수정하지 마십시오. 그렇게 하면 커널이 손상될 수 있으며, 복구하는 유일한 방법은 시스템을 재부트하는 것입니다. 기본적으로 로컬 수퍼유저 루트는 파일을 소유하고 직접 읽을 수 있습니다.
메모리 캐쉬를 사용하는 클라이언트 시스템은 대신 시스템 메모리내의 이 파일들에 저장된 모든 정보들을 보존합니다.
이 절에서는 메모리나 디스크 캐쉬를 구성하는 방법, 캐쉬 유형의 크기를 표시하고 설정하는 방법 그리고, 디스크 캐쉬에 대한 캐쉬 디렉토리 위치를 설정하는 방법에 대해 설명합니다.
캐쉬 관리 프로그램은 기본적으로 디스크 캐쉬를 사용하며, 바람직한 캐쉬 유형입니다. 메모리 캐쉬를 구성하려면, -memcache 플래그를 afsd 명령에 포함시키십시오. 이것은 주로 시스템의 AFS 초기설정 파일에서 호출됩니다. 메모리 캐쉬를 사용하도록 구성되면, 시스템에 디스크가 있는 경우라도 캐쉬 관리 프로그램은 디스크 캐쉬를 수행하지 않습니다.
캐쉬 크기는 다른 캐쉬 매개변수보다 더 직접 클라이언트 시스템의 성능에 영향을 줍니다. 캐쉬를 크게하면, 캐쉬 관리 프로그램이 사용자에게 파일을 전달하는 속도가 빨라집니다. 캐쉬가 작아도 캐쉬 관리 프로그램이 캐쉬된 데이터를 버리고 새로 요청된 데이터를 위해 공간을 작성해야 하는 빈도가 증가하므로 성능에 영향이 있습니다. 응용프로그램이 버려진 데이터를 요청하면, 캐쉬 관리 프로그램은 파일 서버에서 이를 요청해야 하므로, 네트워크에서 데이터를 패치하는 것은 로컬 디스크에서 패치하는 것보다 항상 속도가 느립니다. 캐쉬 관리 프로그램은 국지적으로 수정되었지만 아직 파일 서버에 저장되지 않은 파일 데이터는 버리지 않습니다. 캐쉬가 아주 작은 경우, 캐쉬 관리 프로그램은 버릴 데이터를 찾을 수 없습니다. 캐쉬된 데이터를 버릴 때 사용하는 알고리즘에 대해서는 캐쉬 관리 프로그램이 버릴 데이터를 선택하는 방법의 내용을 참조하십시오).
캐쉬에 할당하는 디스크 또는 메모리 양은 여러 요소에 의해 결정됩니다. 디스크 캐쉬 디렉토리가 들어있는 파티션 또는 메모리내에서 사용할 수 있는 공간의 양은 절대 제한이 있습니다. 뿐만 아니라, 캐쉬 디렉토리 파티션에서 사용할 수 있는 공간의 95% 이상을 디스크 캐쉬에 할당할 수 없습니다. afsd 프로그램은 캐쉬 관리 프로그램을 시작하지 않고 종료하며, 이 제한사항을 위반했으면 해당 메시지를 표준 출력 문자열로 인쇄합니다. 메모리 캐쉬의 경우, 수행할 다른 프로세스와 응용 프로그램을 위해 충분한 메모리를 남겨 두어야 합니다. 실제로 사용할 수 있는 것 이상의 메모리를 할당하려 하는 경우, afsd 프로그램은 캐쉬 관리 프로그램을 시작하지 않고 종료하고 표준 출력 문자열로 다음 메시지를 생성합니다.
afsd: memCache allocation failure at number KB
여기서 number는 실패 바로 이전에 할당된 킬로바이트입니다.
이 제한내에서, 해당 캐쉬 크기를 결정하는 요소에는 시스템에서 작업중인 사용자 수, 주로 작업하는 파일 크기, 그리고 (메모리 캐쉬의 경우) 시스템에서 주로 실행하는 프로세스 수가 포함됩니다. 이들 요소들에 대한 요구가 증가하면 좋은 성능을 유지하는 데 필요한 캐쉬도 커집니다.
10MB 이하의 디스크 캐쉬에서는 성능이 좋지 못합니다. 적어도 60 - 70 MB의 캐쉬를 가지고 여러 사용자들을 서브하는 시스템들은 성능이 좋습니다. 캐쉬를 확대시키는 시점은 이전에 설명했던 요소에 따라 성능을 향상시키지 않으며, 예상하기 어렵습니다.
1MB 이하의 메모리 캐쉬들은 동작할 수 없으며, 5MB 이하의 캐쉬 성능은 만족스럽지 않습니다. 적합한 상한은 디스크 캐쉬와 비슷하지만 시스템에 있는 다른 소스로부터의 메모리에 대한 요구에 의해 결정됩니다(사용자 및 프로세스 수). 몇몇 프로세스만을 실행하는 시스템들은 보다 작은 메모리 캐쉬를 사용할 수 있습니다.
AFS는 몇몇 버전에서 캐쉬 크기에 대해 절대적으로 제한합니다. 사용하는 버전에 대해서는 AFS 릴리스 노트의 내용을 참조하십시오.
캐쉬 관리 프로그램은 시작된 뒤 /usr/vice/etc/cacheinfo 파일을 읽고 캐쉬의 캐쉬를 결정합니다. AFS 빠른 시작에서 설명한 것처럼, afsd 프로그램을 실행하기 전에 파일을 작성해야 합니다. 파일은 AFS를 마운트하는 디렉토리(일반적으로 /afs)와, 캐쉬 디렉토리에 사용할 로컬 디스크 디렉토리도 정의합니다.
파일에 있는 값을 변경하려면, 로컬 수퍼유저 루트로서 로그인하십시오. 새로운 값이 적용되려면 시스템을 재부트해야 합니다. 그 명령에 대해서는 cacheinfo 파일 편집하기의 내용을 참조하십시오.
cacheinfo 파일을 편집하지 않고 재부트시 캐쉬 크기를 변경하려면, -blocks 인수를 afsd 명령에 포함하십시오. AFS Administration Reference에 있는 명령의 참조 페이지를 참조하십시오.
디스크 캐쉬의 경우, fs setcachesize 명령을 사용하여 재부트하지 않고 캐쉬 크기를 재설정할 수도 있습니다. 설정한 값은 다음 재부트시까지 지속되며, 이 때 캐쉬 크기는 cacheinfo 파일에서 지정한 또는 -blocks 인수를 afsd 삽입하여 지정된 값으로 리턴됩니다. 그 명령에 대해서는 재부트없이 디스크 캐쉬 크기 변경하기의 내용을 참조하십시오.
이 때 현재의 캐쉬 크기와 캐쉬 관리 프로그램이 사용하는 공간양을 표시하려면, 현재 캐쉬 크기 표시하시에서 설명한 것처럼 fs getcacheparms 명령을 사용하십시오.
% cat /usr/vice/etc/cacheinfo
% fs getcacheparms
여기서 getca는 getcacheparms의 축약형입니다.
출력에서는 명령이 실행될 때 캐쉬 관리 프로그램이 캐쉬로서 사용하는 킬로바이트 블록 수와 캐쉬의 현재 크기를 보여줍니다. 예를 들면 다음과 같습니다.
AFS using 13709 of the cache's available 15000 1K byte blocks.
% su root Password: root_password
다음 예에서는 AFS 파일공간을 /afs 디렉토리로 마운트하고, /usr/vice/cache를 캐쉬 디렉토리로 지정하며 캐쉬 크기를 50,000 KB로 설정합니다.
/afs:/usr/vice/cache:50000
% su root Password: root_password
| 주: | 이 명령은 메모리 캐쉬에 대해서는 동작하지 않습니다. |
# fs setcachesize <size in 1K byte blocks (0 => reset)>
여기서
% su root Password: root_password
# fs setcachesize 0
# fs setcachesize -reset
여기서
캐쉬가 가득차고 응용프로그램이 AFS로부터 좀 더 많은 데이터를 요청할 경우, 캐쉬 관리 프로그램은 캐쉬 청크를 플러쉬하여 데이터 공간을 확보해야 합니다. 캐쉬 관리 프로그램은 다음 두 가지 사항을 고려합니다.
캐쉬 관리 프로그램은 먼저 가장 오래전에 사용한 청크를 체크합니다. 이것이 더티가 아니면, 캐쉬 관리 프로그램은 그 청크에 있는 데이터를 버립니다. 청크가 더티하면, 캐쉬 관리 프로그램은 그 다음 오래전에 사용했던 청크를 계속해서 체크합니다. 충분히 많은 빈 청크를 작성할 때 까지 이러한 방식으로 계속합니다.
읽기 전용 볼륨에서 패치한 데이터가 들어있는 청크는 더티하지 않은 것으로 정의되어 있으므로, 캐쉬 관리 프로그램은 항상 이 볼륨들을 버릴 수 있습니다. 보통, 캐쉬 관리 프로그램은 더티하지 않은 읽기/쓰기 볼륨에서 패치한 데이터 청크를 찾을 수 있지만, 캐쉬가 작으면 충분한 데이터를 찾기 어렵습니다. 캐쉬 관리 프로그램이 버릴 데이터를 찾지 못하면, AFS 데이터를 요청한 응용프로그램에게 입/출력 오류를 리턴해야 합니다. 응용프로그램에서는 이러한 오류를 사용자에게 통지해야 하지만, 그 원인을 밝히지는 않습니다.
설정해야 하는 캐쉬 구성 매개변수는 3가지 즉, AFS용 마운트 디렉토리, 디스크 캐쉬 디렉토리 위치 및 캐쉬 크기 입니다. 이들은 캐쉬 유형, 크기 및 위치 결정에서 설명한 것처럼 /usr/vice/etc/cacheinfo 파일에 있는 3개의 필드에 해당됩니다. 그러나 잘 조정된 캐쉬 성능을 위해서는, afsd 명령에서 인수들을 사용하여 다른 여러 매개변수들을 제어할 수 있습니다. 이 절에서는 캐쉬 성능에 대해 직접 영향을 주는 이들 매개변수 몇몇에 대해 설명합니다. afsd 명령의 인수에 대해 알려면 AFS Administration Reference에 있는 참조 페이지를 참조하십시오.
뿐만 아니라, 각 시스템 유형에 대한 AFS 분산에 포함된 AFS 초기설정 스크립트에는 크기와 사용 패턴이 다른 클라이언트 시스템에 적합한 여러 afsd 인수들을 같은 방식으로 설정하는 여러 변수가 포함됩니다. 가장 효과적으로 스크립트를 사용하는 명령에 대해서는 AFS 빠른 시작에 있는 캐쉬 관리 프로그램 구성 절을 참조하십시오.
캐쉬 성능에 직접적으로 가장 많은 영향을 미치는 캐쉬 구성 매개변수는 다음과 같습니다.
이 매개변수는 전체 크기만큼 캐쉬 성능에 영향을 주지 않습니다. 그러나 이것을 조정하면 캐쉬 관리 프로그램이 새로운 데이터 공간을 마련하기 위해 캐쉬된 데이터를 버려야 하는 빈도에 영향을 줄 수 있습니다. 예를 들어 디스크 캐쉬 크기를 50MB로, 청크 수(Vn 파일)를 1,000으로 설정했다고 가정합니다. 시스템에 있는 10명의 사용자 각각이 평균 크기가 20KB인 100개의 AFS 파일들을 캐쉬하는 경우, 1,000개 청크 모두가 가득차지만(하나의 청크에는 하나의 AFS 파일 데이터만이 포함될 수 있음) 캐쉬에서는 20MB 데이터만을 보유합니다. 한 사용자가 파일 서버에게 데이터를 좀 더 요청하면, 캐쉬 관리 프로그램은 캐쉬가 용량의 50% 이하로 채워져있는 경우라도 캐쉬된 데이터를 버리고 다른 청크를 요청해야 합니다. 그런 경우, 청크 수를 늘리면 캐쉬 관리 프로그램이 덜 자주 데이터를 버릴 수 있습니다.
청크 크기를 변경하는 가장 큰 이유는 RPC당 패치되는 데이터양 때문입니다. 네트워크 연결이 매우 빠른 경우는 청크 크기를 증가시켜 성능을 향상시킬 수 있으며, 네트워크가 특히 느린 경우는 청크 크기를 줄일 수 있습니다.
디스크 캐쉬의 경우, dcache 항목은 /usr/vice/cache/CacheItems 파일에 있고, 액세스 속도를 늘리기 위해 시스템 메모리에서 작은 숫자가 중복됩니다.
메모리 캐쉬의 경우, dcache 항목 수는 캐쉬 청크 수와 같습니다. 이 각각의 관계에 대한 설명은 메모리 캐쉬 구성 제어의 내용을 참조하십시오.
캐쉬 관리 프로그램이 디스크 캐쉬에 있는 청크 수, 청크 크기 및 dcache 항목 수에 대한 기본값을 결정하는 방법에 대한 설명은 디스크 캐쉬 구성의 내용을 참조하십시오. 메모리 캐쉬의 경우는 메모리 캐쉬 구성 제어의 내용을 참조하십시오. 명령에서는 afsd 명령의 인수를 사용하여 기본값을 덮어쓰기하는 방법에 대해 설명합니다.
디스크 캐쉬에 있는 캐쉬 청크(Vn 파일)의 기본값은 afsd 명령을 사용하여 다음 값 중 가장 큰 값으로 계산됩니다.
-files 인수로 양의 정수값을 지정하여 이 값을 덮어쓰기할 수 있습니다. 캐쉬 관리 프로그램이 초기설정을 완료한 뒤 Vn 파일 중 75% 이상이 이미 사용되었으면 이 값을 증가시키십시오. 이 때 청크 중 일부 퍼센트만이 사용되는 경우는 이를 줄이십시오. 어느 경우이든, 100 이하의 값은 지정하지 마십시오. 값이 100 이하이면 성능에 문제가 발생할 수 있습니다.
다음 예에서는 Vn 파일 수를 2,000으로 설정합니다.
/usr/vice/etc/afsd -files 2000
| 주: | afsd 명령을 명령 쉘에 입력하는 대신 시스템의 AFS 초기설정 파일에 삽입하는 것이 좋습니다. 뿐만 아니라, 이 절에서 지정한 값들은 단순한 예이므로, 특정 시스템에 대해서는 적합하지 않을 수 있습니다. |
디스크 캐쉬의 기본 청크 크기는 64KB입니다. 일반적으로, 그 크기를 변경하는 유일한 이유는 네트워크의 속도를 예외적으로 빠르게 또는 느리게 하기 위한 것입니다. 캐쉬 구성 매개변수 설정의 내용을 참조하십시오. -chunksize 인수를 사용하여 기본값을 덮어쓰기할 수 있습니다. 청크 크기는 2의 제곱이어야 하므로, 2의 지수로 사용할 값을 0과 30 이내의 값으로 제공해야 합니다. 예를 들어 값 10은 청크 크기를 1KB(210 = 1024)로 설정하고, 값 16은 디스크 캐쉬의 기본값(216 = 64 KB)과 같습니다. 0 또는 30 보다 큰 값을 지정하면 청크 크기를 기본값으로 리턴합니다. 10(1KB)보다 작은 값은 좋지 않습니다. 다음 예에서는 청크 크기를 16KB(2 14)로 설정합니다.
/usr/vice/etc/afsd -chunksize 14
디스크 캐쉬의 경우, 메모리에서 복제되는 dcache 항목의 기본 갯수는 -files 인수에서 지정한 청크 수의 1/2이며, 최대 2,000 항목입니다. 2,000을 초과하더라도 -dcache 인수를 사용하여 기본값을 변경할 수 있습니다. 메모리에 있는 dcache 항목 중 1/2 이상을 복제할 필요는 없지만, 메모리에 대한 액세스가 디스크에 대한 액세스 속도보다 빠르므로 약간 성능이 향상될 수 있습니다. 다음 예에서는 숫자를 70으로 설정합니다.
/usr/vice/etc/afsd -dcache 750
디스크 캐쉬를 구성할 때, 어떤 방식으로든 afsd 명령의 인수를 결합할 수 있습니다. 이렇게 유연할 수 있는 가장 큰 이유는(cacheinfo 파일이나 -blocks 인수로) 디스크 캐쉬에 지정한 설정값이 절대적인 최대 한계이기 때문입니다. -files 또는 -chunksize 인수에 대해 단독으로든 또는 결합해서 사용될 경우이든 큰 값을 지정하여 이를 덮어쓰기할 수 없습니다. 관련 이유는 캐쉬 관리 프로그램이 디스크에서 메모리 양을 유지할 필요가 없기 때문입니다. Vn 파일(디스크 캐쉬에 있는 청크)의 초기 길이는 0이지만, 필요한 만큼 지정된 청크 크기로 확장되고 다시 축소될 수 있습니다. 허용가능한 최대 크기로 Vn 파일 모두를 확장하면 전체 캐쉬 크기를 초과할 수 있는 그런 값으로 파일 수를 설정하면, 전체 크기로 간단히 성장시킬 수 없습니다.
afsd 명령의 인수 결합을 허용할 수 없다는 면에서 메모리 캐쉬 구성은 디스크 캐쉬 구성과 다릅니다. 이 제한은 디스크 캐쉬보다는 메모리 캐쉬에 있는 구성 매개변수간의 상호작용으로 인해 발생합니다. 모든 결합이 허용되면, 일관성없는 방식으로 매개변수들을 설정할 수 있습니다. 수용할 수 있는 조합과 수용할 수 없는 조합 목록이 기본값 설명 다음에 옵니다.
메모리 캐쉬의 기본 청크 크기는 8KB입니다. 일반적으로, 그 크기를 변경하는 유일한 이유는 네트워크의 속도를 예외적으로 빠르게 또는 느리게 하기 위한 것입니다. 캐쉬 구성 매개변수 설정의 내용을 참조하십시오.
메모리 캐쉬에서는 많은 청크에 대해 미리 정의된 기본값이 없습니다. 캐쉬 관리 프로그램은 대신 전체 캐쉬 크기를 청크 캐쉬로 나누어 정확한 숫자를 계산합니다. 메모리 캐쉬의 경우, 모든 dcache 항목이 메모리에 있음을 기억하십시오. 이것은 청크 수가 메모리에 있는 dcache 숫자와 같고, dcache 항목 수에 대한 기본값이 없음(다른 청크처럼, 총 크기를 청크 크기로 나누어 계산됨)을 의미합니다.
다음은 메모리 캐쉬를 구성할 때 afsd 명령의 인수 중 수용할 수 있는 결합입니다.
/usr/vice/etc/afsd -memcache -blocks 5120
/usr/vice/etc/afsd -memcache -chunksize 12
/usr/vice/etc/afsd -memcache -blocks 6144 -chunksize 12
다음 인수나 조합들은 명시적으로 청크 수와 dcache 항목 수를 설정합니다. 이들을 사용하지 않는 것이 좋으며, 그 이유는 이들이 간접적으로 캐쉬 크기를 설정하여 사용자가 캐쉬 크기를 결정하려면 직접 계산하도록 하기 때문입니다. 대신 -blocks과 -chunksize 인수를 단독으로 또는 결합하여 사용하십시오. 이 경우 캐쉬 관리 프로그램은 청크 수와 dcache 항목 자체를 결정합니다. 다음 결합은 권장되는 것이 아니므로, 예에는 포함되지 않습니다.
메모리 캐쉬의 경우는 다음 인수를 사용하지 마십시오.
AFS 클라이언트 시스템 사용자가 셀의 AFS 파일공간과 다른 서비스에 액세스하려면, 캐쉬 관리 프로그램과 다른 클라이언트측 에이전트가 셀의 데이터베이스 서버 시스템에 대한 정확한 목록을 가지고 있어야 합니다. 이에 영향을 받는 기능들은 다음과 같습니다.
시스템 사용자가 셀에 액세스할 수 있도록 하려면, 시스템의 로컬 디스크에 있는 /usr/vice/etc/CellServDB 파일에서 데이터베이스 서버 시스템의 이름과 IP 주소들을 나열해야 합니다. 시스템의 홈 셀뿐만 아니라, 사용자가 액세스할 수 있도록 하려는 외부 셀들을 나열할 수 있습니다(셀의 파일공간에 액세스할 수 있도록 하려면, 로컬 AFS 파일공간에서 root.cell 볼륨을 마운트해야 합니다. 보통 그 위치는 AFS 루트 디렉토리 /afs입니다. 명령에 대해서는 AFS 빠른 시작의 내용을 참조하십시오).
afsd 프로그램이 실행되고 캐쉬 관리 프로그램을 시작하면, 커널 메모리로 CellServDB 파일 내용을 읽어 들입니다. 캐쉬 관리 프로그램은 시스템이 다음 번 재부트할 때 까지 파일을 다시 참조하지 않습니다. 반대로, AFS 명령 집합에 대한 명령 해석기(fs 및 pts와 같은)에서는 데이터베이스 서버 프로세스에 접속해야 할 때마다 CellServDB 파일을 읽습니다.
셀에 대한 데이터베이스 서버 시스템 목록이 변경되면, CellServDB 파일과 커널 메모리에 있는 목록 모두를 변경하여 일관성있는 클라이언트 성능을 유지해야 합니다. 시스템의 두 목록이 일치되지 않으면 몇몇 명령들이 실패할 수 있습니다. CellServDB 파일과 커널 메모리 모두를 갱신하는 한 가지 방법은 파일을 편집하고 시스템을 재부트하는 것입니다. 재부트하지 않아도 되도록 하기 위해, 다음 단계 중 하나를 대신 수행할 수 있습니다.
CellServDB 파일이나 커널 메모리에서 정보가 누락되거나 잘못되면 다음과 같은 결과가 발생합니다.
/usr/vice/etc/CellServDB 파일을 편집할 때에는 셀과 시스템 항목에 대해 정확한 포맷을 사용해야 합니다. 각 셀에는 별도의 항목이 있습니다. 첫번째 행의 형식은 다음과 같습니다.
>cell_name #organization
여기서 cell_name은 셀의 완전한 인터넷 도메인 이름(예를 들면 abc.com)이고, organization은 몇개의 공백과 번호 사인(#) 다음에 오는 선택적인 필드이므로, 셀이 해당되는 조직(예: ABC 회사)에 이름을 지정할 수 있습니다. 첫번째 행 다음에는 각 데이터베이스 서버 시스템에 대해 별도의 행이 옵니다. 각 행의 형식은 다음과 같습니다.
IP_address #machine_name
여기서 IP_address는 소숫점 형식으로 된 시스템의 IP 주소(예: 192.12.105.3)입니다. 몇개의 공백과 번호 사인(#) 다음에는 시스템의 완전한 호스트 이름인 machine_name이 옵니다(예: db1.abc.com). 이 경우 번호 사인은 설명을 나타내지 않으며, machine_name은 필수 필드입니다.
셀이 표시되는 순서는 중요하지 않지만, 클라이언트 시스템의 홈 셀에 먼저 넣으면 편리합니다. 마지막 항목 다음이라도 파일에 공백 행을 넣지 마십시오.
다음 예에서는 두 셀에 대한 항목들을 보여주며, 각각에는 3개의 데이터베이스 서버 시스템이 있습니다.
>abc.com #ABC Corporation (home cell) 192.12.105.3 #db1.abc.com 192.12.105.4 #db2.abc.com 192.12.105.55 #db3.abc.com >stateu.edu #State University cell 138.255.68.93 #serverA.stateu.edu 138.255.68.72 #serverB.stateu.edu 138.255.33.154 #serverC.stateu.edu
CellServDB 파일에 있는 정확한 항목이 일관된 클라이언트 성능에 가장 중요하므로, 셀에 대한 데이터베이스 서버 시스템 목록이 변경될 때 마다(예를 들면 AFS 빠른 시작에 있는 명령을 수행하여 데이터베이스 서버 시스템을 추가하거나 제거할 때) 각 클라이언트 시스템에 있는 파일도 갱신해야 합니다. 클라이언트 갱신을 용이하게 하기 위해 package 프로그램을 사용할 수 있으며, 이것은 AFS에 있는 중앙 소스에서 클라이언트 시스템의 로컬 디스크로 파일을 복사합니다. 보통 시스템이 재부트하면 실행될 수 있도록 클라이언트 시스템의 초기설정 파일에서 package 프로그램을 호출하지만, 언제든 package 명령을 실행할 수도 있습니다. 명령에 대해서는 package 프로그램 실행의 내용을 참조하십시오.
package 프로그램을 사용하는 경우, 셀의 중앙 소스 CellServDB 파일의 일반 위치는 /afs/cell_name/common/etc/CellServDB이며, 여기서 cell_name은 사용자의 셀 이름입니다.
/usr/vice/etc/CellServDB에서 AFS에 있는 중앙 소스 파일로 기호 또는 하드 연결을 작성하는 것은 사용할 수 있는 옵션이 아닙니다. afsd 프로그램은 캐쉬 관리 프로그램이 완전히 시작되어 AFS로 액세스할 수 있게 되기 전에 커널 메모리로 파일을 읽어 들입니다.
모든 클라이언트 시스템에는 자신의 CellServDB 파일 사본이 있으므로, 이론적으로는 여러 시스템에서 액세스할 수 있는 셀 세트를 다르게 작성할 수 있습니다. 그러나 대부분의 경우 셀에 있는 모든 클라이언트 시스템의 파일간에 일관성을 유지하는 것이 가장 좋습니다. 시스템들이 다르면 사용자가 하나가 아닌 여러 시스템을 사용할 때 특히 혼란스럽습니다.
AFS 제품 지원 그룹에서는 데이터베이스 서버 시스템이 다른 AFS 셀에 액세스할 수 있도록 하는 데 동의하는 모든 셀이 포함된 중앙 CellServDB 파일을 유지합니다. 갱신된 정보에 대해 주기적으로 이 파일을 체크하는 것이 좋습니다. 사용자의 셀을 다른 셀에서 볼 수 있게 만들기를 참조하십시오.
로컬 CellServDB에 있는 항목은 셀에 액세스하기 위한 두 개의 요구조건 중 하나입니다. 나머지는 셀의 root.cell 볼륨이 보통 /afs 디렉토리의 하위 디렉토리로서 로컬 파일공간에 마운트되는 것입니다. 명령에 대해서는 셀 방식 마운트 포인트를 작성하려면의 내용을 참조하십시오.
| 주: | 클라이언트 시스템에 있는 /usr/vice/etc/CellServDB 파일은 파일 서버 시스템의 로컬 디스크에 있는 /usr/afs/etc/CellServDB 파일과 같지 않습니다. 서버 버전에서는 서버 시스템의 홈 셀에 있는 데이터베이스 서버 시스템만을 나열하며, 이는 서버 프로세스가 외부 셀에 접속하지 않아도 되기 때문입니다. 셀의 데이터베이스 서버 시스템을 변경할 때 마다 셀에 있는 모든 시스템에서 CellServDB 파일의 두 유형을 갱신하는 것은 중요합니다. 서버 버전의 CellServDB 파일 유지에 대해서는 서버 CellServDB 파일 유지 내용을 참조하십시오. |
% cat /usr/vice/etc/CellServDB
% fs listcells [&]
여기서 listc는 listcells의 축약형입니다.
쉘 프롬프트가 즉시 리턴되도록 하려면, 백그라운드에서 명령이 실행되도록 하는 앰퍼센드(&)를 포함하십시오. 커널은 데이터베이스 서버 시스템의 IP 주소만을 저장하고, fs 명령 해석기가 셀의 이름 분석 서비스(도메인 이름 서비스 또는 로컬 호스트 테이블)를 호스트 이름으로 번역하므로, 완전한 출력을 생성하는 데에는 다소 시간이 소요될 수 있습니다. Ctrl-c와 같은 인터럽트 신호를 실행하여 언제든지 명령을 중지할 수 있습니다.
출력에는 각 셀에 대한 행이 포함되며, 그 형식은 다음과 같습니다.
Cell cell_name on hosts list_of_hostnames.
때때로 이름 서비스에서는 호스트 이름을 대문자로 리턴하며, 이름을 전혀 해석할 수 없는 경우는 이름의 IP 주소를 리턴합니다. 다음 예에서는 3가지 가능성에 대해 설명합니다.
%
fs listcells
.
.
Cell abc.com on hosts db1.abc.com db2.abc.com db3.abc.com
Cell stateu.edu on hosts SERVERA.STATEU.EDU SERVERB.STATEU.EDU
SERVERC.STATEU.EDU
Cell ghi.org on hosts 191.255.64.111 191.255.64.112
.
.
% su root Password: root_password
# fs listacl [<dir/file path>]
| 주: | 이 명령을 사용하여 커널 메모리에서 완전히 셀 항목을 제거할 수는 없습니다. 아주 드물게 특정 셀에 대한 액세스를 갑자기 금지해야 하는 경우, CellServDB 파일을 편집하고 시스템을 재부트해야 합니다. |
# fs newcell <cell name> <primary servers>+ \
[-linkedcell <linked cell name>]
여기서
# /etc/package -v -c <name of package file>
setuid 프로그램은 2진 파일에서 UNIX setuid 모드 비트가 온으로 되는 것입니다. setuid 프로그램을 실행하는 동안, 이 프로그램을 시작했던 사용자는 로컬 ID(UNIX UID)를 로컬 소유자로서 가정하므로, 소유자에게 적합한 로컬 파일 시스템에서의 권한을 부여합니다. 대부분 사용자가 생각하는 ID(보통 유효한 UID)는 로컬 수퍼유저 루트입니다.
AFS가 유효 UID를 인식하지 않습니다. setuid 프로그램이 파일과 디렉토리에 액세스하는 경우, 프로그램 소유자가 아닌 프로그램을 시작했던 사용자의 현재 AFS ID를 사용합니다. 그럼에도 하나 이상의 클라이언트 시스템에서 사용할 수 있도록 AFS에 setuid 프로그램을 저장하는 것이 유용할 수 있습니다. AFS를 사용하면 클라이언트 시스템의 관리자가 로컬 캐쉬 관리 프로그램이 setuid 프로그램을 실행하도록 허용하는 지 여부를 결정할 수 있습니다.
기본적으로 캐쉬 관리 프로그램을 사용하면 자신의 홈 셀에서 setuid 권한을 가지고 프로그램을 실행할 수 있지만, 외부 셀에 있는 프로그램에 대해서는 setuid 권한을 거부합니다. 프로그램은 파일 서버 시스템의 /usr/afs/etc/ThisCell 파일에서 지정된 바와 같이, 파일이 있는 볼륨이 상주하는 파일 서버 시스템과 같은 셀에 속합니다. 캐쉬 관리 프로그램은 초기설정시 /usr/vice/etc/ThisCell 파일을 읽고 자신의 홈 셀을 결정합니다.
로컬 시스템 측면에서 셀의 setuid 상태를 변경하려면, 로컬 수퍼유저 루트가 되어 fs setcell 명령을 실행하십시오. 셀의 현재 setuid 상태를 결정하려면 fs getcellstatus 명령을 실행하십시오.
fs setcell 명령을 실행할 때, 커널 메모리에 기록된 것처럼 셀의 setuid 상태를 직접 변경하므로, 시스템을 재부트하지 않아도 됩니다. 그러나 기본값이 아닌 설정값은 적합한 fs setcell 명령을 시스템의 AFS 초기설정 파일에 추가하지 않으면 시스템 재부트시 유지되지 않습니다.
system:administrators 그룹의 유일한 구성원들은 AFS 파일 또는 디렉토리에서 setuid 모드 비트를 온으로 설정할 수 있습니다. setuid 모드 비트가 온이 되면, UNIX ls -l 명령에서는 x 대신 s로 세 번째 사용자 모드 비트를 표시하지만, AFS 파일 또는 디렉토리에서는 파일이 있는 셀에 setuid 권한이 허용되는 경우에만 s가 나타납니다.
% fs getcellstatus <cell name>
여기서
출력에서는 각 셀의 setuid 상태를 알려줍니다.
% su root Password: root_password
# fs setcell <cell name>+ [-suid] [-nosuid]
여기서
캐쉬 관리 프로그램은 서버 시스템을 정기적으로 탐침하여 계속해서 사용할 수 있는 지 확인합니다. 특히 셀과, 캐쉬된 데이터가 있는 파일 서버에서 데이터베이스 서버 시스템을 탐침합니다.
서버 프로세스에 탐침에 반응하지 않으면, 클라이언트 시스템은 이에 액세스할 수 없는 것으로 생각합니다. 기본적으로 탐침 간격은 3분이므로, 클라이언트가 서버 프로세스가 액세스할 수 없게 된 후 다시 액세스할 수 있게 되었음을 인식하기 까지는 최대 3분이 소요될 수 있습니다.
탐침 간격을 조정하려면, 로컬 수퍼유저 루트로서 로그인하는 동안 -interval 인수를 fs checkservers 명령에 포함하십시오. 새로운 간격 설정값은 명령을 실행하거나 시스템을 재부트할 때 까지 유지되며, 설정값 시간은 기본값으로 리턴됩니다. 재부트시 기본값이 아닌 설정값을 유지하려면, 시스템의 AFS 초기설정 파일에 해당 fs checkservers 명령을 포함하십시오.
% su root Password: root_password
# fs checkservers -interval <seconds between probes>
여기서
각각의 클라이언트 시스템들은 특별한 셀에 속하며, 이것은 로컬 디스크의 /usr/vice/etc/ThisCell에서 지정됩니다. 시스템의 셀 멤버쉽은 시스템 사용자에게 중요한 3개의 기본값을 결정합니다.
% cat /usr/vice/etc/ThisCell
% su root Password: root_password
# sync # shutdown
AFS의 콜백 메카니즘에서는 보통 캐쉬 관리 프로그램이 시스템에서 실행중인 응용프로그램에게 가장 최근 버전의 파일 또는 디렉토리를 제공하도록 합니다. 그러나 응용프로그램이 캐쉬된 데이터를 다음번에 요청할 때 캐쉬 관리 프로그램가 파일 서버에서 사용할 수 있는 최근 버전을 패치할 수 있도록 캐쉬 관리 프로그램에게 캐쉬된 데이터를 버리도록 (플러쉬)할 수 있습니다.
한번에 플러쉬할 파일 시스템 구성요소 갯수를 제어할 수 있습니다.
콜백뿐만 아니라, 캐쉬 관리 프로그램에는 볼륨 위치 변경과 같은 다른 종류의 변경사항을 추적하는 메카니즘도 있습니다. 볼륨이 이동하고 캐쉬 관리 프로그램이 오랜 시간동안 여기에 그 볼륨에 있는 데이터에 액세스하지 않으면, 캐쉬 관리 프로그램의 볼륨 위치 레코드는 틀려질 수 있습니다. 이를 다시 동기화하려면 fs checkvolumes 명령을 사용하십시오. 명령을 실행할 때, 캐쉬 관리 프로그램은 볼륨 이름, ID 번호 및 위치간의 새로운 맵핑 테이블을 작성합니다. 그렇게 하면 캐쉬 관리 프로그램이 이들에 대한 데이터를 제공하기 전에 새롭게 위치지정되고 이름이 지정된 볼륨을 참조할 수 있습니다.
캐쉬에서 마운트 포인트에 대한 정보가 훼손될 수도 있습니다. 마운트 포인트가 훼손되었다는 징후는 fs lsmount 명령의 출력이 잘못되었거나, 디렉토리를 변경하거나 마운트 포인트 내용을 표시하려는 시도가 실패하는 것입니다. fs flushmount 명령을 사용하여 잘못된 마운트 포인트를 버리십시오. 캐쉬 관리 프로그램은 다음번에 경로 이름에서 이를 참조할 때 마운트 포인트를 다시 패치해야 합니다(캐쉬 관리 프로그램은 주기적으로 캐쉬된 마운트 포인트를 새로 고치지만, 이것을 즉시 버리는 또 다른 방법은 시스템을 재부트하여 캐쉬 관리 프로그램을 다시 초기설정하는 것입니다).
% fs flush [<dir/file path>+]
여기서
% fs flushvolume [<dir/file path>+]
여기서
% fs checkvolumes
여기서 checkv는 checkvolumes의 축약형입니다.
다음 명령으로 명령이 완전히 성공했음을 확인할 수 있습니다.
All volumeID/name mappings checked.
% fs flush [<dir/file path>+]
여기서
이 장의 소개에서 설명한 바와 같이, AFS는 클라이언트측 데이터 캐쉬와 콜백을 사용하여 셀에서의 네트워크 통신량을 줄입니다. 캐쉬 관리 프로그램은 로컬 시스템에 대한 네트워크 근접도를 근거로 서버 시스템에 선호 사항 순위를 지정하여 가능한 효과적으로 네트워크를 사용하려고 시도합니다. 순위는 캐쉬 관리 프로그램이 다른 네트워크가 아닌 자신의 서브네트워크나 네트워크에 있는 서버 시스템 정보에서 정보를 패치하도록 합니다. 클라이언트와 서버 사이에서 데이터가 이동되는 네트워크 거리를 줄이면 네트워크 통신량이 줄어들고, 캐쉬 관리 프로그램이 응용 프로그램에 데이터를 전달하는 속도가 늘어납니다.
캐쉬 관리 프로그램은 커널 메모리에 별도의 두 가지 선호 사항 순위를 저장합니다. 첫번째 순위 세트는 볼륨 위치(VL) 서버 프로세스를 실행하는 시스템에 적용되며, 이후부터는 VL 서버 시스템이라고 합니다. 두 번째 순위 세트는 파일 서버 프로세스를 실행하는 시스템에 적용되며, 이후 부터는 파일 서버 시스템이라고 합니다. 이 절에서는 캐쉬 관리 프로그램이 기본 순위를 설정하는 방법, fs setserverprefs 명령을 사용하여 기본 순위를 변경하거나 새로운 순위를 설정하는 방법, 그리고 fs getserverprefs 명령을 사용하여 현재 순위 세트를 표시하는 방법에 대해 설명합니다.
afsd 프로그램이 캐쉬 관리 프로그램을 시작한 뒤에는, 로컬 /usr/vice/etc/CellServDB 파일에 나열된 VL 서버 시스템 각각에 선호 사항 순위 10,000을 지정합니다. 그런 다음 0 - 126 범위내에서 임의로 선택한 정수를 추가하여 순위를 무작위로 작성합니다. 이렇게 하면 같은 순위를 한 셀에 있는 여러 시스템에 지정하지 않게 되지만, 다른 셀에 있는 시스템들이 같은 순위를 갖게 될 수는 있습니다. 그렇다고 사용상 문제점이 예방되는 것은 아닙니다. 캐쉬 관리 프로그램이 한번에 한 셀의 데이터베이스 서버 기계 순위들을 비교하기 때문입니다. AFS가 멀티홈 데이터베이스 서버 시스템의 사용을 지원하더라도, 캐쉬 관리 프로그램은 로컬 /usr/vice/etc/CellServDB 파일에 있는 각 데이터베이스 서버 시스템용으로 나열된 하나의 주소만을 사용합니다. Ubik만이 멀티홈 데이터베이스 서버 시스템의 다중 인터페이스의 장점을 이용할 수 있습니다.
캐쉬 관리 프로그램은 VL 서버로부터 서버의 VLDB 레코드를 확보할 때 파일 서버 시스템으로 선호 사항 순위를 지정하며, 처음에는 시스템에 있는 볼륨에 액세스합니다. 시스템이 멀티홈인 경우, 캐쉬 관리 프로그램은 인터페이스 각각에 고유한 순위를 지정합니다(각 시스템에 대해 VLDB가 저장할 수 있는 최대 인터페이스까지. 이것은 AFS 릴리스 노트에서 지정됩니다). 캐쉬 관리 프로그램은 인터페이스의 IP 주소를 로컬 시스템의 주소와 비교하며, 다음 알고리즘을 적용합니다.
클라이언트 시스템에 하나의 인터페이스만 있는 경우, 캐쉬 관리 프로그램은 이를 서버 인터페이스의 IP 주소와 비교한 다음, 알고리즘에 따라 순위를 설정합니다. 클라이언트 시스템이 멀티홈인 경우, 캐쉬 관리 프로그램은 로컬 인터페이스 주소 각각을 서버 인터페이스와 비교한 다음, 클라이언트 인터페이스 모두와 비교하여 얻은 최하위 순위를 서버 인터페이스에 지정합니다.
기본 순위를 파일 서버 시스템 인터페이스에 지정한 뒤, 캐쉬 관리 프로그램은 0 - 15 이내에서 임의로 선택한 번호를 이에 추가합니다. 예에서 처럼, 로컬 시스템과 같은 서브네트워크에 있는 파일 서버 시스템 인터페이스에는 기본 순위 20,000이 지정되지만, 캐쉬 관리 프로그램은 20,000 - 20,015 이내의 정수로 실제 순위를 기록합니다. 이 프로세스로 실제로 같은 순위에 있는 인터페이스 수가 줄어듭니다. VL 서버 시스템 순위와 같이, 외부 셀에 있는 파일 서버 시스템 인터페이스가 로컬 셀에 있는 인터페이스와 같은 순위를 갖을 수 있지만, 문제를 예방할 수는 없습니다. 특정 볼륨이 들어있는 인터페이스의 상대 순위만이 관계되며, AFS는 한번에 한 셀에 있는 볼륨 기억영역만을 지원합니다.
각각의 선호 사항 순위는 인터페이스의 IP 주소와 1 - 65,534 이내의 정수로 한 쌍이 됩니다. 낮은 순위(하위 번호)는 강력한 선호 사항을 나타냅니다. 일단 순위가 설정되면, 시스템이 재부트할 때 까지, 또는 fs setserverprefs 명령을 사용하여 변경할 때 까지 지속됩니다.
캐쉬 관리 프로그램은 셀에서 볼륨 위치 정보를 패치해야 할 때 VL 서버 시스템 순위를 사용합니다. 셀의 CL 기계 시스템 순위와 비교하여 최상의(최하 번호) 순위를 가진 시스템의 VL 서버 프로세스와 접속하려 합니다. 그 VL 서버에 접속할 수 없으면, 그 다음 순위의 VL 서버에 접속하려 합니다. 셀의 VL 서버 시스템 모두에 액세스할 수 없는 경우, 캐쉬 관리 프로그램은 셀에서 데이터를 패치할 수 없습니다.
이와 유사하게 캐쉬 관리 프로그램이 볼륨에서 데이터를 패치해야 하는 경우, 볼륨이 있는 시스템의 인터페이스 순위와 비교하고 최상위 순위를 갖는 인터페이스에 접속하려 합니다. 그 인터페이스를 통해 fileserver 프로세스와 접속할 수 없으면, 그 다음 순위의 인터페이스에 접속을 시도합니다. 볼륨이 들어있는 시스템의 인터페이스에 접속할 수 없으면, 볼륨에서 데이터를 패치할 수 없습니다.
캐쉬 관리 프로그램이 사용하는 파일 서버 시스템 순위를 표시하려면 fs getserverprefs 명령을 사용하십시오. -vlservers 플래그를 삽입하여 대신 VL 서버 시스템 순위를 표시하십시오. 기본적으로 출력은 표준 출력 문자열(STDOUT)에 표시되지만, -file 인수를 포함시켜 대신 파일에 기록할 수 있습니다.
캐쉬 관리 프로그램은 커널 목록에 호스트 이름이 아닌 IP 주소를 저장하지만, 기본적으로 출력에서는 셀의 이름 서비스(도메인 이름 서버) 또는 로컬 호스트 테이블을 참조하는 변환 루틴을 호출한 뒤 호스트 이름으로 인터페이스를 식별합니다. 이 경우 IP 주소가 표시되면, 이것은 변환이 실패하기 때문입니다. 변환 단계를 통과하고 호스트 이름 대신 IP 주소를 표시하려면, -numeric 플래그를 포함하십시오. 이것으로 출력 속도가 현저히 증가할 수 있습니다.
fs setserverprefs 명령을 사용하여 기존 선호 사항 순위를 재설정하거나, 캐쉬 관리 프로그램에 순위가 없는 파일 서버 시스템 인터페이스 또는 VL 서버 시스템의 초기 순위를 설정할 수 있습니다. 설정한 순위는 시스템이 재부트할 때 까지 또는 fs setserverprefs 명령을 다시 실행할 때 까지 유지됩니다. 재부트하면서도 순위를 유지하려면, 해당 fs setserverprefs 명령을 시스템의 AFS 초기설정 파일에 넣으십시오.
기본 순위에서 처럼, 캐쉬 관리 프로그램은 사용자가 지정한 각 순위 범위에 임의로 선택한 정수를 추가합니다. 파일 서버 시스템 인터페이스의 경우 임의 번호는 0 - 15 이내이며, VL 서버 시스템의 경우 0 - 126 범위 이내입니다. 예를 들어 15,000 순위를 파일 서버 시스템 인터페이스에 지정하면, 캐쉬 관리 프로그램은 15,000 - 15,015 이내의 정수를 저장합니다.
VL 서버 시스템 순위를 지정하려면, fs setserverprefs 명령에 있는 -vlserver 인수 다음에 이 순위를 나열하십시오.
파일 서버 시스템 순위를 지정하려면, 다음 3가지 방법을 사용하십시오.
원하면 같은 명령행에서 -servers, -file 및 -stdin 옵션들을 결합할 수 있습니다. 이들 중 하나 이상이 같은 인터페이스에 대해 순위를 지정하면, -servers 인수로 지정된 순위의 우선순위가 높습니다. 또한 같은 명령행에서 -vlservers 인수를 제공하여 VL 서버 시스템 순위를 동시에 파일 서버 시스템 순위로 설정할 수 있습니다.
fs 명령 해석기는 호스트 이름이나 IP 주소를 확인하지 않으므로, 실제로 존재하지 않는 호스트 이름과 주소의 순위도 저장합니다. 캐쉬 관리 프로그램은 서버 시스템에 대한 동일한 VLDB 레코드에서 동일한 틀린 정보를 기록하지 않는다면 그러한 순위는 사용하지 않습니다.
% fs getserverprefs [-file <output to named file>] [-numeric] [-vlservers]
여기서
다음 예에서는 파일 서버 시스템의 순위를 표시합니다. -numeric 플래그가 사용되지 않았으므로, IP 주소가 표시되면 이것을 호스트 이름으로 변환할 수 없음을 의미합니다.
% fs gp
fs5.abc.com 20000
fs1.abc.com 30014
server1.stateu.edu 40011
fs3.abc.com 20001
fs4.abc.com 30001
192.12.106.120 40002
192.12.106.119 40001
. . . . . . .
% su root Password: root_password
# fs setserverprefs [-servers <fileserver names and ranks>+] \
[-vlservers <VL server names and ranks>+] \
[-file <input from named file>] [-stdin]
여기서
파일 서버는 멀티홈 클라이언트 시스템(하나 이상의 네트워크 인터페이스와 IP 주소를 가진 시스템)에서 캐쉬 관리 프로그램과의 통신을 시작할 때 메시지를 전송할 인터페이스를 선택할 수 있습니다. 그 인터페이스에 액세스할 수 없으면, 자동으로 대체 인터페이스로 전환합니다. 이렇게 하면 AFS 성능이 향상되며, 이는 인터페이스가 부족해도 파일 서버와 캐쉬 관리 프로그램간의 통신을 방해하지 못함을 의미합니다.
파일 서버는 두 가지 유형의 메시지를 전송할 때 클라이언트 인터페이스를 선택할 수 있습니다.
(파일 서버는 AFS 데이터에 대한 캐쉬 관리 프로그램의 요청을 채울 때 응답할 클라이언트 인터페이스를 선택하지 않습니다. 그런 경우, 캐쉬 관리 프로그램이 요청을 전송했던 클라이언트 인터페이스를 통해 항상 응답합니다).
캐쉬 관리 프로그램은 시작된 후 클라이언트 시스템에 있는 사용하기 쉬운 인터페이스 목록을 자동으로 컴파일한 다음, 이를 커널 메모리에 기록합니다. 캐쉬 관리 프로그램이 제일 처음 파일 서버와의 연결을 구축할 때, 인터페이스 주소 목록만을 전송합니다. 파일 서버는 주소를 기록하고, 콜백을 중단하거나 캐쉬 관리 프로그램에게 ping 명령을 전송해야 할 때 목록 맨 위에 있는 하나를 사용합니다. 그 인터페이스에 액세스할 수 없으면, 파일 서버는 목록에 있는 다른 여러 인터페이스에게 동시에 메시지를 전송합니다. 어떤 인터페이스가 포함되는 지 관계없이 파일 서버는 메시지를 첫번째에게 전송합니다.
클라이언트에 있는 로컬 디스크의 /usr/vice/etc 디렉토리에 있는 두 개의 파일(NetInfo 및 NetRestrict)에서 주소들을 나열하여 캐쉬 관리 프로그램이 파일 서버로 등록하는 주소를 제어할 수 있습니다. 캐쉬 관리 프로그램이 시작될 때 NetInfo 파일이 있으면, 캐쉬 관리 프로그램은 인터페이스 목록에 대한 기본으로서 그 내용을 사용합니다. 그렇지 않으면 운영 체제에서 구성한 인터페이스 목록을 사용합니다. 그런 다음 /usr/vice/etc/NetRestrict 파일에 표시되는 주소들을 목록에서 제거합니다. 캐쉬 관리 프로그램은 커널 메모리에 결과 목록을 기록합니다.
또한 fs setclientaddrs 명령을 사용하여 클라이언트 시스템을 재부트하지 않고도 캐쉬 관리 프로그램의 커널 메모리에 저장된 주소 목록을 변경할 수 있습니다. 명령행에서 제공한 주소 목록은 커널 메모리에 있는 현재 목록을 완전히 바꿉니다. 그러나 변경사항은 클라이언트 시스템이 재부트할 때 까지만 유지됩니다. 재부트하면서도 개정된 목록을 유지하려면, 로컬 /usr/vice/etc 디렉토리에 있는 NetInfo 파일(적합하면 NetRestrict 파일)의 인터페이스를 나열하십시오(시스템의 AFS 초기설정 스크립트에 해당되는 fs setclientaddrs 명령을 삽입할 수도 있습니다. 그러나 효과는 적습니다. 이런 경우 대개 캐쉬 관리 프로그램이 스크립트에서 명령을 읽고, 인터페이스 목록을 이미 컴파일했습니다).
캐쉬 관리 프로그램이 현재 파일 서버로 등록하는 주소 목록을 표시하려면, fs getclientaddrs 명령을 사용하십시오.
NetInfo 또는 NetRestrict 파일을 변경할 때, 또는 fs getclientaddrs 또는 fs setclientaddrs 명령을 실행할 때 다음을 기억하십시오.
% su root Password: root_password
% su root Password: root_password
% fs getclientaddrs
여기서 gc는 getclientaddrs의 변경입니다(getcl은 축약형입니다).
출력에서는 각 행에 소숫점 십진 형식으로 IP 주소를 나열합니다.
% su root Password: root_password
# fs setclientaddrs [-address <client network interfaces>+]
여기서
기본적으로 캐쉬 관리 프로그램은 경고와 정보 메시지, 이 두 가지 유형을 생성합니다.
fs messages 명령을 사용하여 캐쉬 관리 프로그램이 메시지 유형 중 하나, 모두 또는 어느 것도 표시하지 않는 지 여부를 제어할 수 있습니다. 메시지는 유용한 정보를 제공하므로, 완전히 사용 불가능하게 하지 않는 것이 좋습니다.
캐쉬 관리 프로그램 상태 및 성능을 보다 왕성하게 모니터하려면, afsmonitor 프로그램을 사용하여 확장된 통계 세트를 수집할 수 있습니다(파일 서버 통계를 수집하기도 합니다). 성능상의 문제점을 발견하면, fstrace 명령 집합을 사용하여 캐쉬 관리 프로그램 동작의 하위 레벨 추적을 수집할 수 있으며, 여기에서 AFS 지원 및 개발 그룹은 문제점을 해결하는 데 도움이 되도록 분석할 수 있습니다. 유틸리티 모두에 대해 알려면 AFS 성능 모니터 및 감사의 내용을 참조하십시오.
% su root Password: root_password
# fs messages -show <user|console|all|none>
여기서
캐쉬 관리 프로그램은 커널 메모리에 로컬 클라이언트 시스템의 시스템 유형 이름을 저장합니다. AFS 클라이언트 소프트웨어에서 하드코드된 정의에서 기본값을 읽어 들입니다.
캐쉬 관리 프로그램은 AFS 경로이름에서 @sys 변수에 대한 대체로서 시스템 이름을 사용합니다. 변수는 클라이언트 시스템의 시스템 유형에 대한 2진 파일이 들어있는 로컬 디스크에서 AFS 디렉토리로의 기호 연결을 작성할 때 유용합니다. @sys 변수는 자동으로 캐쉬 관리 프로그램을 해당 디렉토리로 진행시키므로, 다른 시스템 유형의 클라이언트 기계에서 동일한 기호 연결을 작성할 수 있습니다(package 프로그램을 사용한 클라이언트 시스템 구성에서 설명했던 패키지 유틸리티를 사용하여 작성 동작을 자동화할 수도 있습니다). 연결은 시스템을 새로운 시스템 유형으로 업그레이드할 때까지 유효한 채로 남습니다.
사용자가 AFS가 지정한 시스템 유형 이름을 사용할 때 구성이 가장 간단합니다. 목록에 대해서는 AFS 릴리스 노트의 내용을 참조하십시오.
커널 메모리에 저장된 시스템 이름을 표시하려면, sys 또는 fs sysname 명령을 사용하십시오. 이름을 변경하려면, 나중에 명령의 -newsys 인수를 추가하십시오.
% fs sysname % sys
fs sysname 명령의 출력 형식은 다음과 같습니다.
Current sysname is 'system_name'
sys 명령에서는 다른 텍스트없이 system_name 문자열을 표시합니다.
% su root Password: root_password
# fs sysname <new sysname>
여기서
기본적으로, 캐쉬 관리 프로그램은 응용프로그램이 파일을 닫을 때 모든 데이터를 파일 서버로 즉시 동기식으로 기록합니다. 즉 close 시스템 호출은 캐쉬 관리 프로그램이 파일에서 캐쉬한 모든 데이터를 파일 서버로 기록할 때 까지는 리턴하지 않습니다. 캐쉬 관리 프로그램이 응용프로그램으로 제어를 리턴할 때 파일 서버로 기록되기 위해 남을 수 있는 파일의 킬로바이트 수를 지정하여 파일을 동기적으로 기록할 수 있도록 합니다.
비동기 기록을 가능하게 설정하는 것은 보통 대형 파일에 대해 작업하는 사용자에게 유용할 수 있습니다. 이는 주로 응용프로그램이 좀 더 빠르게 수행되는 것으로 나타남을 의미합니다. 그러나 몇가지 복잡한 사항에 대해 설명합니다. 시스템 사용자가 잠재적인 문제점을 이해하거나 이에 대한 예방법을 이해하기에 충분히 순진하지 않은 경우를 제외하면 비동기 기록을 사용 가능하게 설정하지 않는 것이 좋습니다. 남은 문제점은 다음과 같습니다.
No space left on device
할당량 부족으로 인해 데이터가 유실되지 않게 하려면, 파일을 닫기 전에 사용자가 파일이 있는 볼륨에 이를 수용할 충분한 공간이 있는 지 확인해야 합니다.
fs storebehind 명령을 실행하여 비동기 기록을 사용 가능하게 하면, 캐쉬 관리 프로그램이 응용프로그램으로 제어를 리턴할 때 파일 서버로 기록하기 위해 계속해서 남아 있을 수 있는 파일의 킬로바이트 수를 설정합니다. 시스템에서 실행중인 응용 프로그램이 조작하는 모든 파일에, 또는 일정한 파일에만 설정값을 적용할 수 있습니다.
% su root Password: root_password
# fs storebehind -allfiles <new default (KB)> [-verbose]
여기서
% fs listacl dir/file path
또는 아직 수퍼유저가 아니라면 su 명령을 실행하여 클라이언트 시스템에서 로컬 일반 사용자인 루트가 되십시오.
% su root Password: root_password
# fs storebehind -kbytes <asynchrony for specified names> \
-files <specific pathnames>+ \
[-verbose]
여기서
% fs storebehind [-verbose]
여기서
% fs storebehind -files <specific pathnames>+
여기서
출력에서는 각 파일을 개별적으로 나열합니다. 지정된 파일에 대한 값이 이전에 설정되었으면, 출력에서는 다음을 알려줍니다.
Will store up to y kbytes of file asynchronously. Default store asynchrony is x kbytes.
기본 비동기 저장값이 파일에 적용되는 경우(이에 대한 -kbytes 값을 설정하지 않았으므로), 출력은 다음과 같습니다.
Will store file according to default. Default store asynchrony is x kbytes.