백업 을 위해 rsnapshot 을 사용하려고 했지만 사용할 수없는 것으로 나타났습니다 . 디렉토리 (50gb)를 diff하고 몇 분 안에 복제 (모든 파일을 하드 링크) 할 수 있지만 약 30 분 안에 전체 디렉토리를 cp 할 수는 있지만 삭제하는 데 1 시간 이상이 걸립니다. 을 직접 사용하더라도 rm -rfv
단일 파일을 작성하는 데 최대 0.5 초가 걸리는 반면 cp
and link
명령은 즉시 완료됩니다.
rm이 왜 이렇게 느린가요? 하드 링크를 재귀 적으로 제거하는 더 빠른 방법이 있습니까? 파일을 복사하는 것이 파일을 제거하는 것보다 시간이 덜 걸린다는 것은 말이되지 않습니다.
내가 작업중 인 파일 시스템은 usb를 통해 연결되고 fuseblk 유형 (ntfs라고 생각합니다)을 통해 연결된 외부 저장 장치 드라이브입니다. 내 컴퓨터는 우분투 리눅스를 실행하고 있습니다.
상단에서 출력 :
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
답변
궁극적으로, 무엇을 하든지 부모 디렉토리 를 호출하더라도 제거하려는 모든 단일 파일 rm
에서 실행 unlink
되어야합니다 rm -r
. 제거 할 파일이 많은 경우 시간이 오래 걸릴 수 있습니다.
실행할 때 특히 시간이 많이 걸리는 두 가지 프로세스가 있습니다 rm -r
.
readdir
다음에- 에 대한 여러 번의 호출
unlink
.
모든 파일을 찾은 다음 모든 단일 파일을 제거하여 제거하는 데 시간이 오래 걸릴 수 있습니다.
디렉토리를 일정 시간 동안 사용할 수 없기 때문에이 “사용할 수 없음”을 발견 한 경우, 제거하기 전에 상위 디렉토리를 이동하는 것이 좋습니다. 이렇게하면 시간이 너무 많이 걸리지 않고 프로그램에서 다시 사용할 수 있도록 해당 이름이 비워집니다.
파일 시스템이 정말 있다고 가정 입니다 NTFS (이 질문에서 불분명), NTFS 파일의 큰 붕대를 삭제에서 매우 느린 일반적입니다. 목적에보다 적합한 파일 시스템을 사용하는 것을 고려할 수 있습니다 (다른 특정 요구 사항이없는 경우 최신 ext 파일 시스템은 삭제 성능이 상당히 좋습니다). 퓨즈 자체도 일반적으로 빠르지는 않습니다. FUSE를 사용하지 않는 방식으로이 작업을 수행 할 수 있는지 확인하는 것이 좋습니다.
답변
rm이 왜 이렇게 느린가요? 나도 몰라 그러나 나는 더 빠른 방법을 알고 있습니다.
mkdir blank
rsync -a --delete blank/ test/
업데이트 : Serverfault에 대한이 답변 에는 몇 가지 설명이 있습니다. rsync가 파일 시스템 트리의 균형을 유지하고 재조정이 필요하지 않은 특정 순서로 파일을 삭제하는 것처럼 보입니다. rm은 파일을 삭제하고 제거 될 때 많은 재조정을 일으 킵니다. 여기 에 재조정에 대한 정보가 있습니다 .
답변
글쎄, 나는 당신과 비슷한 문제가있었습니다. 당신의 “wa”가 높다는 것을 알았습니다.
iostat -x 1
디스크 사용률이 높은지 확인하려면 디스크 사용량이 많음을 의미합니다. 다른 프로세스가 디스크에 지속적으로 쓰고 있는지 확인하십시오 .
단순화를 위해
vmstat 1
b 가 높거나 r < b 인지 확인합니다 . 그것은 뭔가 잘못되었음을 나타냅니다. 귀하의 상황에서는 디스크 io가 원래의 이유라고 생각합니다.