어떤 이유로 OS X에서 텍스트 파일을 만들 때 비어 있지 않으면 항상 4kB 이상입니다. 왜 이런거야? 일반 텍스트 1 바이트에 대해 4,000 바이트의 메타 데이터가있을 수 있습니까?
:P
어떤 이유로 OS X에서 텍스트 파일을 만들 때 비어 있지 않으면 항상 4kB 이상입니다. 왜 이런거야? 일반 텍스트 1 바이트에 대해 4,000 바이트의 메타 데이터가있을 수 있습니까?
:P
답변:
파일 시스템의 블록 크기는 4 kB 여야합니다. 파일 시스템에 포함 된 파일에 데이터가 기록 될 때 운영 체제는 파일에 기록 될 데이터를 포함하도록 스토리지 블록을 할당해야합니다.
일반적으로 파일 시스템이 작성 될 때 해당 파일 시스템에 포함 된 스토리지는 고정 된 크기의 블록으로 분할됩니다. 이 Wikipedia 기사 는이 과정을 간략하게 설명합니다.
이 파일에 대한 파일 시스템의 기본 블록 크기는 4K 바이트 블록 크기 여야합니다. 이 파일은 1 4K 블록을 사용하고 있으며 해당 블록 내에서 1 바이트 만 실제 데이터를 포함합니다.
모든 파일 시스템에는 클러스터 또는 블록 크기 또는 파일을 보유하기 위해 할당 할 수있는 최소 디스크 공간이 있습니다. 실제 파일 크기가 클러스터 / 블록 크기보다 작더라도 파일 시스템에서 하나의 클러스터 또는 4K를 계속 사용합니다. 클러스터 크기는 파일 시스템 및 파일 시스템 옵션에 따라 다릅니다.
Gilles가 지적한 것처럼 0 바이트를 포함하면 블록 / 클러스터 0 개를 사용하지만 일반적인 * nix 파일 시스템에서는 1 개의 inode를 사용하므로 "공백이 아닌 한"경고에 더 잘 응답합니다.
이것을 설명하는 데 도움이되는 약간의 실험 :
먼저, 루트 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으로 알려져 있기 때문에 디스크에 데이터를 저장할 필요가 없습니다. 이런 방식으로 파일의 겉보기 크기는 실제로 디스크 크기보다 클 수 있습니다 .
일부 파일 시스템에서는 내용이 매우 작은 파일을 inode 자체에 저장할 수 있습니다 . Unix / Linux 파일 시스템의 inode 내에 직접 데이터를 저장할 수 있습니까?를 참조하십시오 . .