![수백만 개의 작은 파일을 이동하면 "공간 부족" 오류가 발생함](https://linux55.com/image/125360/%EC%88%98%EB%B0%B1%EB%A7%8C%20%EA%B0%9C%EC%9D%98%20%EC%9E%91%EC%9D%80%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%A9%B4%20%22%EA%B3%B5%EA%B0%84%20%EB%B6%80%EC%A1%B1%22%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A8.png)
한 파티션에서 다른 파티션으로 약 450만 개의 파일(크기 범위 100 - 1000바이트)을 이동하고 싶지 않습니다. 총 폴더 크기는 약 2.4GB입니다.
먼저 압축을 풀고 압축된 파일을 새 위치로 옮겨 보았습니다. 최대 800,000개의 파일만 붙여넣을 수 있으며 "공간 부족" 오류가 표시됩니다.
다음으로 mv 명령을 시도했는데 결과적으로도 같은 상황이 발생했습니다.
rsync를 사용해도 동일한 오류가 발생하며 ~800,000개의 파일만 이동됩니다.
디스크 가용성 상태를 확인했는데 한도보다 훨씬 낮습니다. (새 파티션에는 약 700GB의 여유 공간이 있으며 약 2.4GB의 공간이 필요합니다.)
파티션의 사용 가능한 inode를 확인했는데 동일합니다. 가능한 최대 191M inode 중 약 800k만 사용합니다. (실제로는 'mkfs.ext4 -Tsmall /dev/sdb3'로 파티션을 포맷했습니다.)
여기서 무엇이 잘못되었는지 모르겠습니다. 한 번에 약 800,000개의 파일만 복사하거나 이동할 수 있습니다.
답변1
오류의 원인을 찾았습니다(다른 포럼에서 찾았습니다). 이 오류는 "dir_index" 매개변수에 의해 활성화되는 ext4에서 사용되는 해싱 알고리즘으로 인해 발생합니다. 저에게는 해시 충돌이 너무 심해서 다음을 사용하여 비활성화했습니다.
tune2fs -O "^dir_index" /dev/sdb3
단점은 인덱스가 없기 때문에 파티셔닝이 이전보다 느리다는 것입니다.
문제에 대한 추가 정보: ext4: 신비한 "장치에 남은 공간이 없습니다" 오류