tmpfs에 압축 폴더를 마운트하기 위한 Initramfs-tools 스크립트

tmpfs에 압축 폴더를 마운트하기 위한 Initramfs-tools 스크립트

Clonezilla Live 및 GParted Live와 같은 기본 복구 도구가 지원하지 않는 특수 커널 및 커널 모듈이 필요한 특수 하드웨어가 있는 랩탑용 작은 복구 파티션(다른 모든 시스템 및 스토리지 파티션 다음에 ~800MB의 여유 공간)을 생성하려고 합니다. 잘 작동하지 않습니다. 파티션이 너무 작아서 구축하려는 항목에 필요한 모듈과 소프트웨어를 포함할 수 없으므로 런타임 시 시스템의 대부분을 압축하여 RAM에 로드해야 합니다. 또한 에 의존하는 대신 시스템을 완전히 추출하는 것을 선호하며 squashfs파티션이 허용하는 한 시스템에 대한 변경 사항을 저장할 수 있는 기능을 원합니다. Ubuntu 20.04를 기본 시스템으로 사용하여 이를 위해 다음 구성표를 고안했습니다.

  1. 에서 초기 시스템을 구축한 후 런타임에 압축이 풀린 시스템 및 사용자 파일을 보관할 마운트 지점으로 chroot폴더를 만들고 비우고 모든 시스템 및 사용자 파일 폴더( , , , , ,/ramtmpfshomeusrvaroptetc등.)를 에 넣고 /ram각각을 에 대한 심볼릭 링크로 바꿉니다 /ram/$dir. /ramas로 압축 /ram.tar.gz하고 특수 마운트 지점( dev, sys, run, tmpproc)을 그대로 boot둡니다 rootfs. 삭제 하고 파티션에 /ram/*씁니다 .rootfs
  2. 부팅 시 커널이 initrd로드된 후 premount rootfs, mount tmpfson 을 수행 /ram한 다음 의 내용 /ram.tar.gz/ram. 이는 루트로 rootfs교체하기 전에 발생해야 합니다. 그렇지 않으면 압축된 아카이브에서 마운트하고 추출하는 데 필요한 유틸리티에 액세스할 수 없기 때문입니다.initramfsrootfs/ram
  3. 마운트 rootfs하고 부팅을 진행합니다.
  4. 종료 시 백업 /ram.tar.gz/ram.tar.gz.bak후 수정된 /ram파일을 /ram.tar.gz. 이는 를 사용하여 달성할 수 있습니다 systemd.

분명히 4단계에서 문제가 발생할 수 있으므로 2단계에서는 백업의 무결성을 포함 /ram.tar.gz하고 실패할 경우 백업을 로드해야 합니다. 그러나 이는 스크립트에 포함할 몇 가지 추가 명령일 뿐이며 initramfs-tools내 질문의 범위를 벗어납니다. :

를 변경하지 않고 2단계를 수행하기 위해 /usr/share/initramfs-tools/init에서 스크립트를 어떻게 생성합니까 ? /etc/initramfs-tools/scripts명령은 다음과 같이 충분히 쉬워야 합니다.

mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz

PREREQ그러나 스크립트(init? local? top? Bottom? premount?)를 포함할 폴더와 스크립트 자체에서 헤더를 사용하여 작업하는 방법에 대해서는 약간 혼란스럽습니다 .

답변1

그것은 매우 간단하다는 것이 밝혀졌습니다. 만들다:

/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh

set -e

PREREQ=""

prereqs()
{
        echo "${PREREQ}"
}

case "${1}" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}


그 다음에

sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u

관련 정보