네트워크 설치 소프트웨어의 작동 방식을 알고 싶습니다. 예를 들어, 내 직장에는 소프트웨어 서버가 있습니다. 각 클라이언트 컴퓨터(수백 대)는 시작 시 소프트웨어 서버에서 디렉터리를 자동으로 마운트합니다. 예를 들어 Matlab과 같은 프로그램은 소프트웨어 서버에 한 번만 설치되지만 각 클라이언트 컴퓨터는 Matlab 인스턴스를 시작할 수 있습니다.
뒤에서 무슨 일이 벌어지고 있는 걸까요?
소프트웨어 서버에서 실행 /opt/bin/matlab
하고 설치한다고 가정하고 /opt/
클라이언트 컴퓨터에서 Matlab을 실행하기 위해 Enter 키를 누르면 어떻게 되나요? 프로세스는 클라이언트 컴퓨터에 있으며 디스크 공간이 거의 없는 컴퓨터에서 Matlab을 실행하여 암시적이거나 숨겨진 파일 전송이 없는지 확인하여 범위를 좁혔습니다(예: 해당 세션에 대해 Matlab을 일시적으로 제거). 내 컴퓨터에)(즉, 전송할 공간이 부족함).
- Matlab은 서버에 설치되어 있는데 내 클라이언트 컴퓨터에서는 어떻게 실행할 수 있나요?
- 이것을 제어하는 메커니즘은 무엇입니까?
- 뒤에서 무슨 일이 일어나는가?
답변1
이를 달성하기 위해 그들이 사용한 기술은 다음과 같습니다.NFS - 네트워크 파일 시스템. 또한 NFS에서 자동 마운트라는 또 다른 기술을 사용할 수도 있습니다.오토퍼스리눅스라면.
네트워크 파일 시스템
NFS를 사용하면 다른 컴퓨터가 한 컴퓨터의 폴더에 액세스할 수 있습니다. 이것에 대해 마법 같은 것은 없습니다. 이 연결을 촉진하는 클라이언트와 서버가 있습니다. NFS 클라이언트를 통해 시스템에 마운트된 이러한 디렉토리 중 하나에 액세스하면 시스템은 디렉토리 및 해당 내용에 대한 정보를 중계하기 위해 호출합니다.
클라이언트 중 하나가 디렉터리의 파일에 액세스하는 경우 NFS 서버는 파일 내용을 NFS 클라이언트에 중계합니다.
오토퍼스
자동 마운트는 클라이언트 시스템이 공유 원격 리소스(예: NFS)에 일시적으로 액세스할 수 있도록 하는 기술입니다. 이는 NFS 클라이언트 시스템이 이 원격 NFS 공유에 액세스할 수 있음을 의미합니다. 그러나 누군가가 공유 디렉터리에 액세스하려고 시도할 때까지는 이를 적극적으로 "사용"하지 않습니다. 그런 다음에야 NFS 클라이언트는 원격 디렉토리와 그 내용을 "마운트"하려고 시도합니다.
파일 콘텐츠 수명 주기
두 경우 모두 파일은 암시적으로 NFS 클라이언트로 전송되지 않습니다. 즉, 장기적으로 클라이언트에 물리적으로 복사되지 않습니다. 이러한 파일은 클라이언트가 액세스를 시도할 때 클라이언트로 스트리밍됩니다. 사용 후에는 사라지며 장기적인 형태로 고객에게 달라붙지 않습니다.
대략적인 아이디어를 제공하기 위해 이 프로그램을 사용하여 strace
프로그램이 실행되는 동안 이루어진 일부 시스템 호출을 볼 수 있습니다. 예를 들어 다음 명령을 사용하십시오.
$ strace echo "hello world" > afile
파일이 시스템에 어떻게 기록되는지 확인할 수 있습니다. 다음 형식을 사용하여 NFS 마운트 디렉터리에 쓸 수도 있습니다.
$ strace echo "hello world" > /home/sam/afile
두 추적은 거의 동일합니다.
### 지역 글쓰기
$ cat strace_wr_local.log
execve("/bin/echo", ["echo", "hello world"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f80000
write(1, "hello world\n", 12) = 12
close(1) = 0
### NFS 쓰기
$ cat strace_wr_remote.log
execve("/bin/echo", ["echo", "hello world"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbe000
write(1, "hello world\n", 12) = 12
close(1) = 0
읽기가 약간 더 흥미롭지만 기본적으로는 동일합니다.
### 로컬 읽기
$ cat strace_rd_local.log
execve("/bin/cat", ["cat", "afile"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=1761, ...}) = 0
open("afile", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
read(3, "hello world\n", 4096) = 12
write(1, "hello world\n", 12hello world
) = 12
read(3, "", 4096) = 0
close(3) = 0
### NFS 읽기
$ cat strace_rd_remote.log
execve("/bin/cat", ["cat", "/home/sam/afile"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=1771, ...}) = 0
open("/home/sam/afile", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
read(3, "hello world\n", 4096) = 12
write(1, "hello world\n", 12hello world
) = 12
read(3, "", 4096) = 0
close(3) = 0
수영장으로 들어가다
NFS 프로토콜에 대해 궁금하신 경우 여기에서 NFS 프로토콜의 작동 방식에 대한 자세한 내용을 읽어보실 수 있습니다.NFS 프로토콜 기본 사항. 일반적으로 이것이 어떻게 작동하는지에 대한 기본 개념을 이해하는 것은 쉽습니다. 작동 방식에 대한 아이디어를 제공하기 위한 NFS 요청의 예가 있습니다.
심층 연구
실제로 커튼 뒤를 들여다보고 싶다면 NFS 서버와 클라이언트 사이를 오가는 비트스트림을 볼 수 있도록 네트워크 트래픽을 수집하는 도구 세트를 도입하는 것이 좋습니다. 이러한 도구는 더 깊은 연구를 위한 친구가 되었거나 친구가 될 tcpdump
수도 있습니다.wireshark
정말 호기심이 많은 유형이 아니라면 시간을 낭비하지 말라고 주의를 드리고 싶습니다. 이와 같은 심층적인 연구에는 일련의 Unix 도구에 대한 많은 기술과 친숙함이 필요하기 때문입니다. 12년 이상 유닉스.
정말 궁금하다면 이 사이트가 도움이 될 것입니다.
답변2
LinuxTerminalServerProject "LTSP" 및 DisklessRemoteBootLinux "DRBL"은 모두 많은 학교와 기업에서 디스크 없는 클라이언트를 PXE 부팅하는 데 사용하는 무료 오픈 소스 프로젝트입니다. 인건비 및 제품 비용 관리를 단순화합니다. 모든 것이 RAM에서 실행되므로 시스템이 훨씬 빠릅니다. 운이 좋게도 느린 Intel SATA 칩셋을 손에 넣을 수 있다면 NFS 서버용 DRBL 클라이언트에 액세스하는 것이 그만한 가치가 있음이 입증될 수 있습니다. 정확한 수치는 모르지만 DRBL PXE 부팅 디스크 없는 클라이언트가 로컬 부팅 SolidStateDrive를 능가할 것이라고 확신합니다. NFS는 SMB보다 빠릅니다.