ext4 파티션에서 40 억 개의 파일 제한을 초과하면 어떻게됩니까?


46

예를 들어, ext4 파티션에서 40 억 파일 제한을 초과하고 예를 들어 50 억 파일을 전송하면 어떻게됩니까?

답변:


79

아마도 "장치에 남은 공간 없음"오류가 표시 될 것입니다.

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

실제로 "40 억 개의 파일"보다 훨씬 빨리이 한계에 도달했습니다. 파일 시스템을 모두 확인 df -h하고 df -i남은 공간을 확인하십시오 .

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

이 예에서 파일의 평균 크기가 4K가 아닌 경우 저장 공간보다 훨씬 빨리 inode 공간이 부족합니다. 그것은 또 다른 비율을 지정하는 것이 가능하다 ( mke2fs -N number-of-inodes또는 -i bytes-per-inode-T usage-type에 정의 된대로 /etc/mke2fs.conf).


1
답변 해 주셔서 감사합니다. 언젠가 걱정됩니다. 주 파티션 (RAID 50)에 4 억 개가 넘는 파일이 있습니다. 많은 git 저장소가 있습니다. 보안이 문제가된다면
Bensuperpc

5
@ensuperpc : 많은 파일이 정기적으로 사용되지 않는 경우 (백업 목적으로 만) 각 프로젝트를 자체 tar 파일에 넣는 것을 고려할 수 있습니다. 압축 옵션을 사용하면 파일 수가 상당히 줄어들고 차지하는 공간도 줄어 듭니다.
jamesqf

27
@jamesqf 아직 사용하지 않았다면 git repack각 git 리포지토리에서 실행 하여 모든 개별 객체를 팩 파일로 결합하십시오.
user253751

13
+1 당신은 단지 touch공상을 사용 하지 않기 때문에 echo중요한 포인트와 종종 오해를 보여줍니다. 빈 파일로 디스크를 채울 수 있습니다.
rexkogitans

6
@jamesqf는 git repack,이 기능 여전히 같은 자식의 repo이며, 어떤 기능을 느슨하게하지 않는 tar이 프로젝트 또는 자식 저장소 기대하는 많은 프로그램을 읽을 수 있습니다
Ferrybig

52

한계에 도달하면 이후에 파일 작성 시도가 실패 ENOSPC하고 대상 파일 시스템에 새 파일을위한 공간이 없음을 나타냅니다.

설명하는 시나리오에서는 일반적으로 한도에 도달하면 전송이 중단됩니다.

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