플래시 드라이브/하드 드라이브가 시스템에 연결될 때 마운트되어야 합니다. 설치 과정에서 정확히 어떤 일이 발생합니까? 시스템/커널은 플래시 드라이브에 있는 내용을 어떻게 추적합니까?
답변1
첫째, 소프트웨어를 실행하지 않는 한 실제로 자동으로 설치되지 않습니다. 이 동작은 커널이 아닌 사용자 공간에서 완전히 처리됩니다. 이는 자동 마운트가 보안에 있어서 악몽이기 때문에 다소 중요합니다(충돌 가능성이 있거나 적어도 이미지화된 시스템에서 정교한 DoS가 있는 대부분의 파일 시스템에 대해).
이제 실제로 일어나는 일은 udev와 udisk의 표준 조합을 사용하여 자동 마운트를 트리거하는 Linux의 일반적인 순서입니다.
- 장치는 커널에 의해 물리적으로 연결되고 열거됩니다. 커널은 이를 일종의 블록 장치로 인식하고, 이 인터페이스를 사용자 공간에 노출하도록 적절한 드라이버를 설정한 다음, 사용자 공간에서 수신 대기 중인 모든 항목에 새 하드웨어가 연결되었음을 알리기 위해 uevent를 실행합니다.
- 커널은 장치의 파티션을 스캔합니다.
/dev
Udev는 이 uevent를 보고 해당 장치에 대한 다양한 장치 노드와 링크를 설정합니다. 그런 다음 장치와 해당 파티션을 검색하여 어떤 파일 시스템이 어디에 있는지 확인하고 이 데이터를 다른 프로그램이 쿼리할 수 있는 위치에 저장합니다.- Udisks는 커널에서 uevent를 살펴보고 udev 설정이 완료되었는지 확인한 다음 3단계에서 완료된 udev 스캔을 통해 발견된 파일 시스템이 있는지 확인합니다. 그렇다면 udisks는 새로 연결된 파일 시스템을 자동으로 마운트하도록 구성되어 있으며 커널에 파일 시스템별 마운트 요청을 보냅니다.
- 커널은 내부적으로 다음을 수행하여 파일 시스템을 마운트합니다(훨씬 단순화됨).
- 먼저 해당 파일 시스템 유형에 맞는 드라이버가 있는지 확인하고, 없으면 로드를 시도합니다.
- 파일 시스템 드라이버는 파일 시스템 슈퍼블록(파일 시스템 자체에 대한 모든 메타데이터가 저장되는 곳)에서 필요한 메타데이터를 구문 분석합니다.
- 슈퍼블록의 메모리 내 복사본을 생성하고 파일 시스템 드라이버 및 mount 명령에서 제공하는 데이터로 채웁니다. 이 데이터 구조는 커널에서 내부적으로 파일 시스템을 참조하는 데 사용됩니다. 커널 내의 파일 시스템에 대한 다른 모든 내부 참조는 궁극적으로 이 지점을 가리킵니다.
- 그런 다음 커널은 이 메모리의 슈퍼블록에 대한 참조를 사용하여 내부 마운트 테이블을 업데이트합니다.
이제 커널이 어떻게 "물건을 추적"하는지에 관해서는 올바르게 설명하기가 훨씬 더 복잡합니다. 간단히 말해서, 그렇지 않습니다. 장치의 파일에 액세스하려고 할 때마다 커널은 파일 시스템의 루트에서 해당 파일을 찾습니다. 캐시가 있으면 작업 속도가 빨라질 수 있지만 성능 외에는 중요하지 않습니다.
답변2
플래시 드라이브에 내용을 저장하여 플래시 드라이브의 내용을 추적합니다.
또한 (커널에) 마운트 테이블이 있습니다. /dev/disk/by-label/home
(실제 장치에 대한 링크)가 에 설치되어 있음을 알고 있습니다 /home
. USB 플래시 드라이브가 마운트되어 있다는 것을 알고 있으며 /media/my-flash
이러한 디렉터리로 디렉터리를 변경하면 다른 장치로 이동합니다.
현재 설치 상태를 사용 mount
하고 확인하세요.df -h
답변3
최신 Linux 그래픽 인터페이스(예: GNOME)는 udisks
백그라운드 프로세스("서비스")에 요청을 전송하여 파일 시스템을 마운트합니다. 드라이브를 연결하면 자동으로 이 작업을 수행하는 경향이 있습니다. 이러한 작업을 중지하는 방법을 찾는 것은 어렵고 mount
명령의 효과를 직접 테스트해야 합니다. 이를 피하는 쉬운 방법은 텍스트 콘솔에 로그인하는 것입니다. (텍스트 콘솔 로그인에 대한 자세한 내용은 다음을 참조하세요.여기)
명령을 사용하여 에 요청을 보낼 수도 있습니다 udisks
. 이 명령의 현재 버전은 입니다 udisksctl
.
USB 플래시 드라이브를 연결하면 (일반적으로) USB 스토리지 드라이버가 해당 드라이브에 "바인딩"되어블록 장치.[*] Linux: lsblk
(블록 장치 목록)을 참조하세요.
마찬가지로, mount
블록 장치를 사용할 때 일부 파일 시스템 소프트웨어를 여기에 바인딩하게 됩니다. 파일 시스템 형식마다 소프트웨어가 다릅니다. 예를 들어, FAT32 파일 시스템은 일반적으로 플래시 드라이브에서 사용됩니다. Linux에서는 이 파일 시스템 유형을 이라고 부릅니다 vfat
. 실행 시 mount
두 개의 매개변수, 즉 장치와 파일 시스템이 마운트될 디렉터리 이름을 포함해야 합니다. 해당 디렉토리 이름(예: ls /mnt
)에 액세스하면 원래 디렉토리 대신 마운트된 파일 시스템이 표시됩니다.
인수 없이 실행 하면 mount
마운트된 파일 시스템이 나열됩니다. 그러나 Linux에서는 List File System을 man mount
사용하는 것이 더 낫다는 메시지가 표시됩니다 . Linux에 설치한 많은 가상 파일 시스템을 구성하는 데 도움이 될 수 있는 훌륭한 출력이 있습니다(비록 알파벳순으로 정렬되지는 않지만 ).findmnt
findmnt
ls
df -h
또한 Linux에 있는 많은 가상 파일 시스템을 제외하고 각 파일 시스템의 여유 공간을 표시하므로 멋진 출력이 있습니다. (엄밀히 말하면 일부 복잡한 Linux 파일 시스템 설정은 표시된 것보다 더 복잡하게 사용 가능한 공간을 처리할 수 있습니다. 예를 들어 파일 데이터를 압축하면 더 적은 공간이 필요할 수 있습니다.)
모두액세스할 수 있는 파일은 마운트된 파일 시스템 중 하나에 저장됩니다. /
마운트된 파일 시스템 목록에 표시됩니다 . /
"루트" 디렉터리입니다. /
파일의 전체 "경로"(위치)의 첫 번째 부분입니다. (참고: 파일의 전체 경로는 "절대" 경로로 설명됩니다).
루트 파일 시스템에는 특별한 점이 있습니다. umount
즉, 작동(마운트 해제)할 수 없습니다. 루트 파일 시스템은 항상 사용 중인 것으로 간주됩니다.
시스템 종료 시퀀스는 루트 파일 시스템을 읽기 전용( mount / -o remount,ro
)으로 다시 마운트합니다. 파일 시스템을 읽기 전용으로 다시 마운트하는 것은 변경된 파일을 다시 쓰도록 요청하고(예: 하드 디스크의 블록 장치에) 완전한 종료를 준비하도록 요청하는 방법입니다. 이런 의미에서 제거와 동일한 목적으로 사용됩니다.
일부 저수준 Linux 소프트웨어는교환루트 파일 시스템은 마운트된 다른 파일 시스템에 연결됩니다 pivot_root
. 그런 다음 이전 루트 파일 시스템을 마운트 해제할 수 있습니다. 그러기 위해서는 여기서는 설명하지 않을 몇 가지 특정 조건이 필요합니다. 이 기능은 ram 기반 초기 파일 시스템(initramfs)이 마운트된 후 실제 루트 파일 시스템으로 리디렉션되는 일반적인 Linux 배포판의 부팅 프로세스를 제공하기 위해 만들어졌습니다. 왜 이런 일을 하는지에 대한 설명이 있습니다.여기.
[*] Linux에서는 드라이버를 사용하는 첫 번째 장치에 sd
이름이 할당되는 sda
식입니다.
USB 저장 장치는 특정 형태의 SCSI를 허용합니다. 따라서 USB 저장소 드라이버는 scsi 장치를 제공하고 (SCSI 디스크) 드라이버는 sd
scsi 장치에 바인딩되어 블록 장치를 제공합니다.
sd
다양한 유형의 블록 장치에 사용됩니다. 반드시 물리적 디스크일 필요는 없으며 하드웨어는 반드시 필요한 다른 명령을 사용할 수 있습니다.번역된SCSI에서. 컴퓨터는 이상합니다. 이 패턴의 이유는 여러 요인에 따라 달라질 수 있습니다.반드시 관련되지는 않은 역사적 세부정보.