루트를 overlayfs로 마운트

루트를 overlayfs로 마운트

저는 루트(/)를 오버레이fs로 마운트하려고 했습니다.

운영 체제가 NFS를 통해 RAM으로 부팅 중입니다. "work", "upper" 및 "lower" 디렉토리를 생성하는 initrd에 사전 설치 스크립트를 추가했습니다.

부팅 프로세스 중에 NFS의 내용을 "하위" 디렉터리에 복사합니다. 그러면 Overlayfs가 ${rootmnt}에 마운트됩니다.

마지막으로 init 스크립트는 ${rootmnt}로 루트를 지정하고(다음에는 실제 루트에서 초기화하는 등...) OS가 제대로 작동합니다.

물론 "작업" 및 "상위" 디렉터리는 볼 수 없습니다. 어떻게 해야 하나요? initrd에서 무엇을 변경해야 합니까?

답변1

오버레이fs로 루트를 마운트하는 문제가 해결되었습니다.

즉, "하위", "작업" 및 "상위" 디렉터리를 "병합" 디렉터리로 이동해야 합니다. 그러나 다음 사항을 고려해야 합니다.

1) "하위" 디렉터리가 디스크 이미지로 존재하는 경우 별도의 조치가 필요하지 않습니다. 그냥 설치하세요. 그렇지 않은 경우 생성임시 파일 시스템마운트 지점을 지정하고 NFS를 통해 필요한 모든 파일을 해당 지점에 복사합니다.

2) '상위' 및 '하위' 디렉터리는 동일한 파일 시스템에 있어야 합니다. 다른 것을 만들어라임시 파일 시스템마운트 지점에 "상위" 및 "하위" 디렉토리를 배치하는 것으로 충분합니다.

initrd.img3) NFS 및 Overlayfs 모듈이 있는지 확인하십시오 . 존재하지 않으면 /etc/initramfs-tools/modules에 추가하십시오.

initrd.img4) "mount" 명령의 정식 버전이 있는지 확인하십시오 . 존재하지 않는 경우 의 후크에 추가하십시오 /etc/initramfs-tools/hooks.

예를 들어(일부 세부 사항은 생략됨):

/etc/initramfs-tools/hooks/mount_full:

#!/bin/sh
PREREQ="/bin/mount"
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
            prereqs
            exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line

copy_exec /bin/mount /bin/mount_full

exit 0 

마지막으로 .txt 파일에 사전 마운트 스크립트를 추가합니다 /etc/initramfs-tools/scripts/init-premount/. 예를 들어:

/etc/initramfs-tools/scripts/init-premount/ramboot:

#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
            prereqs
            exit 0
    ;;
esac

. /scripts/functions
# Begin real processing below this line

# Preparing work dirs
mkdir /overlaytmp
mkdir /overlaytmp/lower
mkdir /overlaytmp/upper_and_work
mkdir /overlaytmp/merge
mkdir /ramboottmp

# Preparing RAM disks and thus layers
mount -t tmpfs -o size=100% none /overlaytmp/lower
mount -t tmpfs -o size=100% none /overlaytmp/upper_and_work
mkdir /overlaytmp/upper_and_work/upper
mkdir /overlaytmp/upper_and_work/work

...
mount nfs_share /ramboottmp
...

# Copy root content over NFS to RAM
echo "Copying / to RAM ..."
cp -rfa /ramboottmp/* /overlaytmp/lower
# Preparing layers mount points
mkdir /overlaytmp/lower/mnt/lower
mkdir /overlaytmp/lower/mnt/upper_and_work
# Lower layer will be read-only
mount -o remount,ro /overlaytmp/lower

# Mounting overlayfs
mount -t overlay -olowerdir=/overlaytmp/lower,upperdir=/overlaytmp/upper_and_work/upper,workdir=/overlaytmp/upper_and_work/work none /overlaytmp/merge

# Moving layers to merge layer
mount --move /overlaytmp/lower /overlaytmp/merge/mnt/lower
mount --move /overlaytmp/upper_and_work /overlaytmp/merge/mnt/upper_and_work

# Moving merge layer to finally root
mount --move /overlaytmp/merge ${rootmnt}

umount /ramboottmp

관련 정보