![블록의 크기](https://rvso.com/image/1346168/%EB%B8%94%EB%A1%9D%EC%9D%98%20%ED%81%AC%EA%B8%B0.png)
플래시 드라이브가 있는데 fdisk
. 삽입하고 확인해 dmesg
보니 마운트가 되어있는 것을 볼 수 있어서 무슨 내용이 보고되어 있는지 /dev/sdb1
달려가 보았습니다 .fdisk
/dev/sdb
mike@mike-Qosmio-X770:~$ sudo fdisk -l
[sudo] password for mike:
Disk /dev/sdb: 127 MB, 127926272 bytes
16 heads, 32 sectors/track, 488 cylinders, total 249856 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b3ee723
Device Boot Start End Blocks Id System
/dev/sdb1 * 32 249854 124911+ b W95 FAT32
내가 아는 한, 드라이브는 128MB FAT32 형식의 플래시 드라이브이며 파티션이 1개만 있습니다. "32"에서 시작합니다(아마도 일부 FTL에서는 0-31이 사용됨).
"섹터"의 크기는 512바이트이고 249,856개의 섹터(총 122MB)가 있다고 보고되어 있습니다.
이제 실린더, 헤드, 섹터/트랙 수에 대해 혼란스러워졌습니다. 실린더/헤드가 자기 디스크 저장 유형과 관련이 있다는 것을 알고 있습니다. 플래시 장치와 관련하여 이에 대한 의미가 있습니까? 아니면 fdisk
비자성 저장 매체에 아무런 의미가 없는 "남은" 정보일까요 ? 후자라면 왜 가치를 부여합니까?
두 번째 질문, 블록의 "크기"는 얼마입니까? :
Blocks
124911+
+
그리고 블록 수 뒤 의 의미는 무엇입니까 ?
답변1
블록의 크기
3차원 트랙(모든 디스크의 동일한 트랙)을 원통이라고 합니다. 각 트랙은 63개 섹터로 구분됩니다. 각 섹터에는 512바이트의 데이터가 포함됩니다. 따라서 파티션 테이블의 블록 크기는 64개 헤드 * 63개 섹터 * 512바이트입니다... 1024로 나눈 값입니다... :-)
Linux에서 블록 크기를 참조할 때마다 거의 항상 1024바이트입니다.- Linux는 버퍼 캐시 및 모든 것에 대한 기본 단위로 1024바이트 블록을 사용합니다. 일부 파일 시스템은 다른 세분성을 사용하기 때문에(예: 일반 크기의 ext3 파일 시스템에서) 파일 시스템별 드라이버에서만 그렇지 않은 경우가 있습니다. 파일 시스템 블록 크기는 일반적으로 4096바이트입니다. 그러나 파일 시스템 블록 크기를 거의 볼 수 없습니다. 실제로 이를 확인하는 거의 유일한 방법은 커널 해커가 되거나 dumpe2fs와 같은 프로그램을 실행하는 것입니다.
문제는 명심해야 할 네 가지 별개의 단위가 있다는 것입니다. 설상가상으로 이 유닛 중 두 개가 같은 이름을 가지고 있습니다. 다음은 다양한 단위입니다.
- 하드웨어 블록 크기, "섹터 크기"
- 파일 시스템 블록 크기, "블록 크기"
- 커널 버퍼 캐시 블록 크기, "블록 크기"
- 파티션 테이블 블록 크기, "실린더 크기"
파일 시스템 블록 크기와 버퍼 캐시 블록 크기를 구별하기 위해 FAT 용어를 따르고 파일 시스템 블록 크기에 "클러스터 크기"를 사용하겠습니다.
섹터 크기는 하드웨어가 처리하는 단위입니다. 이는 다양한 하드웨어 유형에 따라 다르지만 대부분의 PC 스타일 하드웨어(플로피, IDE 디스크 등)는 512바이트 섹터를 사용합니다.
클러스터 크기는 파일 시스템이 사용하는 할당 단위이며 조각화의 원인입니다. 이에 대해 알고 계실 것입니다. 적당한 크기의 ext3 파일 시스템에서는 일반적으로 4096바이트이지만
dumpe2fs
. 이들은 일반적으로 "라고도 함을 기억하세요.블록", 내가 그들을 지칭하는 것은클러스터여기. 클러스터 크기는st_blksize
프로그램이 파일의 실제 디스크 사용량을 계산할 수 있도록 상태 버퍼에 반환되는 것입니다.블록 크기는 커널이 저장 장치(따라서 "블록 장치"라는 이름)에서 읽은 섹터를 캐시할 때 내부적으로 사용하는 버퍼의 크기입니다. 이는 커널에서 가장 원시적인 형태의 저장소이므로 모든 파일 시스템 클러스터 크기는 이의 배수여야 합니다. 이 블록 크기는 사용자 공간 프로그램에서 거의 항상 참조되는 크기이기도 합니다. 예를 들어, -h 또는 -H 옵션 없이 실행하면
du
파일이 차지하는 블록 수를 반환합니다.df
또한 이러한 블록의 크기를 보고하고, 출력의 "블록" 열도fdisk -l
이 유형입니다. 가장 일반적으로 "블록"이라고 불리는 것입니다. 두 개의 디스크 섹터가 각 블록에 맞습니다.실린더 크기는 파티션 테이블과 BIOS에서만 사용됩니다(그리고 BIOS는 Linux에서 사용되지 않습니다).
섹터 0-31
처음 32개 섹터에 대한 질문에 답하기 위해 플래시 드라이브는 FAT 형식의 장치이므로 FAT 파일 시스템 정의를 보면 FAT 파일 시스템이 네 가지 다른 섹션으로 구성되어 있음을 알 수 있습니다.
a) 유보 부문
b) 파일 할당 테이블(FAT) 영역
c) 루트 디렉토리 영역
d) 데이터 영역.
예약된 부문, 맨 처음에 있는 섹터는 (이 경우) 0-31 섹터입니다.
첫 번째 예약된 섹터(논리 섹터 0)는부트 섹터(일명 VBR(볼륨 부트 레코드)). 이라는 영역이 포함되어 있습니다.BIOS 매개변수 블록(일부 기본 파일 시스템 정보, 특히 해당 유형 및 다른 섹션의 위치에 대한 포인터 포함) 일반적으로 운영 체제의 부트 로더 코드를 포함합니다.
부트 섹터의 중요한 정보는드라이브 매개변수 블록(DPB)DOS와 OS/2에서.
예약된 섹터의 총 개수는 부트 섹터 내부의 필드로 표시됩니다.일반적으로 FAT32 파일 시스템에서는 32입니다..
FAT32 파일 시스템의 경우 예약된 섹터에는파일 시스템 정보 부문논리 섹터 1과 a에서백업 부트 섹터논리 섹터 6에서.
다른 많은 공급업체가 부트스트랩 로더에 대해 단일 섹터 설정(논리 섹터 0만)을 계속 사용하는 반면, Microsoft의 부트 섹터 코드는 FAT32 도입 이후 논리 섹터 0과 2에 걸쳐 생성되도록 성장했습니다. 논리 섹터 2의 서브루틴. 백업 부트 섹터 영역은 세 개의 논리 섹터 6, 7, 8로도 구성됩니다. 경우에 따라 Microsoft는 확장 부트 로더를 위해 예약된 섹터 영역의 섹터 12도 사용합니다.
OP 질문과 관련이 없는 추가 정보입니다.
FAT 지역, 섹터 32에 있습니다.
여기에는 일반적으로 중복성 검사를 위해 파일 할당 테이블의 두 복사본(다양할 수 있음)이 포함되어 있지만 디스크 복구 유틸리티에서도 거의 사용되지 않습니다.
이는 파일 및 디렉터리에서 사용되는 클러스터를 나타내는 데이터 영역의 맵입니다. FAT12 및 FAT16에서는 예약된 섹터 바로 뒤에 옵니다.
일반적으로 추가 복사본은 쓰기 시 긴밀하게 동기화되고 읽기 시 첫 번째 FAT에서 오류가 발생할 때만 사용됩니다. FAT32에서는 기본 동작을 전환하고 사용 가능한 FAT 중에서 진단 목적으로 사용할 단일 FAT를 선택할 수 있습니다.
맵의 처음 두 클러스터(클러스터 0과 1)에는 특수 값이 포함되어 있습니다.
루트 디렉터리 영역:
루트 디렉터리에 있는 파일과 디렉터리에 대한 정보를 저장하는 디렉터리 테이블입니다. 이는 FAT12 및 FAT16에서만 사용되며 이 볼륨 생성 시 미리 할당된 고정된 최대 크기를 루트 디렉터리에 적용합니다. FAT32는 파일 및 기타 디렉터리와 함께 데이터 영역에 루트 디렉터리를 저장하므로 이러한 제약 없이 확장될 수 있습니다. 따라서 FAT32의 경우 데이터 영역이 여기에서 시작됩니다.
데이터 지역:
여기에는 실제 파일 및 디렉터리 데이터가 저장되고 대부분의 파티션을 차지합니다. 전통적으로 데이터 영역의 사용되지 않는 부분은 IBM 호환 시스템에서 포맷하는 동안 INT 1Eh의 DPT(디스크 매개 변수 테이블)에 따라 0xF6의 필러 값으로 초기화되지만 Atari 포트폴리오에서도 사용됩니다. 8인치 CP/M 플로피는 일반적으로 0xE5 값으로 사전 포맷되어 제공됩니다. Digital Research를 통해 이 값은 Atari ST 형식의 플로피에도 사용되었습니다. Amstrad는 대신 0xF4를 사용했습니다. 일부 최신 포맷터는 0x00 값으로 하드 디스크를 지우는 반면 프로그래밍되지 않은 플래시 블록의 기본값인 0xFF 값은 마모를 줄이기 위해 플래시 디스크에 사용됩니다. 후자의 값은 일반적으로 ROM 디스크에도 사용됩니다. (일부 고급 서식 도구를 사용하면 형식 필러 바이트를 구성할 수 있습니다.)
파일과 하위 디렉터리의 크기는 FAT의 파일 체인에 더 많은 링크를 추가하여 임의로 늘릴 수 있습니다(무료 클러스터가 있는 한). 그러나 파일은 클러스터 단위로 할당되므로 1KiB 파일이 32KiB 클러스터에 상주하는 경우 31KiB가 낭비됩니다.
FAT32는 일반적으로 데이터 영역의 첫 번째 클러스터인 클러스터 번호 2에서 루트 디렉터리 테이블을 시작합니다.
답변2
섹터 1-31은 부팅 정보와 파티션 테이블 정보용으로 예약되어 있는 것으로 추측됩니다. 파티션 /dev/sdb1은 블록/섹터 32에서 시작하여 249854로 이동합니다. 이는 물리적 디스크의 논리 파티션입니다.
124911+는 32에서 249854 사이의 블록 수를 제공합니다.
디스크 기하학에 대한 내용은 다음과 같습니다 man fdsik
.
가능하다면 fdisk는 디스크 구조를 자동으로 얻습니다. 이것이 반드시 물리적 디스크 기하 구조는 아니지만(실제로 최신 디스크에는 물리적 기하 구조와 같은 것이 전혀 없으며 단순한 실린더/헤드/섹터 형식으로 설명할 수 있는 것도 아닙니다) MS-DOS에서 사용하는 것은 디스크 기하 구조입니다. 파티션 테이블에 사용됩니다.
일반적으로 기본적으로 모든 것이 잘 진행되며 Linux가 디스크의 유일한 시스템인 경우 문제가 없습니다. 그러나 디스크를 다른 운영 체제와 공유해야 하는 경우에는 다른 운영 체제의 fdisk가 최소한 하나의 파티션을 만들도록 하는 것이 좋습니다. Linux가 부팅되면 파티션 테이블을 보고 다른 시스템과의 원활한 협력을 위해 필요한 (가짜) 기하학이 무엇인지 추론하려고 시도합니다.