젠투 VPS의 커널 6.1.31에서 Overlayfs가 작동하지 않습니다.

젠투 VPS의 커널 6.1.31에서 Overlayfs가 작동하지 않습니다.

젠투가 설치된 VPS가 있는데 커널 오버레이 파일 시스템이 제대로 작동하지 않습니다.

오버레이 관련 커널 옵션입니다.

커널로 컴파일

cat .config | grep -i overlay

CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_OVERLAY_FS=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_INDEX is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
# CONFIG_OVERLAY_FS_METACOPY is not set

모듈로 컴파일

cat .config | grep -i overlay

CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_OVERLAY_FS=m
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_INDEX is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
# CONFIG_OVERLAY_FS_METACOPY is not set

커널에 로드할 때 dmesg에서 보내는 메시지

dmesg | grep -i overlay
[   10.144242] request_module fs-overlay succeeded, but still no fs?

모듈로 컴파일할 때 dmesg의 메시지

dmesg | grep -i overlay
[   10.000001] request_module fs-overlay succeeded, but still no fs?

모듈로 컴파일하면 모듈이 올바른 위치에 있습니다.

locate overlay.ko
/lib/modules/6.1.46-gentoo/kernel/fs/overlayfs/overlay.ko
/usr/src/linux-6.1.46-gentoo/fs/overlayfs/.overlay.ko.cmd
/usr/src/linux-6.1.46-gentoo/fs/overlayfs/overlay.ko

cat /proc/filesystem | grep -i 오버레이가 비어 있습니다.

시스템은 다음과 같습니다:

uname -a
Linux patito 6.1.31-gentoo #3 SMP PREEMPT_DYNAMIC Sun Jun 25 09:04:44 GMT 2023 x86_64 QEMU Virtual CPU version 2.5+ AuthenticAMD GNU/Linux

전체 시스템은 다른 ext4 파티션에 있는 /boot를 제외하고 하나의 파티션에서만 ext4를 실행합니다.

시스템에는 2GB의 메모리와 충분한 공간이 있습니다. 시스템의 스냅샷을 다운로드하고 virt-manager를 사용하여 내 컴퓨터에서 실행하고 테스트를 위해 더 많은 메모리와 CPU 코어를 추가했는데 동일한 결과를 얻었습니다. 도움이 되지만 변경 사항이 없는 경우 qemu-img가 .img에서 qcow2로 변환됩니까?

나는 다른 커널을 시도하고, 다른 옵션으로 다시 컴파일하고, 모든 overlayfs 부분을 제거하고, 재부팅하고 다시 활성화하고, 인터넷에서 비슷한 문제를 검색했지만 아무것도 찾지 못했습니다. 어떤 이론이라도 감사하겠습니다.

커널의 overlayfs는 위에 표시된 대로 커널의 일부로 컴파일되지만 모듈로 컴파일을 시도했지만 자동으로 로드되지 않았고 After lsmod를 사용하여 수동으로 로드하려고 시도했지만 modprobe거기에 없습니다. 다시 시도하고 위 섹션에 커널 구성을 추가하겠습니다.

답변1

에서 본 메시지를 Google에 검색하여 dmesg다음 파일을 찾으세요.puppet소스 코드문제의 원인을 설명하십시오.

    # On a fresh node overlay may be unloaded automatically by the OS
    # if no fs needs it. In this case the kern.log should look like:
    # kernel: request_module fs-overlay succeeded, but still no fs?
    # This may lead to unwanted side effects, like Docker not finding
    # the overlay kernel module loaded and falling back to
    # the device-mapper storage driver.
    # Therefore we explicitly load the overlay module when the overlayfs
    # option is true.
    kmod::module { 'overlay':
        ensure => 'present',
    }

따라서 호스트 시스템에서 다음 명령을 실행하면 overlay커널 모듈이 로드되지 않은 것을 볼 수 있습니다.

lsmod |grep overlay

overlay따라서 커널 모듈을 다시 로드하기만 하면 됩니다 .

modprobe overlay

답변2

답변을 게시한 후아베이루, 내 커널 버전 6.1.46이 원본 메시지의 6.1.31과 다르다는 것을 깨달았습니다. 이는 질문이 게시된 원래 웹사이트에서 대부분의 정보를 복사했기 때문에 전적으로 가능합니다.Docker 커뮤니티 포럼, 나는 이것을 알아내기 위해 많은 테스트를 하고 노력했지만 로드되는 커널 버전에 대해 생각하게 되었습니다.

/usr/src/linux올바른 커널을 가리키고 6.1.46fs를 모듈로 재정의하여 원래 게시물에 관련 정보를 게시하도록 다시 컴파일되었는지 확인한 다음 make && make modules_install && make install재부팅하십시오 grub-mkconfig -o /boot/grub/grub.cfg.

재부팅 후 다시 실행 uname -a해보니 커널이 6.1.31이었는데 왜 그럴까요?

잘못된 경로를 사용하여 mkconfig를 실행한 것일 수도 있으므로, 조심스럽게 다시 실행하고 다시 재부팅했습니다. 여전히 6.1.31입니다.

/boot/grub/grub.cfg재부팅 후 올바른 옵션을 확인했는데 6.1.46이 시스템을 부팅하는 첫 번째 옵션이었습니다. 그래서 일부 임의 행이 업데이트되지 않는 문제를 방지하기 위해 실행 rm /boot/\*6.1.31*하고 grub-mkconfig -o /boot/grub/grub.cfggrep으로 확인한 결과 6.1.31의 흔적은 없고 6.1.46만 발견되었습니다.

다시 재부팅했는데 6.1.31이 다시 나타났습니다. 하지만 모든 것이 괜찮아 보이고 6.1.46으로 부팅되어야 합니다.

그런 다음 재부팅하고 부팅 프로세스를 수동으로 제어하여 6.1.46을 로드하도록 숫자를 수동으로 편집했지만 시스템이 실패하고 커널을 찾지 못했습니다.

이것이 핵심입니다.

6.1.31로 다시 변경하고 부팅한 후 마운트 지점을 확인했습니다(/boot는 다른 파티션입니다).

거기에 있습니다. 아니, /boot설치되지 않았다고 해야 할까요. 이 시스템의 수명 중 어느 시점에서 나는 noauto에 실수를 해서 /etc/fstab설치 /boot되지 않았습니다.

이걸 바꿨는데,삭제됨자동이 아님/bootb 의 경우 /etc/fsta시스템을 재부팅하면 짜잔! 시스템은 6.1.46이고 overlayfs가 작동 중입니다..

하지만 이것은 내가 이해하지 못하는 새로운 부분입니다. /boot파티션이 아닌 폴더임에도 불구하고 6.1.46 커널이 있고 /boot/grub/grub.cfg올바른 구성을 가지고 있는데 왜 읽혀지고 로드되지 않는 걸까요? 부팅 시 나타나는 grub 메뉴에는 6.1.31이라는 옵션이 하나만 있는데 가 locate있거나 없는 디스크에서는 찾을 수 없는데 find어디에 있나요? 어떻게로드됩니까? /boot/grub/grub.cfgcat을 사용하여 디스크에서 읽은 데이터는 6.1.46입니다.

글쎄, 이 긴 이야기를 마치고 문제를 해결하고 새로운 미스터리를 얻었지만, 너무 많은 시간을 소비했기 때문에 지금은 미스터리가 풀리지 않은 상태로 남아 있습니다.

도움을 주셔서 감사합니다. aviro의 마지막 의견에 답변하지 않고서는 해결책을 찾지 못했을 것입니다.

관련 정보