nfs 대신 로컬 실행 rm -rf를 사용하는 것이 더 낫습니까?


10

디렉토리에서 디렉토리를 수행하기 전에 디렉토리를 가진 머신 rm -rf에서 또는 rm -rfNFS를 통한 디렉토리 로 로그인하는 데 시간이 크게 차이가 있습니까?

답변:


11

물론 ssh가 더 좋습니다.

Nfs는 다양한 원격 프로 시저 호출 및 데이터 동기화 대기 시간과 함께 복잡한 네트워크 프로토콜을 사용합니다. ssh의 경우에는 적용되지 않습니다.

또한 많은 잠금 장치가 있습니다. nfs에서 파일 삭제는 다음과 같은 방식으로 작동합니다.

  1. 당신의 rm명령은 unlink()syscall을 제공합니다
  2. nfs 드라이버는이를 sunrpc 요청으로 변환하여 nfs 서버로 보냅니다.
  3. nfs 서버는이 sunrpc 요청을 다시 unlink()호출 로 변환합니다
  4. unlink()호출을 원격에서 실행
  5. 성공한 후 클라이언트에게 "모든 작업이 완료되었습니다"라는 rpc 응답 메시지를 반환합니다.
  6. 클라이언트 쪽의 커널 드라이버는 이것을 unlink()원래 호출의 종료 코드 0으로 다시 변환합니다.rm
  7. rm 다음 파일로 반복, goto 1

이제 중요한 것은 : 2-7 사이, rm기다려야합니다. 다음 unlink()호출을 비동기식으로 보낼 수 있지만 이벤트 중심의 도구가 아닌 단일 스레드입니다. 가능하더라도 여전히 까다로운 nfs 마운트 플래그가 필요합니다. 결과를 얻지 못할 때까지 기다립니다.

Nfs 및 모든 네트워크 파일 시스템은 항상 훨씬 느립니다.


대부분의 경우 트릭을 사용하여 재귀 삭제를 준 무한 속도로 만들 수 있습니다.

  1. 먼저 디렉토리를 다른 이름으로 이동하십시오 ( mv -vf oldfilms oldfilms-)
  2. 백그라운드에서 삭제 ( rm -rf oldfilms- &)

많은 (전부는 아님) 측면에서이 디렉토리 제거는 마치 거의 제로에 발생한 것처럼 보입니다.


확장 : @ el.pascado가 그의 훌륭한 의견에서 언급했듯이 실제로 2-7은 모든 파일에 대해 3x 를 실행 해야합니다.

  • 파일인지 디렉토리인지 ( lstat()syscall 포함) 확인
  • 그에 따라하십시오. 일반 파일 unlink()의 경우 디렉토리의 경우 opendir()모든 파일 / 디렉토리를 재귀 적으로 삭제 한 다음 closedir()마지막으로 rmdir().
  • 마지막으로 readdir()호출 을 통해 다음 디렉토리 항목으로 반복 하십시오.

파일에는 3 개의 nfs RPC 명령이 필요하고 디렉토리에는 3 개의 추가 RPC 명령이 필요합니다.


2
nfs 사례는 훨씬 더 나쁩니다. 질문에서 -r플래그 rm가 언급했듯이 먼저 파일이 lstatnfs를 통해 디렉토리인지 확인하고 , nfs를 통해 파일을 열고 opendir, 내용을 읽은 다음 ( readdirnfs를 통해) 파일을 찾은 다음 내부 및 발견 된 모든 파일에 대한 답변에 설명 된대로 실제 삭제를 수행해야합니다 하위 디렉토리 closedir로 되풀이 하여 디렉토리를 닫고 ( nfs를 통해) 찾은 모든 디렉토리에 대해 반복하십시오.
el.pescado

5

예. 아마도 때에 따라 다르지. 적은 수의 파일과 디렉토리의 경우 큰 차이가 없습니다.

NFS 마운트 디렉토리에서 대량으로 파일 작업을 수행하는 속도가 느립니다. NFS 서버 자체에 로그인하여 실제 디렉토리에서 수행 할 수 있다면 더 빠를 것입니다.

CVS에서 체크 아웃하고 NFS를 통해 마운트 한 OpenBSD 포트 컬렉션을 제거하여 테스트 해 보겠습니다.

NFS 서버에서 :

$ cd /export/shared/ports

$ du -hs .
2.6G    .

$ find . | wc -l
  179688

$ time rm -rf /export/shared/ports/*
0m20.87s real     0m00.12s user     0m04.62s system

클라이언트에서 (백업에서 원본 파일을 복원 한 후) :

$ time rm -rf /usr/ports/*
6m49.73s real     0m01.55s user     1m08.96s system
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.