어떤 이유에서인지 OS X에서 텍스트 파일을 만들면 비어 있지 않은 한 항상 최소 4kB입니다. 왜 이런거야? 1바이트의 일반 텍스트에 4,000바이트의 메타데이터가 포함될 수 있습니까?
답변1
파일 시스템의 블록 크기는 4kB여야 합니다. 파일 시스템에 포함된 파일에 데이터가 기록될 때 운영 체제는 파일에 기록될 데이터를 포함할 저장 블록을 할당해야 합니다.
일반적으로 파일 시스템이 생성되면 해당 파일 시스템 내에 포함된 스토리지는 고정 크기 블록으로 분할됩니다. 이 위키피디아 기사이 과정을 간략하게 설명해보세요.
파일의 파일 시스템의 기본 블록 크기는 4K 바이트 블록 크기여야 합니다. 파일은 1개의 4K 블록을 사용하며 블록의 1바이트에만 실제 데이터가 포함됩니다.
답변2
모든 파일 시스템에는 클러스터 또는 블록 크기가 있거나 파일을 보관하기 위해 할당할 수 있는 최소 디스크 공간이 있습니다. 실제 파일 크기가 클러스터/블록 크기보다 작더라도 파일 시스템에서는 여전히 클러스터 1개 또는 4K를 소비합니다. 클러스터 크기는 파일 시스템 및 파일 시스템 옵션에 따라 다릅니다.
다음과 같이 0바이트가 포함된 경우자일스는 지적했다.이는 일반적인 *nix 파일 시스템에서 블록/클러스터를 사용하지 않지만 하나의 inode를 사용하므로 "비어 있지 않은 경우"라는 경고에 더 잘 응답합니다.
답변3
작은 실험을 통해 이를 설명할 수 있습니다.
먼저 루트 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(4KiB)입니다. 이제 세 개의 파일을 생성해 보겠습니다. 첫 번째 파일은 0바이트, 두 번째 파일은 1바이트, 세 번째 파일은 4KiB(블록 크기)입니다.
[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블록을 차지합니다. 이는 무엇을 확인합니까?자일스가 말했다..
- 다른 두 파일은 파일 크기가 다르지만 둘 다 4*1024 = 1 4KiB ext4 블록을 차지합니다.
스파스 파일
스파스 파일은 0이 큰 덩어리로 구성된 파일입니다. 데이터는 모두 0으로 알려져 있으므로 디스크에 저장할 필요가 없습니다. 이렇게 하면 파일의 겉보기 크기가 실제로더 큰디스크의 크기보다.
인라인 데이터
일부 파일 시스템에서는 매우 작은 내용의 파일을 저장할 수 있습니다.인덱스 노드그 자체. 바라보다Unix/Linux 파일 시스템의 inode 내에 직접 데이터를 저장할 수 있습니까?.