8장. 네트워크 파일 시스템(NFS)
NFS( 네트워크 파일 시스템 )를 사용하면 원격 호스트에서 네트워크를 통해 파일 시스템을 마운트하고 로컬에 마운트된 것처럼 해당 파일 시스템과 상호 작용할 수 있습니다. 이를 통해 시스템 관리자는 네트워크의 중앙 집중식 서버에 리소스를 통합할 수 있습니다.
이 장에서는 NFS 기본 개념 및 추가 정보에 대해 설명합니다.
8.1. NFS 소개
현재 Red Hat Enterprise Linux에는 두 가지 주요 버전의 NFS가 포함되어 있습니다.
- NFS 버전 3(NFSv3)은 안전한 비동기 쓰기를 지원하며 이전 NFSv2보다 오류 처리에서 더 강력합니다. 또한 64비트 파일 크기 및 오프셋을 지원하므로 클라이언트가 2GB 이상의 파일 데이터에 액세스할 수 있습니다.
- NFS 버전 4(NFSv4)는 방화벽과 인터넷에서 작동하므로 더 이상 alice bind 서비스가 필요하지 않으며 ACL을 지원하며 상태 저장 작업을 사용할 수 있습니다.
Red Hat Enterprise Linux 7.4 릴리스 이후 NFS 버전 4.2 (NFSv4.2)를 완전히 지원합니다.
다음은 Red Hat Enterprise Linux의 NFSv4.2의 기능입니다.
- 스파스 파일: 파일의 공간 효율성을 확인하고 자리 표시자를 사용하여 스토리지 효율성을 개선할 수 있습니다. 하나 이상의 홀이 있는 파일이며, 허자는 할당되지 않았거나 초기화되지 않은 데이터 블록은 0으로만 구성됩니다.
lseek()
NFSv4.2의 작업은seek_hole()
및seek_data()
을 지원하므로 애플리케이션이 스파스 파일에 있는 허위의 위치를 매핑할 수 있습니다. - 공간 예약: 스토리지 서버가 여유 공간을 예약하여 서버가 공간을 비우는 것을 방지할 수 있습니다. NFSv4.2에서는
allocate()
작업을 통해 예약할 수 있는deallocate()
작업, 예약되지 않은 공간 및fallocate()
작업을 통해 파일에 공간을 사전 할당하거나 할당 해제할 수 있습니다. - 레이블이 지정된 NFS: 데이터 액세스 권한을 적용하고 NFS 파일 시스템의 개별 파일에 대해 클라이언트와 서버 간에 SELinux 레이블을 활성화합니다.
- 레이아웃 기능 향상: NFSv4.2는 클라이언트가 레이아웃과의 통신에 대해 메타데이터 서버에 알리는 데 사용할 수 있는 새로운 작업인
layoutstats()
를 제공합니다.
7.4 이전 버전의 Red Hat Enterprise Linux 버전은 NFS를 버전 4.1까지 지원합니다.
다음은 NFSv4.1의 기능은 다음과 같습니다.
- 네트워크의 성능 및 보안을 강화하고 PNFS(Parallel NFS)에 대한 클라이언트 측 지원도 포함됩니다.
- 더 이상 콜백에 대한 별도의 TCP 연결이 필요하지 않으므로, NFS 서버에서 클라이언트에 연결할 수 없는 경우에도 위임을 부여할 수 있습니다. 예를 들어 NAT 또는 방화벽이 간섭하는 경우입니다.
- 이는 정확히 한 번 의미 체계(재부팅 작업 제외)를 제공하여 응답이 손실되고 작업이 두 번 전송되는 경우 특정 작업에서 부정확한 결과를 반환할 수 있는 이전 문제를 방지합니다.
NFS 클라이언트는 기본적으로 NFSv4.1를 사용하여 마운트하고 서버가 NFSv4.1를 지원하지 않는 경우 NFSv4.0으로 대체합니다. 서버가 NFSv4.0을 지원하지 않으면 나중에 마운트가 NFSv3로 대체됩니다.
참고
NFS 버전 2(NFSv2)는 Red Hat에서 더 이상 지원하지 않습니다.
NFS의 모든 버전은 IP 네트워크를 통해 실행되는TCP( Transmission Control Protocol )를 NFSv4에서 요구하는 상태로 사용할 수 있습니다. NFSv3에서는 IP 네트워크를 통해 실행되는 UDP( User Datagram Protocol )를 사용하여 클라이언트와 서버 간에 상태 비저장 네트워크 연결을 제공할 수 있습니다.
UDP에서 NFSv3를 사용하는 경우 상태 비저장 UDP 연결(정상 조건에서)의 프로토콜 오버헤드는 TCP보다 적습니다. 이로 인해 매우 깔끔하고 일관되지 않은 네트워크에서 성능이 향상될 수 있습니다. 그러나 UDP는 상태 비저장이므로 서버가 예기치 않게 다운되면 UDP 클라이언트는 서버에 대한 요청으로 네트워크를 계속 포화시킵니다. 또한 UDP로 프레임이 손실되면 전체 RPC 요청을 다시 전송해야 합니다. TCP를 사용하면 손실된 프레임만 다시 전송해야 합니다. 이러한 이유로 TCP는 NFS 서버에 연결할 때 기본 프로토콜입니다.
마운트 및 잠금 프로토콜이 NFSv4 프로토콜에 통합되었습니다. 또한 서버는 잘 알려진 TCP 포트 2049에서 수신 대기합니다. 따라서 NFSv4는authorization bind와 상호 작용할 필요가 없습니다. [1], , lockd .statd 데몬. export를 설정하기 위해 NFS 서버에는 계속 requires, Over-the-wire 작업에는 포함되어 있지 않습니다.
참고
TCP는 Red Hat Enterprise Linux에서 NFS 버전 3의 기본 전송 프로토콜입니다. UDP는 필요에 따라 호환성 목적으로 사용할 수 있지만 광범위한 용도로는 사용하지 않는 것이 좋습니다. NFSv4에는 TCP가 필요합니다.
모든 RPC/NFS 데몬에는 포트를 설정할 수 있는 '-p' 명령줄 옵션이 있어 방화벽 구성이 쉬워집니다.
TCP 래퍼가 클라이언트에 대한 액세스 권한을 부여하면 NFS 서버는
/etc/exports
구성 파일을 참조하여 클라이언트가 내보낸 파일 시스템에 액세스할 수 있는지 여부를 확인합니다. 확인되면 모든 파일 및 디렉터리 작업을 사용자가 사용할 수 있습니다.
중요
NFS가 방화벽이 활성화된 Red Hat Enterprise Linux의 기본 설치를 사용하려면 IPTables를 기본 TCP 포트 2049로 구성합니다. 적절한 IPTables 구성이 없으면 NFS가 제대로 작동하지 않습니다.
NFS 초기화 스크립트 및Runtime Config.nfsd 프로세스에서 이제 시스템이 시작될 때 지정된 포트에 바인딩할 수 있습니다. 그러나 포트를 사용할 수 없거나 다른 데몬과 충돌하는 경우 오류가 발생할 수 있습니다.
8.1.1. 필수 서비스
Red Hat Enterprise Linux는 커널 수준 지원 및 데몬 프로세스의 조합을 사용하여 NFS 파일 공유를 제공합니다. 모든 NFS 버전은 클라이언트와 서버 간의 원격 프로시저 호출 (RPC)을 사용합니다. Red Hat Enterprise Linux 7에서 RPC 서비스는 alice바인 드 서비스에 의해 제어됩니다. NFS 파일 시스템을 공유하거나 마운트하기 위해 구현된 NFS 버전에 따라 다음 서비스가 함께 작동합니다.
참고
portmap 서비스는 RPC 프로그램 번호를 이전 버전의 Red Hat Enterprise Linux에서 IP 주소 포트 번호 조합에 매핑하는 데 사용되었습니다. 이 서비스는 이제 IPv6 지원을 활성화하기 위해 Red Hat Enterprise Linux 7의 alice bind 로 교체되었습니다.
- nfs
- systemctl start nfs 는 NFS 서버를 시작하고 적절한 RPC 프로세스는 공유 NFS 파일 시스템에 대한 요청을 서비스합니다.
- nfslock
- systemctl start nfs-lock 은 NFS 클라이언트가 서버에 파일을 잠글 수 있도록 적절한 RPC 프로세스를 시작하는 필수 서비스를 활성화합니다.
- rpcbind
- Diffiebind 는 로컬 RPC 서비스의 포트 예약을 허용합니다. 그런 다음 이러한 포트를 사용할 수 있도록 (또는 광고)하여 해당 원격 RPC 서비스에서 액세스할 수 있습니다. INPUTbind 는 RPC 서비스 요청에 응답하고 요청된 RPC 서비스에 대한 연결을 설정합니다. NFSv4에서는 사용되지 않습니다.
다음 RPC 프로세스는 NFS 서비스를 용이하게 합니다.
- rpc.mountd
- 이 프로세스는 NFS 서버에서 NFSv3 클라이언트의 MOUNT 요청을 처리하는 데 사용됩니다. 요청된 NFS 공유가 현재 NFS 서버에서 내보내고 클라이언트가 액세스할 수 있는지 확인합니다. 마운트 요청이 허용되면 EgressIP.mountd 서버는
Success
상태로 응답하고 이 NFS 공유에 대한File-Handle
을 NFS 클라이언트에 다시 제공합니다. - rpc.nfsd
- RPC.nfsd 를 사용하면 명시적 NFS 버전 및 서버에서 알리는 프로토콜을 정의할 수 있습니다. NFS 클라이언트가 연결할 때마다 서버 스레드를 제공하는 등 NFS 클라이언트의 동적 요구사항을 충족하기 위해 Linux 커널과 함께 작동합니다. 이 프로세스는 nfs 서비스에 해당합니다.
- lockd
- lockd 는 클라이언트와 서버에서 모두 실행되는 커널 스레드입니다. NFSv3 클라이언트가 서버에 파일을 잠글 수 있도록 하는 NLM( Network Lock Manager ) 프로토콜을 구현합니다. NFS 서버가 실행될 때마다 NFS 파일 시스템이 마운트될 때마다 자동으로 시작됩니다.
- rpc.statd
- 이 프로세스에서는 NSM( Network Status Monitor ) RPC 프로토콜을 구현하므로 NFS 서버가 정상적으로 시작되지 않을 때 NFS 서버를 다시 시작할 때 NFS 클라이언트에 알립니다. RPC.statd 는 nfslock 서비스에 의해 자동으로 시작되며 사용자 구성이 필요하지 않습니다. NFSv4에서는 사용되지 않습니다.
- rpc.rquotad
- 이 프로세스는 원격 사용자에 대한 사용자 할당량 정보를 제공합니다. RPC.rquotad 는 nfs 서비스에서 자동으로 시작하며 사용자 구성이 필요하지 않습니다.
- rpc.idmapd
- RPC .idmapd 는 NFSv4 클라이언트와 서버 upcalls를 제공합니다. 이 호출은 유선 NFSv4 이름(
user@domain
형식의 문자열)과 로컬 UID 및 GID 간에 매핑됩니다. idmapd 가 NFSv4에서 작동하려면/etc/idmapd.conf
파일을 구성해야 합니다. 최소한 NFSv4 매핑 도메인을 정의하는 "Domain" 매개변수를 지정해야 합니다. NFSv4 매핑 도메인이 DNS 도메인 이름과 동일한 경우 이 매개 변수를 건너뛸 수 있습니다. ID가 올바르게 작동하려면 클라이언트와 서버는 NFSv4 매핑 도메인에 동의해야 합니다.참고Red Hat Enterprise Linux 7에서 NFSv4 서버만 INPUT .idmapd 를 사용합니다. NFSv4 클라이언트는 인증 키 기반 idmapper nfsidmap 을 사용합니다. nfsidmap 은 ID 매핑을 수행하기 위해 커널 온-요청에 의해 호출되는 독립형 프로그램입니다. 이는 데몬이 아닙니다. nfsidmap 에 문제가 있는 경우 클라이언트가 EgressIP .idmapd를 사용하여 대체합니다. nfsidmap 에 대한 자세한 내용은 nfsidmap 매뉴얼 페이지에서 확인할 수 있습니다.
[1]
alice 서비스는 이전 버전의 Red Hat Enterprise Linux에서 사용된 portmap 을 대체하여 RPC 프로그램 번호를 IP 주소 포트 번호 조합에 매핑합니다. 자세한 내용은 8.1.1절. “필수 서비스” 에서 참조하십시오.