왜 텍스트 파일이 4kB입니까?


47

어떤 이유로 OS X에서 텍스트 파일을 만들 때 비어 있지 않으면 항상 4kB 이상입니다. 왜 이런거야? 일반 텍스트 1 바이트에 대해 4,000 바이트의 메타 데이터가있을 수 있습니까?

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


16
4096 바이트, 4000이 아닙니다.
기계 달팽이

8
@Mechanicalsnail 4095. 실제 데이터의 1 바이트를 잊어 버렸습니다
Tobias Kienzler

5
@ Mechanicalsnail 그것은 윤년, 그렇지 않습니까? xkcd.com/394 :P
tkbx

답변:


52

파일 시스템의 블록 크기는 4 kB 여야합니다. 파일 시스템에 포함 된 파일에 데이터가 기록 될 때 운영 체제는 파일에 기록 될 데이터를 포함하도록 스토리지 블록을 할당해야합니다.

일반적으로 파일 시스템이 작성 될 때 해당 파일 시스템에 포함 된 스토리지는 고정 된 크기의 블록으로 분할됩니다. 이 Wikipedia 기사 는이 과정을 간략하게 설명합니다.

이 파일에 대한 파일 시스템의 기본 블록 크기는 4K 바이트 블록 크기 여야합니다. 이 파일은 1 4K 블록을 사용하고 있으며 해당 블록 내에서 1 바이트 만 실제 데이터를 포함합니다.


10
주석 : Windows에서는 실제 파일 크기가 기본적으로 표시되고 디스크 크기는 옵션 창에 표시됩니다.
Joe Z.

블록이 다른 파일을 수용 할 수 있습니까?
sudeepdino008

@ sudeepdino008 아니오, 각 파일에 대해 적어도 하나의 블록 (Linux의 ext 파일 시스템은 하나의 블록에 여러 파일을 넣는 옵션을 가지고 있지만, 이는 예외입니다)
Ro-ee

13

모든 파일 시스템에는 클러스터 또는 블록 크기 또는 파일을 보유하기 위해 할당 할 수있는 최소 디스크 공간이 있습니다. 실제 파일 크기가 클러스터 / 블록 크기보다 작더라도 파일 시스템에서 하나의 클러스터 또는 4K를 계속 사용합니다. 클러스터 크기는 파일 시스템 및 파일 시스템 옵션에 따라 다릅니다.

Gilles가 지적한 것처럼 0 바이트를 포함하면 블록 / 클러스터 0 개를 사용하지만 일반적인 * nix 파일 시스템에서는 1 개의 inode를 사용하므로 "공백이 아닌 한"경고에 더 잘 응답합니다.


6
"파일 크기가 0 바이트 인 경우에도 여전히 하나의 클러스터를 소비합니다."실제로 아니오 : 일반적인 유닉스 파일 시스템에서 빈 파일은 하나의 inode와 0 개의 블록을 소비하며 블록과 다른 클러스터의 개념은 없습니다.
Gilles 'SO- 악의를 멈추십시오'

8

이것을 설명하는 데 도움이되는 약간의 실험 :

먼저, 루트 ext4 (LVM) 파티션의 실제 블록 크기가 무엇인지 봅시다 :

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

예상대로 4096 (4 KiB)입니다. 이제 세 개의 파일을 만듭니다. 첫 번째는 0 바이트이고 두 번째는 1 바이트이며 세 번째는 4 KiB (블록 크기)입니다.

[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096


이제 ls디렉토리입니다. 이 -s옵션을 사용하여 할당 된 크기 (가장 왼쪽 열)를 1024 바이트 "블록"수로 표시합니다.
(ls는 실제 블록 크기가 4096이라는 것을 알지 못합니다. 지정할 수는 --block-size있지만 모든 값을 해당 값으로 조정 하며 실제 파일 크기도 바이트 단위로보고 싶습니다) .

[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root    0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root    1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin

여기에 두 가지가 있습니다.

  • 0 바이트 파일은 파일 시스템에서 0 블록을 차지하여 Giles가 말한 것을 확인합니다 .
  • 다른 두 파일의 파일 크기가 다르더라도 4 * 1024 = 하나의 4KiB ext4 블록을 차지합니다.

스파 스 파일

스파 스 파일은 큰 블록이 0 인 파일입니다. 데이터가 모두 0으로 알려져 있기 때문에 디스크에 데이터를 저장할 필요가 없습니다. 이런 방식으로 파일의 겉보기 크기는 실제로 디스크 크기보다 수 있습니다 .

인라인 데이터

일부 파일 시스템에서는 내용이 매우 작은 파일을 inode 자체에 저장할 수 있습니다 . Unix / Linux 파일 시스템의 inode 내에 직접 데이터를 저장할 수 있습니까?를 참조하십시오 . .


예, 파일 시스템 내부의 파일과 스토리지 관련 정보를 저장하는 데 파일 시스템이 사용하는 크기는 4k입니다. 블록의 시작부터 파일의 색인, 블록의 색인 및 파일이 사용하는 메모리의 크기와 같은 것들이 4k를 차지하는 것으로 저장됩니다. 이 정보는 파일 시스템에서 텍스트 파일을 참조하는 데 사용됩니다.
pvn

2
이것은 올바르지 않습니다. 언급 한 파일 메타 데이터는 4KiB를 "먹지"않습니다. 이러한 구조는 파일 시스템 포맷 오버 헤드의 일부입니다. 증거는 위의 답변을 참조하십시오. 당신이 말한 것이 사실이라면 내 4096 바이트 파일에는 두 개 이상의 블록이 필요합니다.
Jonathon Reinhart

파일 시스템에서 파일에 대한 포인터 (세그먼트 번호, blk 번호)는 저장해야하는 항목이며 하나의 블록을 할당해야합니다. 텍스트 파일에 이미 할당 된 첫 번째 블록에 맞는 내용이 매우 적은 경우 두 번째 블록 할당이 필요하지 않습니다. 4k 전체가 메타 데이터에 사용되지 않으며 일부 내부 조각화가 발생한다는 데 동의합니다.
pvn

2
4 KiB 블록 크기 중 어느 것도 메타 데이터에 사용 되지 않는다고 말하고 있습니다. 내 예가 그것을 증명한다고 생각합니다.
Jonathon Reinhart

2
@ pvn : Jonathon이 맞습니다. 메타 데이터는 파일의 inode에 저장되며 파일 데이터를 저장하는 데 사용되는 블록과는 별개입니다.
기계 달팽이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.