커널은 파일 시스템을 찾을 위치를 어떻게 알 수 있나요?

커널은 파일 시스템을 찾을 위치를 어떻게 알 수 있나요?

저는 Linux, 특히 임베디드 Linux를 처음 접했습니다.

저는 루트 파일 시스템 유형이 압축된 읽기 전용 파일 시스템 유형인 SquashFS인 임베디드 장치에서 개발된 프로젝트를 진행하고 있습니다.

커널이 부팅할 때, 특히 일반 EXT4 유형이 아닌 SquashFS 유형인 경우 루트 파일 시스템을 찾고 마운트하는 방법을 어떻게 알 수 있습니까? 미리 감사드립니다.

답변1

이를 수행하는 방법에는 두 가지가 있습니다.

  • 루트 장치 이름을 인수( )로 커널에 전달하면 root커널은 저장 장치를 찾고 부팅을 위한 파일 시스템을 식별하고 마운트하는 데 필요한 모든 모듈을 내장해야 합니다 init. 커널에 어떤 파일 시스템을 사용하도록 지시할 수 있지만 rootfstype그것이 필수인지는 잘 모르겠습니다.

  • 오늘날 대부분의 시스템에서 사용되는 initramfs이는 커널에 붙여넣거나 부트로더에서 참조하는 작은 파일 시스템 이미지로, 프로세스 루트에 제어를 전달하기 전에 준비(필요한 경우)하고 사용자 모드에서 마운트하는 데 사용됩니다. 파일 시스템 init. 작업이 수행된 후의 실제 루트 파일 시스템입니다 switch_root.

답변2

개념이 있다매직넘버이것을 참고하시면 됩니다.

다음에 정의된 매직 넘버 목록마술.h헤드 파일

예를 들어 디스크를 확인하는 경우:

sudo file -Ls /dev/mapper/vg-home               
/dev/mapper/vg-home: Linux rev 1.0 ext4 filesystem data, UUID=fd8eb0e8-073d-4ae3-810a-87e8af0981d7 (needs journal recovery) (extents) (64bit) (large files) (huge files)

file명령은 매직 넘버를 기반으로 유형을 일치시킵니다. hexdump 도구를 사용하여 다음 값을 볼 수 있습니다.

sudo hexdump /dev/mapper/vg-home -C  | grep "53 ef"
00000430  1b da d0 5e 49 00 ff ff  53 ef 01 00 01 00 00 00

여기0x53efext4 파일 시스템의 매직 넘버입니다.

( squashfs매직 넘버 0x73717368)

sudo hexdump /dev/somedisk -C  | head -n 1    
0000000  73 71 73 68 00 00 14 7e  01 ea 27 0d 00 01 00 00 |sqsh...~..'.....|

관련 정보