UBI/UBIFS에서 로드된 읽기 전용 루트 파일 시스템을 갖춘 임베디드 Linux 시스템이 있습니다.
장치가 부팅될 때마다 새로운 시스템 ID가 생성됩니다.문서:
컴퓨터 ID는 일반적으로 시스템 설치 중에 임의 소스에서 생성되며 이후의 모든 부팅에서 변경되지 않습니다. 또는 상태 비저장 시스템의 경우 비어 있는 것으로 확인되면 초기 시작된 런타임 중에 생성합니다.
systemd 읽기에서머신 ID 설정.c파일이 어떻게 작동하는지에 대한 아이디어가 있습니다. 존재하지 않으면 /etc/machine-id에서 머신 ID를 생성하려고 시도하고, 실패하고 파티션이 읽기 전용이면 생성을 시도합니다. /run/machine-id에서 빌드하고 /etc/machine-id(symlink 아님)에 설치합니다.
문제는 상태 비저장 장치에 대해 고정된 컴퓨터 ID를 가질 수 있느냐는 것입니다. 내가 가진 두 가지 옵션은 다음과 같습니다.
1) 컴퓨터 ID를 비휘발성 메모리(외부/eMMC)에 저장합니다.
- 부팅 후 /etc/machine-id가 존재하는지 확인하세요.
- 그렇지 않은 경우 (평소와 같이) systemd 서비스를 통해 시스템 ID를 생성한 서비스/마운트를 계속 전달합니다.
- 새 서비스 파일: 컴퓨터 ID를 생성한 후 이 문자열을 메모리/NAND에 없는 파티션, 즉 eMMC(비휘발성)에 복사합니다.
따라서 이제 장치가 한 번 이상 초기화되었으며 컴퓨터 ID가 비휘발성 저장 매체에 저장되었습니다. 이제 부팅 순서는 다음과 같습니다.
- 장치가 비휘발성 파티션을 부팅하고 마운트합니다.
- 비휘발성 컴퓨터 ID가 있는지 확인하세요(위의 1단계와 동일).
- 파일이 존재하므로 /etc/machine-id에 마운트합니다.
- /etc/machine-id 번호를 처리하는 서비스 파일은 이미 존재하므로 이제 실행되지 않습니다.
2) 시스템 수정머신 ID 설정.c파일을 생성하고 컴퓨터 ID가 생성, 저장 및 저장되는 하드 코딩된 디렉터리를 변경합니다. 하지만 이 방법은 시스템 시스템 파일을 수정해야 하기 때문에 피하고 싶습니다.
누구든지 이것에 대한 통찰력을 공유할 수 있습니까?
감사해요
답변1
가장 쉽고 최선의 선택은 아마도 커널 명령줄 변수로 전달하는 것입니다.systemd.machine_id
공식 문서에 따르면. 정말 멋지게 만들고 싶다면 실행 중인 SoC에 고유한 정보(예: 일련 번호, MAC 주소 등)를 기반으로 부트로더가 이를 생성하도록 할 수 있습니다.
답변2
당신은 모순된 개념의 혼합을 요구하고 있습니다. 지속성은 상태를 의미하지만 시스템은 상태 비저장을 원합니다.
언급한 옵션 외에도 "Union" 또는 "Overlay" 파일 시스템 사용을 고려할 수도 있습니다. 이는 운영 체제에 먼저 영구 파일 시스템에서 파일을 찾은 다음 해당 파일이 없으면 상태 비저장 파일 시스템을 확인하도록 지시합니다. 이는 LiveCD가 구현되는 방식으로, 읽기 전용 미디어의 파일을 수정하는 기능을 의미합니다.
답변3
간단히 rootfs read-write( mount -o remount,rw /
)를 다시 마운트하고 무작위로 생성된 컴퓨터 ID를 파일에 저장하여 /etc/machine-id
문제를 해결했습니다 .