initramfs에서 변수 저장(시작 시)

initramfs에서 변수 저장(시작 시)

실제 파일 시스템을 마운트하기 전에 시작 시 환경 변수를 어떻게 저장할 수 있습니까?

알고 있지만 /etc/environmentinitramfs에서는 아직 파일에 액세스할 수 없습니다. 값을 저장하기 위해 파일을 작성하는 것도 고려했지만 파일이 시스템에 존재하는 동안 실제 파일 시스템을 마운트한 후에 덮어쓰게 됩니다.

Ps: 시작 시 변수를 읽는 대신 나중에 사용하기 위해 변수를 저장하고 싶습니다.

답변 후 수정

에 대한:

  • 커널 모듈 생성(도움말 찾기여기그리고거기) 명명 된mod.ko
  • 부팅 시 모듈을 사용할 수 있는지 확인하세요(initramfs-tools를 사용하여 커널 이미지에 모듈을 포함하거나 파일 시스템에서 찾아봄).
  • 스크립트에 다음 줄을 추가하세요.

아직 커널 이미지에 모듈을 포함하지 않은 경우

insmod /path/to/mod.ko

그렇지 않으면 직접

echo "env_var=value" > /proc/name_of_your_process

name_of_your_process모듈 내부에 주어진 이름은 어디에 있습니까 (실행될 때)__initentry = proc_create("name_of_your_process",0777,NULL,&my_fops);

그런 다음 스크립트 시작 프로세스 중에

cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko

답변1

음, 일반적인 환경 상속(내보내기만 하면 됩니다...)은 이론적으로는 가능하지만... 문제는 무엇이든 간에파일 시스템 초기화일반적으로 이상한 일이 발생하지 않도록 하기 위해 스타트업에서 의도적으로 환경을 정리할 수 있습니다. 환경 변수를 확인하지 않으면 보안 위험이 발생할 수 있습니다.

알고 있지만 /etc/environmentinitramfs에서는 아직 파일에 액세스할 수 없습니다.

흥미로운 부분은 대략파일 시스템 초기화원하는 것은 무엇이든 할 수 있다는 것입니다. 유일한 한계는 당신의 상상력입니다.

파일에 액세스할 수 있도록 설정할 수 있습니다. 마운트, 수정, 제거. 또는 체크섬 없이 기존 파일 시스템을 사용하는 경우 이를 수정할 수도 있습니다.아니요무엇이든 설치하십시오(또는 적어도 읽기-쓰기 모드가 아닌 경우). GRUB 예 grubenv.

파일 시스템이나 물리적 저장소를 엉망으로 만들고 싶지 않다면 ram 디스크나 tmpfs 또는 루프 장치를 설정할 수 있습니다. initramfs 무언가를 남겨두는 방법은 셀 수 없이 많습니다(보통 정리하기 위해 노력해야 함). 그것).

답변2

initramfs가 실행되는 모든 파일을 정리할 때루트 디렉터리 전환이렇게 하면 /proc, /dev, /sys 및 /run 폴더를 제외한 모든 파일이 삭제됩니다. 이러한 폴더 중 하나에 특수 파일을 만드는 것이 가능하지만 몇 가지 트릭이 있습니다.

바라보다:/proc/sys에 디렉터리와 파일을 만드는 것이 가능합니까?

물론 가장 쉬운 옵션은 루트 파일 시스템을 로드한 후 init를 실행하기 전에 파일 시스템에 변수를 쓰는 스크립트를 추가하는 것입니다. 이것은 "지역 바닥"폴더. 안되는 이유가 있나요?

답변3

이것은 매우 간단합니다. fstab을 살펴보세요. 그런 다음 루트 장치를 마운트하고 마운트된 루트 장치의 파일에 변수를 씁니다. 나는 이것을 kdump에서 배웠습니다.

관련 정보