블록 크기와 클러스터 크기에 대해 질문이 있습니다. 내가 읽은 내용을 바탕으로 다음과 같이 가정합니다.
- 블록 크기는 블록의 물리적 크기이며 대부분 512바이트입니다. 이것을 바꿀 수 있는 방법은 없습니다.
- 클러스터 크기는 운영 체제가 읽고 쓸 수 있는 최소 블록 크기입니다. ext3과 같은 새 파일 시스템을 생성하는 경우 -b 스위치를 사용하여 이 최소 블록 크기를 지정할 수 있습니다. 거의 모든 프로그램(예: dumpe2fs, mke2fs)은 블록 크기를 클러스터 크기의 이름으로 사용합니다.
다음과 같은 결과가 나오면:
$ stat test
File: `test'
Size: 13 Blocks: 4 IO Block: 2048 regular file
Device: 700h/1792d Inode: 15 Links: 1
size는 바이트 단위의 실제 공간이고, block은 물리적으로 사용되는 블록(각각 512바이트)이며, IO 블록은 FS를 생성할 때 지정한 블록 크기와 관련되어 있습니다. 이것이 맞습니까?
답변1
아마도 서로 다른 용어를 사용하는 여러 문서를 읽었기 때문에 혼란스러워하신 것 같습니다. 파일 시스템 문헌의 맥락 내에서도 "블록 크기" 및 "클러스터 크기"와 같은 용어는 보편적인 의미를 갖지 않습니다.
파일 시스템
~을 위한외부 2또는외부 3상황은 상대적으로 간단합니다. 각 파일은 일정량의 공간을 차지합니다.조각. 특정 파일 시스템의 모든 블록은 크기가 동일하며 일반적으로 1024, 2048 또는 4096바이트 중 하나입니다. N 블록에 1바이트를 더한 크기와 N+1 블록 사이의 크기를 갖는 파일 1은 N+1 블록을 차지합니다. 블록 크기는 로 지정하는 것입니다 mke2fs -b
. 별도의 클러스터라는 개념이 없습니다.
이것지방특히 MS-DOS와 이전 버전의 Windows에서는 유사한 단순 공간 할당을 사용하는 파일 시스템을 사용했습니다. ext2는 블록, FAT는 블록이라고 합니다.무리;개념은 같습니다.
일부 파일 시스템에는 더 복잡한 할당 체계가 있습니다. 고정 크기 블록이 있지만 동일한 블록을 사용하여 여러 파일의 마지막 몇 바이트를 저장할 수 있습니다. 이것은 ... 불리운다블록 재할당;라이토프스그리고BTRFS하지만 ext3이나 ext4는 그렇지 않습니다.
유용
Unix 유틸리티에서는 일반적으로 512바이트 또는 1kB와 같은 모든 크기의 단위를 나타내기 위해 "블록"이라는 단어를 사용합니다. 이 사용법은 특정 파일 시스템이나 디스크 하드웨어와 무관합니다. 당시의 디스크와 파일 시스템은 종종 512B 블록에서 작동했기 때문에 역사적으로 512B 블록이 나타났습니다. 그러나 현대의 사용법은 임의적입니다. 그러나 기존 UNIX 유틸리티 및 인터페이스에서는 여전히 512B 블록을 사용하는 경우가 있습니다.이제 1kB 청크가 일반적으로 선호됩니다.. 각 유틸리티가 사용하는 블록 크기를 확인하려면 각 유틸리티에 대한 설명서를 확인해야 합니다(일부에는 Linux와 같은 스위치가 있음 du -B
) df -B
.
GNU/Linux stat
유틸리티에서 이 blocks
숫자는 파일이 사용하는 512B 블록의 수입니다. 이 IO Block
숫자는 파일 입력 및 출력에 선호되는 크기이며 원칙적으로는 관련이 없지만 일반적으로 기본 파일 시스템의 블록 크기(또는 클러스터 크기라고 부르기를 원하는 경우 클러스터 크기)를 나타냅니다. 여기에는 블록 크기가 2048인 ext3 파일 시스템에서 한 블록을 차지하는 13바이트 파일이 있습니다. 따라서 파일은 4,512바이트 단위( "블록"이라고 함 stat
)를 차지합니다.
디스크
대부분의 디스크는 디스크를 여러 개의 디스크로 표시하는 인터페이스를 제공합니다.부서. 디스크는 개별 비트나 바이트가 아닌 전체 섹터만 쓰거나 읽을 수 있습니다. 대부분의 하드 드라이브에는 512바이트 섹터가 있지만 4kB 섹터 디스크는 몇 년 전에 등장하기 시작했습니다.
디스크 섹터 크기는 파일 시스템 블록 크기와 직접적인 관련이 없지만, 블록을 정수 개수의 섹터로 구성하면 성능이 더 향상될 수 있습니다.
¹예외 :스파스 파일공간을 절약하십시오.
답변2
파일 시스템에 크기에 관계없이 4KB unut\cluster\extent\가 있는 경우 이는 운영 체제가 하드 디스크에서 4KB 크기의 데이터를 읽고 쓴다는 의미는 아닙니다. FS 범위\클러스터\크기가 무엇이든 상관없습니다. 운영 체제는 512B 단위로 하드 디스크에서 데이터를 읽고 쓸 수 있습니다. 여기서 512B는 하드 디스크에 있는 블록의 물리적 크기입니다. 쉽게 확인하실 수 있습니다. Windows에서 ioemeter 및 perfon을 시작합니다. 그리고 그것을 스스로 보아라
클러스터 크기\단위 할당 크기가 4k인 ntfs가 있고 섹터 크기가 512B인 hdd가 있다고 가정합니다. 우리는 512B rand 쓰기 모드를 사용하여 iometer를 방출합니다. 예상한 대로 OS가 문제 없이, 읽기 IO 없이 한 번에 512B를 쓰는 것을 perfmon에서 확인할 수 있습니다. OS는 512B를 FS에 직접 씁니다. OS가 4K를 읽고 512B를 변경하고 4K를 다시 쓰는 것과 같은 일은 발생하지 않습니다. 아니요.
답변3
"블록"이라는 단어를 크래킹하면 이 질문에 대한 하나의 답변(아마도 >1일 수도 있음)에 대한 액세스 권한이 부여될 수 있다고 생각했습니다. 예전에는 "플로피 디스크"가 존재했을 때 주로 SMAL을 저장하는지 아니면 "주로 1개 이상"을 저장하는지에 대한 질문이 있었습니다. " "하드 디스크"(예: 플로피 디스크)에 대용량 파일이 있으면 수학적으로 가능한 "공간"을 낭비할 수 있기 때문입니다. 파일에는 확실히 블록("규칙"/"비용")이 필요하기 때문입니다. 나는 "섹터"가 "소프트웨어 블록"보다는 장치와 관련된 하드웨어 및 펌웨어에 더 가깝다고 생각합니다. (~파일 시스템의 디렉토리에도 "물리적" 공간이 필요하기 때문에 블록 크기가 작을수록 "디렉토리"는 더 커집니다(또는 "log"도 이름이라고 생각합니다).