10장. NFS에서 캐시 사용
명시적으로 지시하지 않는 한 NFS는 캐시를 사용하지 않습니다. 이 단락에서는 FS-Cache를 사용하여 NFS 마운트를 구성하는 방법을 보여줍니다.
사전 요구 사항
cachefilesd 패키지가 설치되어 실행 중입니다. 실행 중인지 확인하려면 다음 명령을 사용하십시오.
# systemctl start cachefilesd # systemctl status cachefilesd
상태는 활성(실행 중) 이어야 합니다.
다음 옵션을 사용하여 NFS 공유를 마운트합니다.
# mount nfs-share:/ /mount/point -o fsc
직접 I/O 또는 쓰기를 위해 파일을 열지 않는 한
/mount/point
아래의 파일에 대한 모든 액세스는 캐시를 통과합니다. 자세한 내용은 NFS의 캐시 제한 사항을 참조하십시오.
NFS 색인은 파일 이름이 아닌 NFS 파일 핸들을 사용하여 콘텐츠를 캐시합니다. 따라서 하드 연결된 파일이 캐시를 올바르게 공유합니다.
NFS 버전 3, 4.0, 4.1 및 4.2는 캐싱을 지원합니다. 그러나 각 버전은 캐싱에 서로 다른 분기를 사용합니다.
10.1. NFS 캐시 공유 구성
NFS 캐시 공유에는 몇 가지 잠재적인 문제가 있습니다. 캐시는 영구적이므로 캐시의 데이터 블록은 다음 네 가지 키 순서로 인덱싱됩니다.
- 수준 1: 서버 세부 정보
- 수준 2 일부 마운트 옵션, 보안 유형, FSID; uniquifier
- 수준 3: 파일 처리
- 수준 4: 파일의 페이지 번호
수퍼 블록 간의 일관성 관리 문제를 방지하기 위해 데이터를 캐시하는 데 필요한 모든 NFS 수퍼 블록에는 고유한 레벨 2 키가 있습니다. 일반적으로 동일한 소스 볼륨 및 옵션을 사용하는 두 NFS 마운트는 수퍼 블록을 공유하므로 해당 볼륨 내에서 다른 디렉터리를 마운트하더라도 캐싱을 공유합니다.
다음은 다양한 옵션을 사용하여 캐시 공유를 구성하는 예제입니다.
절차
다음 명령을 사용하여 NFS 공유를 마운트합니다.
mount home0:/disk0/fred /home/fred -o fsc mount home0:/disk0/jim /home/jim -o fsc
여기에서
/home/fred
및/home/jim
은 특히 NFS 서버(home0
)에서 동일한 볼륨/파티션에서 발생하는 경우 수퍼 블록을 공유할 수 있습니다.수퍼 블록을 공유하지 않으려면
mount
명령을 다음 옵션과 함께 사용하십시오.mount home0:/disk0/fred /home/fred -o fsc,rsize=8192 mount home0:/disk0/jim /home/jim -o fsc,rsize=65536
이 경우
/home/fred
및/home/jim
은 수준 2 키의 일부인 다른 네트워크 액세스 매개 변수를 가지고 있으므로 수퍼 블록을 공유하지 않습니다.수퍼 블록을 공유하지 않고 두 개의 하위 트리(
/home/fred1
및/home/fred2
)의 콘텐츠를 두 번 캐시하려면 다음 명령을 사용하십시오.mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192 mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
수퍼 블록 공유를 방지하는 또 다른 방법은
nosharecache
매개 변수를 사용하여 명시적으로 억제하는 것입니다. 동일한 예제를 사용합니다.mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc
그러나 이 경우
home0:/disk0/fred
및home0:/disk0/jim
의 수준 2 키를 구분할 수 없으므로 수퍼 블록 중 하나만 캐시를 사용할 수 있습니다.수퍼 블록에 주소 지정을 지정하려면 마운트 중 하나 이상(예:
fsc=unique-identifier
)에 고유 식별자 를 추가합니다.mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
여기서는 고유 식별자
jim
이/home/jim
의 캐시에 사용된 레벨 2 키에 추가됩니다.
사용자는 다른 통신 또는 프로토콜 매개 변수가 있는 수퍼 블록 간에 캐시를 공유할 수 없습니다. 예를 들어 NFSv4.0과 NFSv3 간 또는 NFSv4.1과 NFSv4.2 간에 다른 수퍼 블록을 강제로 공유하므로 공유할 수 없습니다. 읽기 크기(rsize)와 같은 매개 변수를 설정하면 다른 수퍼 블록을 강제 적용하므로 캐시 공유를 방지할 수 있습니다.