디렉토리 크기를 줄이거 나 재설정 하시겠습니까?


11

디렉토리 항목을 축소하는 방법이 있습니까?

내 dovecot maildir 디렉토리의 크기 가 기본 4096 에서 몇 메가로 증가했으며 디스크 할당량이 엉망입니다.

내가 찾은 유일한 방법은 디렉토리를 삭제하고 다시 만드는 것입니다. 나는 어딘가에 마법의 기능이 있기를 바라고 있습니다. 수동으로 코딩 된 어셈블러를 제외하고는 무엇이든 열려 있습니다.

편집 : 후손을 위해, dirents> 4096을 찾기 위해 :

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

답변:


6

수백만 개의 파일이있는 디렉토리의 rm 도 참조하십시오 . 접선 적으로 관련되어 있지만 여기서 논의합니다.

내가 아는 한, 적어도 ext2 / 3에서는 아니요, 삭제 + 재생성 부족으로 축소 할 수있는 (온라인) 방법이 없습니다. 언 마운트 된, 몇몇 소스는 e2fsck -D그 옵션에 대한 개인적인 경험을 주장 할 수는 없지만 효과가 있다고 제안 합니다.

더 읽을 거리에 대한 참고 자료 :


1
첫 번째 링크는 특히 도움이되었다 : 내 특별히 문제 (메일 서버), 테드 TSO가 대화에에 무게는 사실 꽤 멋진가 해결)
mikewaters을

3

나는 최근에 부풀린 후에 크기를 줄이기 위해 NFS 디렉토리를 삭제하고 다시 만들어야했습니다. 그 과정에서 rsync 및 하드 링크를 사용 하여이 작업을 수행하는 상당히 효율적인 방법을 찾았습니다. 이 방법을 사용하면 실제 파일을 복사하지 않아도 동일한 내용으로 디렉토리를 다시 만들 수 있습니다.

유지 관리 기간 동안이 작업을 수행하려면 가동 중지 시간이 필요했기 때문에 재 구축 된 디렉토리를 가능한 빨리 사용 가능하게하는 것이 중요했습니다. 단순성이 더 중요한 경우, 첫 번째 이동 명령을 소스 디렉토리에서 'rm -rf'로 변경하고 다른 'rm -rf'명령을 건너 뛰십시오.

더 큰 프로세스에서 이러한 명령을 추출하고 디렉토리 이름을 추상화했기 때문에 해당 번역에서 실수를 한 경우 사과드립니다.

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

그런 다음 나중에 디렉토리를 제거합니다. 크기에 따라 더 정교한 기술을 사용해야 할 수도 있습니다. 예를 들어 빈 디렉토리를이 디렉토리에 동기화하기 위해 --delete 플래그와 함께 rsync를 사용하는 것이 더 효율적일 수 있습니다.

rm -rf /tmp/deleteme/

2

나는 이것을 이렇게 할 것입니다.

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

어디 olddir이 디렉토리입니다 당신은 축소 할 NEWDIR을 하고 tempname은 일시적으로 파일 이름입니다

cp -al의 콘텐츠에 대한 링크 생성 olddir 에서 NEWDIR 하고 다음 세 가지 명령이 NEWDIR 및 정리로 교환합니다.


멋진. cp -l에 대해 전혀 알지
못함
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.