Centos를 부팅하기 위해 PXE를 사용하고 있습니다 initramfs
. 사용된 메모리는 initramfs
"캐시" 값 또는 경유로 나열됩니다./proc/meminfo
free
initramfs
성능 데이터를 계산해야 하기 때문에 사용된 메모리가 회수 가능한지(즉, 디스크로 교체할 수 있는지) 알아야 합니다 . 일반적으로 파일 시스템 트리의 일부만 /
실제로 사용되므로 대부분을 initramfs
교체할 수 있습니다.
이 글을 읽으면서 상충되는 정보를 얻었습니다. 일부 소스에서는 initramfs
와 유사하게 동작 initrd
하고 이를 기반으로 한다고 주장하는데 ramfs
, 이는 선언된 메모리를 스왑을 위해 가져올 수 없음을 의미합니다. 다른 소식통은 이것이 initramfs
본질적으로 tmpfs
교환을 위해 가져올 수 있음을 의미한다고 주장합니다.
어느 것이 사실인가요? 파일 시스템의 사용되지 않는 부분을 initramfs
페이지 아웃하여 스왑 공간을 확보할 수 있습니까?
답변1
편집: 답변이 업데이트/수정되었습니다.
하지만이 주제에 대한 커널 문서rootfs
"Rootfs는 ramfs(또는 활성화된 경우 tmpfs)의 특수 인스턴스입니다. [...]"라고 말하면 코드를 간략하게 살펴보면 실제로는 여전히 ramfs입니다(mm/shmem.c
).
일부 패치(예:여기그리고여기)는 다음 주소로 전송됩니다.Linux 커널 메일링 리스트(lkml)이것을 바꾸세요. 그러나 그들은 받아들여지지 않았습니다. 한 가지 이유는 일반적으로 initramfs 단계나 임베디드 시스템에서는 스왑을 활성화하지 않기 때문입니다.
initramfs 이미지가 rootfs로 추출됩니다. 사용자 공간(종종 switch_root
에서 호출됨 /init
)이 새 루트로 전환되기 전에 rootfs의 내용을 삭제하여 최소한의 메모리만 빈 ramfs로 남게 합니다. 따라서 그 후에는 기본적으로 메모리 사용량을 무시할 수 있으며 교체할 수 있는지 여부에 대한 질문은 거의 관련이 없습니다.
답변2
말씀하신 대로 파일 데이터는 사용할 때만 rootfs
페이지를 매길 수 있으며 구현은 할 수 없습니다.tmpfs
ramfs
Linux v3.12 이후 tmpfs
일부 경우에 사용되었습니다 . 코드를 올바르게 읽으면 다음과 같습니다.오직옵션을 통과하지 못한 경우 root=
이런 일이 발생합니다 . `rootfstype=tmpfs를 전달하여 ramfs를 강제할 수 있지만 rootfstype=ramfs
`rootfstype=tmpfs를 전달하여 tmpfs를 강제할 수는 없습니다.
stat
이 명령을 사용하면 동등한 파일 시스템, 동등한 파일 시스템 또는 완전히 다른 유형의 파일 시스템을 stat -f .
사용하고 있는지 확인합니다 .ramfs
tmpfs
이는 다음에서 구현되었습니다.
6e19eded3684 "initmpfs: rootfstype= 또는 root=가 지정된 경우 initramfs를 사용하십시오."
명령줄 옵션 rootfstype=ramfs는 이전 initramfs 동작을 가져옵니다.root=가 정의되면 tmpfs 대신 ramfs를 스텁으로 사용합니다.(미학적 이유로).
이것은 두 가지 이유로 약간 혼란스럽습니다. 첫째, 바로 앞의 커밋의 논리를 효과적으로 덮어씁니다.
16203a7a942 "initmpfs: CONFIG_TMPFS가 활성화되면 rootfs가 tmpfs를 사용하도록 합니다."
적절한 fs_init 함수와 fill_super 함수를 조건부로 호출합니다.
root=
둘째, v4.17에서도 문서에 언급되지 않은 것 같은 테스트가 있습니다.
https://github.com/torvalds/linux/blob/v4.17/Documentation/filesystems/ramfs-rootfs-initramfs.txt
CONFIG_TMPFS가 활성화되면 rootfs는 기본적으로 ramfs 대신 tmpfs로 설정됩니다. ramfs를 강제로 사용하려면 커널 명령줄에 "rootfstype=ramfs"를 추가하세요.