motion
디스크가 가득 찰 때까지 유틸리티를 사용하여 JPEG 파일을 로드할 수 있는 디렉터리가 있습니다 . 그러다가 "수천 개의 파일이 포함된 대용량 디렉터리를 효율적으로 삭제"를 읽고 jpeg 파일을 삭제하고 디렉터리를 정리해야 한다는 아이디어를 얻었습니다. 그 이후에는 파일 수가 약 10~20개이지만 해당 디렉터리의 파일 이름을 보는 것은 여전히 매우 느립니다.
문제는 이 디렉토리에 다시 액세스할 수 있게 하려면 어떻게 해야 합니까?
답변1
어쨌든 ext4에서는 할 수 없습니다.
디렉토리가 커지면 ext4는 디렉토리 크기(즉, 내용의 크기가 아닌 디렉토리 자체의 크기)를 축소하지 않습니다. AFAIK, 이는 여러 (대부분?) 다른 fs 유형에 해당되지만 전부는 아닙니다. 이는 파일이 삭제되거나 이동된 경우에도 디렉터리에 수천 또는 수백만 개의 파일이 포함되어 있는 일부 파일 시스템의 성능에 심각한 영향을 미칠 수 있습니다.
그런데 디렉터리에 많은 수의 파일이 포함되어 있으면 모든 파일 시스템에서 심각한 성능 문제가 발생하는 것은 아닙니다(IIRC, 이는 xfs에서는 문제가 아니며 ext3 또는 ext2에서보다 ext4에서는 문제가 적습니다).
해결 방법은 내용을 동일한 이름을 가진 새 디렉터리로 이동하는 것입니다. 예를 들어:
mv dir dir.old
mkdir dir
chmod --reference=dir.old/ dir/
chown --reference=dir.old/ dir/
mv dir.old/* dir/
rmdir dir.old
chmod
새 chown
디렉토리 에정확히이전 버전과 소유자, 그룹 및 권한이 동일합니다. ACL을 사용하는 경우 ACL도 복사해야 합니다.
참고: 디렉터리가 실제로 파일 시스템의 탑재 지점인 경우에는 작동하지 않습니다. 파일 시스템의 최상위 디렉토리를 축소하는 유일한 방법인 AFAIK는 백업하고, mkfs로 다시 포맷하고, 복원하는 것입니다.
고쳐 쓰다:이 질문을 닫는 두 번째 중복 링크는 fs umount
를 사용하여 이러한 옵션의 기능에 대한 자세한 내용을 보려면 참고자료를 참조하세요.e2fsck -C0 -f -D /dev/XXX
man e2fsck
또한 참고: backup-reformat-restore를 사용하든지 mv
backup-reformat-restore를 사용 fsck
하든 디렉토리와 그 안의 파일이 어떤 프로세스에서도 사용되지 않을 때 이 작업을 수행해야 합니다. 디렉터리의 파일을 사용하는 모든 프로세스를 중지합니다. 필요한 경우 단일 사용자/긴급 모드로 재부팅합니다.
답변2
SSD를 사용하는 경우 잘라서 사용해야 합니다. $ fstrim -vvv -a
하드 드라이브라면 어떤 일이 일어날지 상상할 수 없습니다!