저는 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...~..'.....|