빈 파일을 많이 생성하면 디스크 공간이 소모되나요?

빈 파일을 많이 생성하면 디스크 공간이 소모되나요?

우리 모두 알고 있듯이 빈 텍스트 파일의 바이트 수는 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

답변1

이 출력은 28786688전체 inode를 제안하며, 이후 루트 파일 시스템(장치)에 파일을 생성하려는 다음 시도는 "장치에 남은 공간이 없습니다.")를 /dev/sda2반환합니다 .ENOSPC

설명: 원래 *nix 파일 시스템 설계에서는 파일 시스템이 생성될 때 최대 inode 수가 설정되었습니다. 전용 공간이 할당됩니다. 데이터 공간이 부족해지기 전에 inode가 부족할 수 있으며, 그 반대의 경우도 마찬가지입니다. 대부분의 일반적인 기본 Linux 파일 시스템에는 ext4여전히 이러한 제한이 있습니다. ext4의 inode 크기에 대한 자세한 내용은 mkfs.ext4 맨페이지를 참조하세요.

Linux는 이러한 제한 없이 다른 파일 시스템을 지원합니다. 에서는 btrfs공간이 동적으로 할당됩니다. "inode 구조는 상대적으로 작으며 내장된 파일 데이터나 확장된 속성 데이터를 포함하지 않습니다."(외부 3/4)확장된 속성을 위해 인덱스 노드 내에 일부 공간을 할당합니다.). 물론 메타데이터/카탈로그 항목을 너무 많이 생성하면 디스크 공간이 부족해질 수 있습니다.

생각해보세요. tmpfs는 동적으로 할당된 inode의 또 다른 예입니다. df -i실제로 이러한 파일 시스템에 대해 보고된 최대 inode 수가 무엇을 의미하는지 알기는 어렵습니다 . 표시된 값에 아무런 의미를 부여하지 않습니다.


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

"그런데 XFS를 사용하면 inode에서 사용하는 최대 공간 비율에 대한 제한을 설정할 수 있으므로 기존 파일에 추가할 수 없게 되기 전에 inode가 부족해질 수 있습니다. (FS의 경우 기본값은 25%입니다.) 1TB, 50TB 미만 파일 시스템의 경우 5%, 50TB보다 큰 파일 시스템의 경우 1%) 그럼에도 불구하고 메타데이터(inode 및 범위 맵)의 공간 사용량은 일반 df -h"-피터 코르데스이 답변에 대한 의견에서

답변2

빈 파일을 생성하려면 다음을 사용하세요.

  • inode, 파일당 하나씩;
  • 추가 디렉터리 항목(파일당 하나씩이지만 집계됨)

사용 가능한 inode 수는 일반적으로 파일 시스템이 생성될 때 결정되며 변경할 수 없습니다. 일부 파일 시스템(예: Btrfs 또는 XFS)은 inode를 동적으로 할당합니다. 이것이 측정된 것입니다 df -i. inode가 소진되면 여유 디스크 공간이 있어도 새 파일이나 디렉터리를 생성할 수 없습니다.

디렉토리 항목도 사용 가능한 디스크 공간을 차지합니다. 디렉토리 크기를 보면 이를 알 수 있습니다. 이는 항상 블록 크기의 배수이며 디렉토리에 많은 수의 파일이 포함되면 크기가 증가합니다. 디스크 공간이 부족하면 "전체" 디렉터리(, 새 파일을 추가하면 새 블록을 할당해야 함) 사용 가능한 inode가 있더라도 마찬가지입니다.

그렇습니다. 빈 파일만 사용하여 디스크 공간을 사용할 수 있습니다.

답변3

순수한 논리적 주장:

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

플래터에 들어갈 수 있는 비트 수를 계산합니다. 이는 플래터에 저장할 수 있는 이론적 최대 파일 수(비어 있든 없든)입니다.

대답은 '예'입니다. 빈 파일을 계속 추가하면 결국에는 어떤 스토리지를 사용하더라도 공간이 부족해지게 됩니다. 분명히 이렇게 계산된 최대치보다 빨리 소진될 것이지만, 소진될 것입니다.

답변4

빈 파일을 생성하여 디스크를 채울 수는 없습니다. 디스크에는 여전히 새 파일을 위한 충분한 공간이 있습니다. 하지만 그렇습니다. 파일 시스템의 제한된 사용 가능한 inode 공급이 소진될 수 있습니다. 이 시점에서는 새 파일을 생성할 수 없습니다(사용된 공간 측면에서 디스크가 실제로 비어 있는 경우에도 마찬가지입니다). 디스크가 아닌 파일 시스템의 inode 목록이 완전히 사용되었다는 것입니다. 따라서 파일 시스템은 가득 차 있지만 디스크는 실제로 비어 있습니다. inode 테이블은 디스크 공간을 사용하지만, 파일을 추가해도 테이블은 늘어나지 않습니다. 마치 종이에 글을 쓸 때 커지지 않는 것과 같습니다.

(댓글에서 Baard Kopperud의 답변)

관련 정보