매우 많은 수의 빈 파일을 만들어서 디스크 공간이 부족할 수 있습니까?


35

빈 텍스트 파일의 바이트 수는 0입니다.

여기에 이미지 설명을 입력하십시오

그러나, 그들 각각은 포함 메타 데이터 내 연구에 따르면,에 저장되어, 아이 노드 , 및 사용 공간을 수행하십시오 .

이것을 감안할 때 빈 텍스트 파일을 순수하게 작성하여 디스크를 채울 수 있다는 것이 논리적입니다. 이 올바른지? 그렇다면 1GB의 디스크에 몇 개의 빈 텍스트 파일을 채워야합니까?


몇 가지 검사를 수행하기 위해 실행 df -i하지만 무게가 얼마가 아니라 사용 된 inode의 %를 나타냅니다 (?).

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

답변:


40

이 출력은 28786688전체 inode를 제안한 후 루트 파일 시스템 (device /dev/sda2)에 파일을 작성하려는 다음 시도 가 리턴됩니다 ENOSPC( "장치에 남은 공간 없음").

설명 : 원래 * nix 파일 시스템 설계에서 최대 inode 수는 파일 시스템 작성시 설정됩니다. 전용 공간이 할당됩니다. 데이터를위한 공간이 부족하기 전에 inode가 부족하거나 그 반대 일 수 있습니다. 가장 일반적인 기본 Linux 파일 시스템 ext4에는 여전히이 제한이 있습니다. ext4의 inode 크기에 대한 자세한 내용은 mkfs.ext4 맨 페이지를 참조하십시오.

Linux는이 제한없이 다른 파일 시스템을 지원합니다. 에 btrfs, 공간은 동적으로 할당된다. "아이 노드 구조는 비교적 작으며 임베디드 파일 데이터 또는 확장 된 속성 데이터를 포함하지 않습니다." (ext3 / 4 는 확장 된 속성을 위해 inode 내부에 약간의 공간을 할당합니다 ). 물론 너무 많은 메타 데이터 / 디렉토리 항목을 생성하여 디스크 공간이 부족할 수 있습니다.

tmpfs는 inode가 동적으로 할당되는 또 다른 예입니다. 보고 된 최대 inode 수가 df -i실제로 이러한 파일 시스템에 어떤 의미를 갖는지 알기가 어렵습니다 . 표시된 값에는 아무런 의미가 없습니다.


"XFS는 또한 inode를 동적으로 할당합니다. JFS도 마찬가지입니다. reiserfs도 마찬가지입니다. F2FS도 마찬가지입니다. 전통적인 Unix 파일 시스템은 mkfs 시간에 정적으로 inode를 할당합니다. 그리고 ext4와 같은 최신 FS도 그 유산을 추적합니다. 규칙이 아닌 예외.

"BTW, XFS를 사용하면 inode에서 사용하는 최대 공간 백분율을 제한 할 수 있으므로 기존 파일에 추가 할 수없는 지점에 도달하기 전에 inode가 부족할 수 있습니다. FS의 경우 기본값은 25 %입니다. 1TB 미만, 최대 50TB의 파일 시스템의 경우 5 %, 그보다 큰 경우 1 %입니다.) 어쨌든 메타 데이터 (이노 드 및 익스텐트 맵)에서의이 공간 사용량은 이 답변에 대한 주석에서 df -h"" Peter Peteres 에 반영됩니다.


28786688-667980=28118708빈 파일을 만들면 실제로 inode가 부족 해지고 "시스템이 손상됩니다" 라고 말하고 있습니까?
luchonacho

1
XFS는 또한 inode를 동적으로 할당합니다. JFS도 마찬가지입니다. reiserfs도 마찬가지였습니다. 그렇게 F2FS을 . 전통적인 Unix 파일 시스템은 mkfs 시간에 정적으로 inode를 할당하므로 ext4와 같은 최신 FS도 그 유산을 추적하지만 요즘은 예외가 아닙니다. (설치된베이스에 의해 가중치를 부여하지 않는 한, * nix 시스템의 디스크에 현재있는 대부분의 파일 시스템은 정적으로 inode를 할당했다고 말할 수있을 것입니다.)
Peter Cordes

BTW, XFS를 사용하면 inode에서 사용하는 최대 공간 백분율을 제한 할 수 있으므로 기존 파일에 추가 할 수없는 지점에 도달하기 전에 inode가 부족할 수 있습니다. (기본값은 1TB 미만인 FS의 경우 25 %, 최대 50TB 인 파일 시스템의 경우 5 %, 그보다 큰 경우 1 %입니다.) 어쨌든 메타 데이터 (노드 및 익스텐트 맵) df -h에서의이 공간 사용량은 @luchonacho 에 정기적으로 반영됩니다 .
Peter Cordes

26

빈 파일을 만들려면 다음을 사용하십시오.

  • 파일 당 하나의 inode;
  • 파일 당 하나이지만 추가 된 디렉토리 항목.

