파일 시스템의 실제 내부 작동이 혼란스럽습니다. 문제는 파일 스토리지와 블록 스토리지에 관한 것입니다. 제가 이해하는 바에 따르면 차이점은 데이터에 액세스하는 수준입니다. 즉, 파일 수준의 파일 스토리지와 블록 수준의 블록 스토리지입니다.
내 질문은: 파일 저장소도 파일을 청크로 분할하고 다시 개별 청크로 저장하게 됩니까? 그렇다면 차이점은 파일을 형성하기 위해 청크를 결합하는 책임이 실제로 누구에게 있느냐는 것입니다. 블록 스토리지의 경우 이는 해당 블록 서버의 운영 체제에 의해 수행되고, 파일 스토리지의 경우 파일 시스템의 도움을 받아 운영 체제에 의해 수행됩니다.
후속 조치: 블록 스토리지의 경우 운영 체제는 파일 시스템을 사용하지 않고 어떻게 동일한 파일의 개별 블록을 추적합니까?
답변1
디스크 드라이버는 디스크 또는 디스크 파티션에 연결하고 시스템에 디스크 블록 1부터 N까지에 대한 액세스를 제공합니다. 디스크 드라이버는 기본 "장치"에 액세스하는 더러운 세부 정보를 숨깁니다. 물리적 디스크는 실린더/헤드/섹터(C/H/S)를 통해 액세스되며 실제로 실린더 변경에는 물리적 작업(읽기/쓰기 헤드를 안팎으로 운반하는 슬라이딩 암)이 포함됩니다. 자기 헤드는 디스크 플래터 위로 "날아갑니다". 헤드 스와핑은 전자 속도로 발생하지만 섹터는 디스크가 회전할 때까지 기다려야 합니다. 최적화에는 C/H/S별 디스크 I/O 순서 지정, 암 방향 변경 최소화, 단일 헤드 아래의 모든 섹터를 읽고 쓸 수 있도록 차단, 모든 디스크와 디스크 유사 장치 간 버퍼링 등이 포함됩니다. 세부 사항은 다양합니다. 디스크 드라이버를 사용하면 프로그램이 이러한 세부 정보를 무시할 수 있습니다. 모든 디스크 드라이브에는 블록 1부터 N까지 존재합니다.
디스크가 GPT 또는 이전 MBR에 의해 제한됩니다. 각 파티션은 디스크처럼 "보입니다"(블록 1~N). Wikipedia에서 더 자세히 설명합니다.
파티션이 "마운트"되면 man hier
파일 시스템 계층 구조( )의 위치가 할당되고 파일 시스템 일관성이 확인되며 필요한 경우 복구됩니다.
i-nodes
파일 시스템은 이러한 디스크 블록(블록 1~N)을 할당하고 mkfs
생성 파일 시스템을 실행할 때 자체적으로 할당하는 디스크 블록(오버헤드 블록)을 추적합니다. 읽다 man mkfs fsck
. 파일 시스템은 I/O 최적화를 위해 블록을 "클러스터"와 "슈퍼클러스터"로 구성합니다. 모든 I/O(사용자 데이터, 플라이시스템 오버헤드)는 버퍼링되고 주기적으로만 디스크로 플러시됩니다. 시스템이 충돌하고 파일 시스템 할당 블록과 파일 시스템 메타데이터의 디스크 복사본이 일치하지 않게 될 수 있습니다. 파일 시스템은 중복성과 로깅을 사용하여 오류를 방지합니다. 불일치를 복구합니다.
사용자 프로그램은 시스템에서 시행하는 액세스 규칙에 따라 문자 또는 (이진) 데이터 블록 형태로 파일을 읽고 쓸 수 있습니다.
사용자와 하드웨어 사이의 각 계층은 다른 계층을 변경할 필요 없이 최적화될 수 있습니다(단, 버퍼에 모든 메모리를 사용하시겠습니까?). 블록 1부터 N까지.
답변2
파일 저장의 경우 첫 번째는슈퍼 블록파일 시스템에 대한 고급 검사를 제공합니다.
슈퍼블록은 크기, 블록 크기, 비어 있거나 채워진 블록과 해당 개수, inode 테이블 크기 및 위치, 디스크 블록 매핑 및 사용 정보, 블록 그룹 크기를 포함한 파일 시스템 특성에 대한 기록입니다.
그러나 "파일을 형성하기 위해 이러한 블록을 결합하는 책임"은인덱스 노드- 에 의해 관리받는파일 시스템일반적으로 inode 테이블(또는 다른 유사한 구조)에 위치하며 다음을 포함한 파일의 메타데이터를 포함합니다.객체 데이터의 디스크 블록 위치.
블록 스토리지의 경우 "동일 파일의 개별 블록 추적"은 구현에 따라 다릅니다. 블록 스토리지 서버가 일부 파일 시스템 자체(또는 둘 다)에 블록을 저장할 수도 있지만 일반적으로 데이터베이스 형태로 블록 관리를 담당하는 일부 소프트웨어가 있을 수 있습니다.