MOUNT_NULLFS(8)

명칭
mount_nullfs - 루프백 파일 시스템 서브 트리를 mount 하는; 아무것도 하지 않는(null) 파일 시스템층의 이용의 데모

서식
mount_nullfs [-o options] target mount_point

해설
mount_nullfs 유틸리티는, null 층을 만듭니다. 이것은, 파일 시스템의 이름 공간의 부분목을, 글로벌인 파일 시스템의 이름 공간 의 다른 장소에 앨리어스(alias) 합니다. 이것에 의해, 기존의 파일과 디렉토리가 다른 패스명에서 액세스 가능 됩니다.

파일 시스템의 가상적 카피와 기호 연결과의 제 1 의 차이는, getcwd(3) 함수가 가상 카피에서는 올바르게 동작하는 점과 다른 파일 시스템을 가상 카피상에 mount 해도 오리지날에는 영향이 없는 점 입니다. stat(2) (은)는, 가상 카피에 대해서 다른 디바이스 번호가 돌려줍니다만, 다른 측면에 있어 오리지날과의 구별은 다하지 않습니다.

역사적인 루프백 파일 시스템과 다른 것은, 다음의 2 개의 점입니다: 1 개는, 파일 시스템의 스택화 가능층 (stackable layers)이라고 하는 기술을 사용해 실장되고 있는 점, 이제(벌써) 1개는 디렉토리의 vnode 뿐만이 아니라, 모든 하위층의 vnode 위에 “null-node” 하지만 겹겹이 쌓이고 있다고 하는 점입니다.

옵션은 이하의 것이 있습니다:

-o  -o 의 후에, 옵션 캐릭터 라인을 콤마로 단락지어 지정하는 것 하지만 할 수 있습니다. 지정 가능한 옵션과 그 의미는 mount(8) (을)를 참조해 주세요.

이 null 층은 2 개의 목적을 가지고 있습니다. 1 개(살)은, 아무것도 하지 않는 층 (을)를 제공하는 것으로 파일 시스템의 층의 구축의 데모를 나타내는 것입니다 (실제로는 아무것도 실시하지 않는다고 하는 것은 아니고, 루프백 파일 시스템이 제공하는 것은 모두 실시합니다). 이제(벌써) 1 개(살)은 prototype층을 제공하는 것으로 여기로부터 새로운 파일 시스템층을 간단하게 만들어 낼 수가 있습니다.

이 메뉴얼의 이하의 부분에서는, 새로운 파일 시스템층을 구축하기 위한 기초로서 null 층을 조사합니다.

새로운 null 층의 예시
새로운 null 층은 mount_nullfs 그리고 만들어집니다. mount_nullfs 유틸리티는 2개의 인수를 취합니다. 1개는 하위층의 vfs 의 패스명 (target-pn)으로, 이제(벌써) 1개는 null 층이 나타나는 이름 공간내의 패스명 (mount-point-pn)입니다. null 층이 적절한 장소에 놓여진 후, 목적의 디렉토리 계층 (target-pn)의 내용이 mount처 (mount-point-pn)에 앨리어스(alias) 됩니다.

null 층의 조작
null 층은 최소의 파일 시스템층이며, 모든 조작을 하위층에 처리시키기 위해서(때문에) 우회도로 할 뿐입니다. 거의 모든 vnode 에 대한 조작은 패스하는 것입니다만, 그 동작의 대부분은 우회도로 routine에 집중합니다.

우회도로 routine는 하위층에 있어서의 임의의 vnode 에 대한 조작을 받아들입니다. 우선, vnode 에 대한 조작의 인수를 검사해, null-node 를 하위층에 있어 등가가 되는 것에 옮겨놓는 것으로부터 시작합니다. 다음에, 하위층의 조작을 기동합니다. 마지막으로, 인수중의 null-node 를 옮겨놓습니다. 만약 그 조작에 의해 vnode 가 되돌아 오면(자), 그 되돌아 온 vnode 위에 null-node 를 쌓습니다.

대부분의 조작을 우회도로 합니다만, vop_getattr, vop_inactive, vop_reclaim, vop_print (은)는 우회도로 하지 않습니다. vop_getattr (은)는 반환값의 fsid 를 바꾸지 않으면 안됩니다. vop_inactive (와)과 vop_reclaim (은)는, null 층 특유의 데이터를 해방하기 위해서 우회도로 하지 않습니다. vop_print (은)는 과도의 디버그 정보를 피하기 위해서(때문에) 우회도로 하지 않습니다.

