Linux 에서 대량의 파일 / 폴 더 를 빠르게 삭제 하 는 방법 -- rsync

3977 단어 lnmp
만약 당신 이 Liux 에서 대량의 파일 을 삭제 하려 고 한다 면, 예 를 들 어 100 만, 1000 만, 예 를 들 어 / var / spool / clientmque / mail 메 일, 예 를 들 어 / usr / local / nginx / proxytemp 의 nginx 캐 시 등 은 rm - rf * 가 잘 안 될 수도 있 습 니 다.
rsync 는 삭제 와 관련 된 인 자 를 제공 합 니 다.
rsync–help | grep delete –del an alias for –delete-during –delete delete files that don’t exist on the sending side –delete-before receiver deletes before transfer (default) –delete-during receiver deletes during transfer, not before –delete-after receiver deletes after transfer, not before –delete-excluded also delete excluded files on the receiving side –ignore-errors delete even if there are I/O errors –max-delete=NUM don’t delete more than NUM files
[root@localhost tmp]# mkdir null    #       
[root@localhost tmp]# rsync -av --delete null/ testDir/
sending incremental file list
./
deleting testSet2.txt
deleting testSet.txt
deleting portlandClubs.txt
deleting places.txt
deleting kMeans.py
deleting guiyihua.py
deleting ez_setup.py
..............

sent 29 bytes  received 15 bytes  88.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost tmp]# ls testDir/
[root@localhost tmp]#

상례 에서 옵션 - delete 는 testDir / 디 렉 터 리 내용 과 빈 디 렉 터 리 내용 을 일치 시 키 고 서로 다른 파일 과 디 렉 터 리 는 삭 제 됩 니 다. 즉, null 에 어떤 내용 이 있 는 지, testDir 에 어떤 내용 이 있 는 지;null 에 없 는 것 은 testDir 에 있 는 것 은 삭제 해 야 합 니 다. null 디 렉 터 리 가 비어 있 기 때문에 이 명령 은 testDir 디 렉 터 리 에 있 는 모든 내용 을 삭제 합 니 다.
 
대량 파일 삭제
– delete - before 수신 자 는 전송 전에 삭제 작업 을 합 니 다.
디 렉 터 리 나 파일 을 비 우 는 데 사용 할 수 있 습 니 다. 다음 과 같 습 니 다.
1. 먼저 빈 디 렉 터 리 mkdir / data / blank 만 들 기
2, rsync 로 대상 디 렉 터 리 삭제 rsync – delete - before - d / data / blank / var / spool / clientmque /
이렇게 하면 목표 디 렉 터 리 가 금방 비 워 집 니 다.
2. 큰 파일 빠 른 삭제
또한, 만약 당신 이 삭제 해 야 할 아주 큰 파일 이 있다 면, 예 를 들 어 nohup. out 과 같은 실시 간 으로 업 데 이 트 된 파일 은 걸핏하면 몇 십 개의 G 에서 백 G 에 달 하 는 것 이 고, rsync 로 큰 파일 을 비 우 는 것 도 효율 적 입 니 다.
1. 빈 파일 touch / data / blank. txt 만 들 기
2, rsync 로 파일 삭제 rsync - a – delete - before – progress – stats / root / blank. txt / root / nohup. out
building file list … 1 file to consider blank.txt 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
Number of files: 1 Number of files transferred: 1 Total file size: 0 bytes Total transferred file size: 0 bytes Literal data: 0 bytes Matched data: 0 bytes File list size: 27 File list generation time: 0.006 seconds File list transfer time: 0.000 seconds Total bytes sent: 73 Total bytes received: 31
sent 73 bytes received 31 bytes 208.00 bytes/sec total size is 0 speedup is 0.00
왜 rsync 는 큰 파일 을 빠르게 삭제 할 수 있 습 니까?
1. rm 명령 은 lstat 64 와 unlink 를 대량으로 호출 하여 모든 파일 을 삭제 하기 전에 파일 시스템 에서 lstat 작업 을 한 것 으로 추정 할 수 있 습 니 다.프로 세 스: 작업 의 첫 번 째 단 계 를 정식으로 삭제 하려 면 getdirenties 64 호출 을 통 해 디 렉 터 리 (매번 약 4K) 를 분할 읽 고 메모리 에 rm 파일 목록 을 만들어 야 합 니 다.두 번 째 단계 에서 lstat 64 는 모든 파일 의 상 태 를 확인 합 니 다.3 단계, unlink 를 통 해 실제 삭 제 를 실행 합 니 다.이 세 단 계 는 모두 비교적 많은 시스템 호출 과 파일 시스템 조작 이 있다.
2. rsync 가 하 는 시스템 호출 이 매우 적 습 니 다. 단일 파일 에 대해 lstat 와 unlink 작업 을 하지 않 았 습 니 다.명령 실행 초기 에 rsync 는 공유 메모 리 를 열 고 mmap 방식 으로 디 렉 터 리 정 보 를 불 러 옵 니 다.디 렉 터 리 동기 화 만 하고 단일 파일 에 unlink 를 할 필요 가 없습니다.
또한, 다른 사람의 평가 에서 rm 의 컨 텍스트 전환 이 비교적 많 으 면 System CPU 가 많이 차지 할 수 있 습 니 다. 파일 시스템 의 조작 에 있어 동시 다발 수 를 간단하게 증가 하 는 것 은 항상 조작 속 도 를 향상 시 키 지 않 습 니 다.
tips: SRC 와 DEST 파일 의 성질 이 일치 하지 않 을 때 오류 가 발생 합 니 다. SRC 와 DEST 성질 이 파일 [f] 일 때 파일 내용 을 삭제 하 는 것 이 아니 라 파일 내용 을 삭제 하 는 것 입 니 다. SRC 와 DEST 성질 이 디 렉 터 리 [d] 일 때 이 디 렉 터 리 에 있 는 모든 파일 을 삭제 하고 빈 목록 으로 만 드 는 것 이 가장 중요 한 것 은 처리 속도 가 상당히 빠르다 는 것 입 니 다.몇 개의 G 파일, 즉 초 단위 의 일 을 처리 하 는 가장 핵심 적 인 내용 은 rsync 가 실제로 사용 하 는 것 은 교체 원리 이다.
요약:
파일 시스템 의 디 렉 터 리 와 책의 디 렉 터 리 를 비교 하고 rm 이 내용 을 삭제 할 때 디 렉 터 리 의 모든 항목 을 하나씩 삭제 합 니 다 (unlink). 여러 번 반복 적 으로 작업 해 야 합 니 다.rsync 에서 내용 을 삭제 할 때 새 빈 디 렉 터 리 를 만 들 고 오래된 디 렉 터 리 를 교체 하 며 비용 이 거의 들 지 않 습 니 다.
다음으로 전송:http://www.tuicool.com/articles/6Nvqem https://blog.csdn.net/liuxiao723846/article/details/51626305

좋은 웹페이지 즐겨찾기