Linux 커널은 파일 시스템을 어떻게 마운트합니까? 이것이 실제로 무엇을 하는가?

Linux 커널은 파일 시스템을 어떻게 마운트합니까? 이것이 실제로 무엇을 하는가?

내 질문은 Linux 소스 코드와 파일 시스템을 기본적으로 설치, 구문 분석 및 사용하는 데 필요한 코드가 실제로 포함되어 있는지 또는 소스 코드에 추가되었는지 여부에 관한 것입니다.

Linux 소스 코드에 파일 시스템을 통해 파일을 구문 분석하고 액세스/구성하는 코드가 포함되어 있는 경우 파일 시스템은 Linux에 코딩된 장치 드라이버에 의해 제어되거나 이 프로세스가 배포판, 릴리스 등에 따라 달라진다고 말하는 것이 안전합니다. .

Linux가 다른 저장 장치의 파일 시스템을 사용하여 파일에 액세스하는 방법, 즉 사용자 공간 프로그램이 proc, ext3, ext4 등에 액세스하는 방법 및 ext3, ext4는 하드웨어와 직접 작동하기 때문에 "장치 드라이버"로 간주됩니다. 잘못된 ?

답변1

커널에는 다음과 같은 구성 요소가 있습니다.가상 파일 시스템, 줄여서 VFS)는 모든 파일 시스템에 공통 인터페이스를 제공합니다. 이는 파일 유형(일반 파일, 디렉터리, 심볼릭 링크 등), 메타데이터(시간, 권한 등) 및 파일 콘텐츠와 같은 사항을 이해합니다.

각 Linux 프로세스는 파일 시스템 마운트 위치를 지정하는 네임스페이스에 있습니다. 일반적으로 모든 프로세스는 동일한 네임스페이스에 있습니다. 네임스페이스는 주로 가상화를 지원하기 위해 존재합니다. 네임스페이스는 기본적으로 각각 내부 파일 시스템 참조가 있는 경로 모음입니다. 마운트 및 마운트 해제에는 이 네임스페이스 변경이 포함됩니다.

프로세스가 파일에 액세스하면 VFS 구성 요소는 프로세스의 네임스페이스와 현재 디렉터리를 기반으로 경로를 확인하고 파일이 있는 마운트 지점을 결정합니다. 그런 다음 VFS는 마운트 지점과 관련된 내부 파일 시스템 참조를 기반으로 적절한 파일 시스템 드라이버에 파일 관련 명령을 전달합니다.

파일 시스템 드라이버의 임무는 명령을 데이터 저장 또는 검색으로 변환하는 것입니다. 모든 파일 시스템 유형. 대부분의 파일 시스템 드라이버는 하드웨어와 직접 상호 작용하지 않으며 다른 드라이버만 상호 작용합니다. 디스크 지원 파일 시스템(ext4, btrfs, vfat 등)용 드라이버는 명령을 블록 스토리지 작업(파티션이나 기타 블록 장치에서 섹터 읽기 및 쓰기)으로 변환합니다. 네트워크 기반 파일 시스템(nfs, cifs 등)용 드라이버는 명령을 네트워크 채널을 통한 통신으로 변환합니다. 내부 커널 파일 시스템(proc, sysfs...)용 드라이버는 독립적으로 작동할 수 있습니다. 이것퓨즈파일 시스템 드라이버는 명령을 사용자 공간 프로세스에 전달합니다.

답변2

각 파일 시스템에는 Linux API를 사용하여 작성된 드라이버가 있습니다.가상 FS이 유형의 파일 시스템에 저장된 객체가 발견될 때 호출될 수 있습니다. 이는 전체 디렉터리 계층 구조를 Linux의 파일 및 파일 시스템 지향 시스템 호출에 투명하게 만듭니다(예를 들어 VFAT에 대한 권한이 없으므로 chown(2)실패할 수 있음).

답변3

각 유형의 파일 시스템은 커널의 드라이버입니다. 파일 시스템 드라이버는 디스크 드라이버를 호출하여 블록 장치에 액세스합니다.

관련 정보