Linux/centos에서 NFS 서버를 구성하고 관리하는 방법은 무엇입니까?
1 NFS에 대한 기본 이해
NFS(Network File System)
즉, 파일 운영 체제입니다.NFS
네트워크의 여러 컴퓨터가 서로 리소스를 공유할 수 있도록 합니다.
1.1 NFS 개요
- 1980년에
SUN
개발된UNIX&Linux
시스템 간 파일 공유 방법 . - 클라이언트 측 애플리케이션이 네트워크를 통해 서버 디스크에 있는 데이터에 액세스하도록 지원하는 파일 시스템 프로토콜입니다.
NFS
네트워크 파일 공유만 제공하고 데이터 전송 기능은 제공하지 않습니다.NFS
클라이언트와 서버는RPC(Remote Procedure Calls)
데이터 전송을 구현해야 합니다.NFS
서버 디렉터리에 접근하는 것을 내보내기(export
)라고 하고, 클라이언트가 내보내기 디렉터리에 접근하는 과정을 마운트(mount
) 또는 가져오기(import
)라고 합니다.
1.2 NFS 워크플로
1단계: NFS 공유 리소스에 액세스하기 위해 NFS 클라이언트는 쿼리 요청을 보냅니다. 즉, 클라이언트 RPC 서비스는 네트워크를 통해 서버 RPC 서비스의 포트 111에 쿼리 요청을 보냅니다.
2단계: NFS 서버 RPC는 해당 등록된 NFSdaemon 포트를 찾아 클라이언트 RPC에 알립니다.
3단계: NFS 클라이언트는 포트를 획득하고 NFSNFSdaemon을 사용하여 온라인으로 데이터를 직접 저장합니다.
4단계: NFS 클라이언트가 데이터를 성공적으로 저장한 후 사용자에게 결과를 알립니다.
2 NFS 서비스 설치 및 시작
2.1 NFS 서버 설치
- 일반적으로 NFS는 시스템에 설치되어 있습니다.
- 먼저 NFS가 설치되어 있는지 확인하세요. 관련 종속성 패키지는 다음 두 가지입니다.
rpm -qa | grep nfs-utils
rpm -qa | grep rpcbind
- 확인 후 이미 설치되어 있습니다.
- 시스템에 NFS 종속성 패키지가 설치되어 있지 않은 경우 해당 패키지를 설치해야 합니다.
yum clean all
yum -y install nfs-utils rpcbind
2.2 NFS 서비스 시작
- NFS 상태를 확인하세요.
systemctl status rpcbind.service
systemctl status nfs.service
- NFS 서비스를 시작합니다.
systemctl start rpcbind.service
systemctl start nfs.service
- 상태를 다시 확인하면 모두 시작되었습니다.
- NFS 서비스를 중지합니다.
systemctl stop nfs.service
- NFS 서비스를 다시 시작합니다.
systemctl restart nfs.service
- 부팅 시 자동으로 시작되도록 NFS 서비스를 설정합니다.
systemctl enable rpcbind.service
systemctl enable nfs.service
3 NFS 서버 및 클라이언트 구성
3.1 NFS 서버 구성
- 구성 파일은
/etc/exports
; - 형식은 다음과 같습니다.
共享目录 [客户端1(参数)] [客户端2(参数)]
공유 디렉터리: 공유할 NFS 서버가 필요로 하는 실제 경로(절대 경로),
클라이언트: 공유 디렉터리에 접근할 수 있는 컴퓨터.
- 일반적인 클라이언트 형태:
고객 | 설명하다 |
---|---|
192.168.1.111 |
지정된 IP 주소를 가진 호스트 |
192.168.1.0/24 |
지정된 서브넷의 모든 호스트 |
192.168.1.* |
지정된 서브넷의 모든 호스트 |
www.xxx.com |
지정된 도메인 이름의 호스트 |
*.xxx.com |
지정된 도메인의 모든 호스트 |
* |
모든 호스트 |
접근 권한 매개변수: 접근 권한 설정.
- 공통 액세스 권한:
접근 권한 | 설명하다 |
---|---|
ro |
읽기 전용 |
rw |
읽고 쓰기 |
사용자 매핑 매개변수
- 사용자 매핑 매개변수 테이블:
사용자 매핑 | 설명하다 |
---|---|
all_squash |
모든 원격 액세스 사용자를 익명 사용자 또는 사용자 그룹에 매핑( nfsnobody ) |
no_all_squash |
위의 반대(기본 설정) |
root_squash |
루트 사용자를 다음으로 설정합니다...(기본 설정) |
no_root_squash |
위와는 반대로 |
anonuid=xxx |
익명 계정을 로컬 계정으로 전환( UID=xxx ) |
anongid=xxx |
익명 사용자 그룹을 로컬 사용자 그룹(GID=xxx) |
기타 매개변수: 출력 디렉토리를 제어합니다.
- 기타 일반적으로 사용되는 매개변수:
기타 매개변수 | 설명하다 |
---|---|
secure |
클라이언트가 1024 미만의 TCP/IP 포트에서 NFS에 연결하도록 제한 |
insecure |
단어 순서 클라이언트는 1024보다 큰 TCP/IP 포트를 사용하여 NFS에 연결됩니다. |
sync |
메모리 버퍼와 디스크에 동기적으로 데이터 쓰기 |
async |
먼저 버퍼에 데이터를 저장한 후 필요할 때 디스크에 씁니다. |
wdelay |
관련된 쓰기 작업이 있는지 확인하세요. |
no_wdelay |
쓰기 작업은 즉시 실행되며 다음과 sync 함께 사용됩니다. |
subtree_check |
출력 디렉터리가 하위 디렉터리인 경우 NFS 서버는 상위 디렉터리의 권한을 확인합니다. |
no_subtree_check |
출력 디렉터리가 하위 디렉터리인 경우 NFS 서버는 상위 디렉터리의 권한을 확인하지 않습니다. |
- 예를 들어 , IP 주소가 있는 컴퓨터에
/mnt/temp
디렉터리에 읽기 및 쓰기 권한만 부여합니다 .172.16.1.33
/mnt/temp 172.16.1.33 (rw, sync)
- 예를 들어 디렉터리
/mnt/temp01
에 서브넷의 컴퓨터에만172.16.1.0/24
읽기 및 쓰기 권한을 부여하고 다른 컴퓨터 메커니즘에는 읽기 권한만 부여합니다.
/mnt/temp0 172.16.1.0/24 (rw, async) * (ro)
3.2 NFS 클라이언트 구성
- NFS 서버 정보 보기:
showmount [选项] (参数)
-d: NFS 클라이언트에 의해 로드된 공유 디렉터리만 표시합니다.
-e: NFS 서버의 모든 공유 디렉터리를 표시합니다.
showmount -e 192.168.0.190
showmount 사용 시 방화벽을 끄고 SELinux를 허용하도록 설정하는 것이 좋습니다.
systemctl stop firewalld.service
setenforce 0
getenforce
- NFS 서버에 공유 디렉터리를 마운트합니다.
NFS 공유 디렉터리를 로컬로 마운트합니다.
mount -t NFS 서버 IP: 출력 디렉터리가 로컬로 마운트됩니다.
- 예를 들어:
mkdir /mnt/mytemp
mount -t nfs 192.168.0.190:/mnt/mytemp /mnt/mytemp
- NFS 서버를 제거합니다.
umount 挂载点
- 시작 시 NFS 공유 디렉터리를 자동으로 마운트합니다.
192.168.0.190: /mnt/temp /mnt/mytemp nfs defaults 0 0
4 실제 사례
4.1 기본 요구사항
- NFS 서버 192.168.0.190;
- 요구 사항 1: 공유 디렉터리 /mnt/temp는 192.168.0.0/24 네트워크 세그먼트의 컴퓨터에서 액세스할 수 있습니다.
- 요구 사항 2: 공유 디렉터리 /mnt/share는 사용자 zhang이 액세스할 수 있으며 IP는 192.168.0.10입니다.
- 요구 사항 3: 공유 디렉터리 /mnt/upload를 사용하면 192.168.0.0/24 네트워크 세그먼트를 업로드 디렉터리로 사용할 수 있으며, 해당 세그먼트가 속한 그룹은 nfsupload이고 UID와 GID는 모두 666입니다.
- 요구 사항 4: 192.168.0.0/24 네트워크 세그먼트의 사용자 액세스를 제외하고 공유 디렉터리 /mnt/nfs는 읽기 전용이며 인터넷에 데이터 콘텐츠를 제공할 수 있습니다.
4.2 사례 구현
- NFS 서비스를 설치합니다.
yum -y install rpcbind
yum -y install nfs-utils
- 디렉터리 및 테스트 파일을 만듭니다.
# 创建目录:
mkdir -p /mnt/temp
mkdir -p /mnt/share
mkdir -p /mnt/upload
mkdir -p /mnt/nfs
# 创建测试文件
touch /mnt/temp/temp1.txt /mnt/temp/temp2.txt
touch /mnt/share/data1.txt /mnt/share/data2.txt
touch /mnt/upload/upload.txt
touch /mnt/nfs/nfs1.txt /mnt/nfs/nfs2.txt
- 공유 디렉터리 권한 속성을 설정합니다.
# 要求1:
chmod 1777 /mnt/temp/
ll -d /mnt/temp/
# 要求2:
useradd zhang
passwd zhang
cat /etc/passwd | grep zhang
chmod 700 /mnt/share/
chown -R zhang:zhang /mnt/share/
ll -d /mnt/share/
# 要求3:
groupadd -g 666 nfsupload
useradd -g 666 -u 666 -M nfsupload
cat /etc/passwd | grep nfs
chown -R nfsupload:nfsupload /mnt/upload
ll -d /mnt/upload/
# 要求4:
ll -d /mnt/nfs/
- 편집하다
/etc/exports
:
/mnt/temp 192.168.0.0/24 (rw,no_root_squash)
/mnt/share 192.168.0.10 (rw)
/mnt/upload 192.168.0.0/24 (rw,all_squash,anonuid = 666,anongid = 666)
/mnt/nfs 192.168.0.0/24 (ro) * (rw,all_squash)
- 방화벽을 닫고 Selinux를 허용하도록 설정한 후 NFS 서비스를 다시 시작합니다.
systemctl stop firewalld.service
setenforce 0
getenforce
systemctl restart nfs
- NFS 클라이언트는 클라이언트 소프트웨어를 설치합니다.
yum -y install nfs-utils
- NFS 서버의 공유 디렉터리를 확인합니다.
showmount -e 192.168.0.190
- 클라이언트 시스템에 디렉터리를 생성하고 NFS 디렉터리를 해당 디렉터리에 마운트합니다.
mkdir /mnt/ClientNFS
mount -t nfs 192.168.0.190:/mnt/nfs/ /mnt/ClientNFS/
- 다른 NFS 디렉터리를 마운트하려면 동일한 방법을 사용하세요.
- 그리고 클라이언트 컴퓨터에 그룹 666을 만듭니다.
groupaddd -g 666 nfsupload
useradd -g 666 -u 666 -M nfsupload
다음 내용은 무시해주세요~
var code = "0f151890-7560-4e5d-85f0-4fde9477c52b"