사용 가능한 inode 수는 종종 파일 시스템이 생성 될 때 결정되며 변경할 수 없습니다 (Btrfs 또는 XFS와 같은 일부 파일 시스템은 inode를 동적으로 할당 함). 이것이에 의해 측정 된 것 df -i입니다. inode가 부족하면 사용 가능한 디스크 공간이 있어도 새 파일이나 디렉토리를 만들 수 없습니다.

사용 가능한 디스크 공간에서 디렉토리 항목도 공간을 차지합니다. 디렉토리의 크기를 보면이를 확인할 수 있습니다. 항상 블록 크기의 배수이며 디렉토리에 많은 파일이 포함되어 있으면 크기가 커집니다. 디스크 공간이 부족한 경우 사용 가능한 inode가 있더라도 "full"디렉토리 ( 예 : 새 파일을 추가하면 새 블록이 할당되는 위치)에 새 파일이나 디렉토리를 만들지 못할 수 있습니다.

따라서 빈 파일 만 사용하여 디스크 공간이 부족할 수 있습니다.


그래서 100 % inode 사용에 도달하기에 충분한 빈 파일을 만들어야합니까?
luchonacho

@luchonacho 예, 효과적으로 inode 당 하나의 빈 파일입니다.
Stephen Kitt

또한 그 위에 공간을 추가 할 수있는 확장 된 속성에 유의하십시오. 예를 들어, 디렉토리에 기본 ACL이 많은 경우 파일을 작성하면 해당 ACL을 저장할 공간이 필요합니다.
Stéphane Chazelas

알았어 내 브라우저에서 렌더링 된 글꼴과 고정 너비 글꼴 모두 이상하게 보입니다. 호기심에서 어떻게 삽입합니까? 키보드에 해당 문자와 ​​U + 0022에 대한 다른 키가 있습니까?
Stéphane Chazelas

고맙게도 호기심으로 영국 키보드 레이아웃에 있는지 확인하고 실제로 AltGr + Shift + V / B (교대없이 큰 따옴표)에 있는지 확인했습니다. 그래도 U + 0022를 고수하겠습니다.
Stéphane Chazelas

7

순수한 논리 논쟁 :

파일 이름은 0이 아닌 양의 바이트로 구성됩니다. 절대 최대량의 파일 이름을 허용하도록 설계된 가상 파일 시스템에서 이론상 최대 압축을 사용하더라도 각 파일 이름은 여전히 실제 디스크 어딘가 에서 적어도 1 비트를 소비 합니다. 아마도 더 많지만 "파일 당 1 비트"가 최소입니다.

플래터에 맞을 수있는 비트의 양을 계산하십시오. 이는 이론적으로 최대 (빈 또는 비빈) 파일을 저장할 수있는 최대 파일 수입니다.

대답은 '그렇다'입니다. 빈 파일을 계속 추가하면 사용중인 스토리지에 관계없이 공간이 부족하게됩니다. 분명히이 방식으로 계산 된 최대 값보다 훨씬 빨리 닳게됩니다.


0

공간이 부족한 것과 똑같이 리눅스에서 inode가 부족할 수 있습니다.

당신은 당신의 껍질에서 이와 같은 것을 시도 할 수 있습니다 n=0; while :; do touch $n; let n=n+1; done

가상 머신에서 실행해야합니다. 그렇지 않으면 inode가 매우 빠릅니다.


그 명령은 무엇입니까?
luchonacho

그것은 진정한 무한 루프로 시작하여 모든 차례에 0에서 1 2 3까지의 정수 인 파일 이름을 만듭니다 ... 결국 파일 시스템의 모든 inode를 사용할 수있는 충분한 파일을 만듭니다.
in1t3r

1
/ home 파티션에서 독립적 인 경우 / 파티션에서 해당 명령을 실행하면 / 파티션에 더 이상 / home 파티션에 쓸 수없는 문제가 발생하지 않습니다. 내 제안은 inodetest cd라는 디렉토리를 만들고 더 이상 파일 시스템에서 파일을 만들 수 없다는 오류가 표시되면 명령을 실행하십시오 .Ctrl + C를 누르고 rm -fr inodetest빈 파일을 모두 제거하고 정상적으로 작동하도록 실행하십시오. :)
in1t3r

0

빈 파일을 만들어 디스크를 채울 수 없습니다. 디스크에는 여전히 새 파일을위한 충분한 공간이 있습니다. 그러나 네, 파일 시스템의 유한 한 무료 inode 공급을 소진 할 수 있습니다.이 시점에서 디스크가 많이 사용 된 공간이더라도 실제로는 비어있는 경우에도 새 파일을 만들 수 없습니다. 디스크가 아닌 파일 시스템의 모든 inode 목록 일뿐입니다. 따라서 파일 시스템은 가득 차고 디스크는 실제로 비어 있습니다. 디스크의 inode-table 사용 공간은 파일을 추가 할 때 테이블이 커지지 않습니다. 줄을 쓸 때 종이가 커지지 않는 것처럼.

(Baard Kopperud의 답변에 대한 답변)


같은 것을 말하는 또 다른 대답 필요한지 확실하지 않습니까?
Jeff Schaller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.