initramfs에서 변수 저장(부팅 시)

initramfs에서 변수 저장(부팅 시)

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

/etc/environment나는 그 파일에 아직 접근할 수 없는 initramfs가 있다는 것을 알고 있습니다 . 또한 값을 저장하기 위해 파일을 작성하려고 생각했지만 해당 파일이 시스템에 종료되면 실제 파일 시스템이 마운트된 후에 재정의됩니다.

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

글쎄요, 일반적인 환경 상속(내보내기만 하면 됩니다...)은 이론적으로는 작동하지만... 문제는 무엇이든 간에initramfs일반적으로 이상한 일이 발생하지 않도록 하기 위해 수행되므로 의도적으로 환경을 정리할 것입니다. 환경 변수를 선택하지 않은 상태로 놔두면 보안상 위험할 수 있습니다.

/etc/environment나는 그 파일에 아직 접근할 수 없는 initramfs가 있다는 것을 알고 있습니다 .

재미있는 부분은initramfs원하는 것은 무엇이든 할 수 있다는 것입니다. 유일한 한계는 당신의 상상력입니다.

파일에 완전히 액세스할 수 있게 만들 수 있습니다. 마운트, 수정, 마운트 해제. 또는 체크섬 없이 기존 파일 시스템을 사용하는 경우 수정할 수도 있습니다.없이무엇이든 마운트합니다(또는 적어도 읽기/쓰기 모드가 아닌 경우). GRUB이 grubenv.

일반적으로 파일 시스템이나 물리적 저장소를 망쳐 놓고 싶지 않다면 램 디스크나 tmpfs 또는 루프 장치를 설정할 수 있습니다. 또는 ... initramfs가 무언가를 남겨두는 방법은 셀 수 없이 많습니다(보통 청소하려고 노력함).

답변2

initramfs가 실행되는 모든 파일을 정리할 때스위치루트/proc, /dev, /sys 및 /run 폴더를 제외한 모든 파일이 삭제됩니다. 해당 폴더 중 하나에 특수 파일을 만드는 것이 가능할 수도 있지만 여기에는 속임수가 있습니다.

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

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

답변3

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

관련 정보