vnode 스택의 개요
mount는 null 층을 하위층에 관련 짓습니다. 그 결과 2 개의 VFS 가 겹겹이 쌓입니다. vnode 스택은 파일이 액세스 될 때마다 필요에 따라서 작성됩니다.

최초의 mount에서는 새로운 null 층의 뿌리로서 단일의 vnode 스택을 만듭니다. 다른 모든 vnode 스택은 뿌리의 vnode 스택이나 다른 null vnode 스택의 조작의 결과로서 만들어집니다.

vnode 를 돌려주는 조작의 결과로서 새로운 vnode 스택이 태어납니다. 우회도로 routine는, 소환 측에 vnode 를 돌려주기 전에 새로운 vnode 위에 null-node (을)를 쌓습니다.

예를 들면, null 층을 이하와 같이 mount 하는 예를 상상합니다.

    mount_nullfs /usr/include /dev/layer/null

/dev/layer/null 에 체인지 디렉토리 하면(자), 뿌리의 null-node (null 층을 mount 했을 때 에 만들어진 것)가 할당할 수 있습니다. 여기서 sys (을)를 오픈하는 것을 생각해 보겠습니다. vop_lookup 는 뿌리의 null-node 로 행해집니다. 이 조작은 하위층에 우회도로 되어 하위층이 UFS 의 sys (을)를 나타내는 vnode 를 돌려줍니다. 그리고 null_bypass 는 UFS sys 에 앨리어스(alias) 하는 null-node 를 구축해, 호출 바탕으로 이것을 돌려줍니다. null-node sys 에 대한 이후의 조작으로 다른 vnode 스택을 구축할 때에는 이 처리가 반복해집니다.

다른 파일 시스템층의 작성
새로운 파일 시스템층을 구축하는 제일 간단한 방법은, null 층의 카피를 만들어, 모든 파일, 변수의 이름을 다시 붙여, 그리고 그 카피를 변경하는 것입니다. 모든 변수의 이름을 바꾸는데는 sed(1) 하지만 잘 사용됩니다.

umap 층은 null 층의 자손의 1 예입니다.

하위층의 조작의 기동
조작이 완전하게는 우회도로 할 수 없을 때에 하위층에 있는 조작을 기동하기 위한 방법이 2 개 있습니다. 각각의 방법은 다른 상황에 대해서 적절히 사용됩니다. 양쪽 모두의 경우와도, 그 조작의 인수를 하위층을 위해서(때문에) 올바르게 만드는 것은 앨리어스(alias) 하는 층의 책임이며, vnode 인수를 하위층에 매핑 합니다.

최초의 방법은 앨리어스(alias) 하는 층의 우회도로 routine를 부르는 것입니다. 이 방법은, 하위층에서 현재 다루어지고 있는 조작을 기동하고 싶을 때에 가장 적합합니다. 이것은 우회도로 routine가 벌써 매핑 되고 있다고 하는 이점이 있습니다. 이 예로서 null_getattrs 하지만 null 층에 있습니다.

2 번째의 방법은, VOP_OPERATIONNAME 인터페이스를 이용해 하위층의 vnode 의 조작을 직접 기동하는 것입니다. 이 방법의 이점은, 하위층의 임의의 조작을 기동하는 것이 간단이라고 하는 것에 있습니다. 결점은, vnode 인수는 수동으로 매핑 되지 않으면 안 되는 것입니다.

관련 항목
mount(8)

UCLA Technical Report CSD-910056, Stackable Layers: an Architecture for File System Development.

버그
본파일 시스템 타입은, 아직 완전하게는 서포트되고 있지 않습니다 (주: 기능하지 않는다고 하는 것입니다) 해, 실제의 곳사용하면(자) 시스템상의 데이터를 파괴할지도 모릅니다. 자기책임에 대해 사용해 주세요. 맹견 주의. 젖고 있어 미끄러집니다.

위험성을 줄이기 위해서(때문에)는, 이 코드도 또 소유자를 필요로 하고 있습니다 - 성실한 해커는 메일을 <hackers@FreeBSD.org> 에 보내 인계의 의사를 선언해 주세요.

역사
mount_nullfs (은)는, 4.4BSD (으)로부터 등장했습니다.