이렇게 큰 디렉토리를 삭제하는 방법은 무엇입니까?
stat session/
File: ‘session/’
Size: 321540096 Blocks: 628040 IO Block: 4096 directory
Device: 903h/2307d Inode: 11149319 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-09-29 14:34:40.910894275 +0200
Modify: 2022-09-29 14:35:09.598400050 +0200
Change: 2022-09-29 14:35:09.598400050 +0200
Birth: -
디렉터리 크기(내용이 아니라 디렉터리 항목 자체)가 300MB를 넘습니다. inode 수가 1,100만 개를 초과합니다.
이 디렉터리에는 하위 디렉터리가 없으며 단지 파일 묶음만 있습니다.
일반적인 명령은 작동하지 않습니다. 나는 이것을 시도했습니다 :
rsync -a --delete empty_dir/ session/
rm -rf session
find . -type f --delete
내가 ls -f1
그것에 부딪히면 그냥 멈춰 있습니다.
내가 mv -- * ../.tmp_to_delete
그것에 부딪히면 그냥 멈춰 있습니다.
내가 du
그것에 부딪히면 그냥 멈춰 있습니다.
현재 rsync --delete는 최대 7MB/s의 읽기 속도로 이틀 동안 실행되었으며 디렉터리의 stat 출력에는 변화가 없습니다.
디렉토리가 너무 큰 것이 문제인 것 같습니다.
답변1
해결됨: 4일 후에 rsync가 작업을 완료했습니다. 모든 파일이 삭제되었습니다. 그러나 단일 파일을 삭제하기 전에 디렉터리 정보를 읽는 데 최소 2일이 걸립니다.
비슷한 문제가 발생할 수 있는 사람을 위한 정보는 다음과 같습니다.화면을 사용하고 인내심을 가지세요.
답변2
홈 디렉토리를 자체 파일 시스템에 넣습니다. 모든 파일을 삭제하지 말고 마운트 해제하고 파일 시스템을 다시 생성한 후 빈 파일 시스템을 마운트하십시오.
답변3
응용 프로그램이 디렉터리에 액세스하면 파일을 삭제하는 데 시간이 더 오래 걸립니다. 디렉터리 자체를 다른 위치(동일 볼륨!)로 이동하고 새 디렉터리를 만드는 것이 도움이 될 수 있습니다. 그러나 응용 프로그램이 계속 실행 중인 경우 큰 디렉터리에 대한 핸들이 있을 수 있으므로 새 디렉터리를 사용하지 않을 수 있습니다.
그래서:
- 애플리케이션 중지
- 디렉토리 이동
- 새 디렉터리 만들기
- 신청 시작
- 파일을 포함하여 이전 디렉터리의 파일 삭제