SSH 액세스 권한만 있는 경우 루트 파티션에 대한 Casefold ext4 파일 시스템 옵션을 어떻게 변경합니까?

SSH 액세스 권한만 있는 경우 루트 파티션에 대한 Casefold ext4 파일 시스템 옵션을 어떻게 변경합니까?

필수 옵션으로 컴파일된 백포트된 6.1 Linux 커널이 있는 Debian 11 서버의 ext4에서 대소문자를 구분하지 않는 파일 시스템 기능(casefold)을 활성화해야 합니다.

서버에는 2GB 스왑 파티션과 파일 시스템용 대형 ext4 파티션이 있으며 이 파티션에서도 부팅됩니다. 물리적/가상 호스트 자체가 아닌 루트로만 SSH 액세스 권한이 있으므로 (가상) USB 스틱이나 CDROM 미디어에 액세스할 수 없습니다.

지갑 기능을 활성화하는 가장 빠른 방법은 무엇입니까? une2fs는 파일 시스템이 이미 마운트되어 있기 때문에 이 작업을 원하지 않습니다.

아이디어: 스왑 영역을 삭제하고, 그 안에 작은 복구 시스템을 설치하고, 해당 복구 시스템으로 재부팅하고, 루트 파티션의 파일 시스템 옵션을 변경하고, 활성 파티션으로 재부팅하고 스왑 영역을 복원합니다. 하지만 이를 달성하려면 필수 une2fs 명령을 실행할 추가 Linux 시스템을 준비해야 합니다.

더 좋은 방법이 있나요? 재부팅 후 복구 시스템을 사용하고 필요한 네트워크 설정을 사전 구성할 수 있습니까?

답변1

@Marcus Müller 덕분에 이 작업을 수행할 수 있었습니다. 비결은 initrd 이미지에 tune2fs를 추가하고 부팅 중에 호출하는 것입니다.

스크립트 생성 initramfs-utils:

cat > /usr/share/initramfs-tools/scripts/local-premount/ext4_casefold << 'EOF'
#
# ext4_casefold
#
# initrd script to add the casefold option to the root filesystem
#

DEVICE=/dev/sda2

prereqs()
{
    . /usr/share/initramfs-tools/hook-functions 
    copy_exec /usr/sbin/tune2fs usr/sbin/tune2fs
}

case $1 in
# get pre-requisites
prereqs)
        prereqs
        exit 0
        ;;
esac

echo "Adding casefold option to $DEVICE"
sleep 5
/usr/sbin/tune2fs -O casefold $DEVICE
echo "If everything went well, we added the casefold option to $DEVICE"
sleep 5

EOF

실행 가능하게 만드세요:

chmod a+x /usr/share/initramfs-tools/scripts/local-premount/ext4_casefold

initrd를 다시 빌드하십시오.

update-initramfs -u

램디스크의 내용에 실제로 tune2fs가 포함되어 있는지 확인하세요(선택 사항).

INIT_RD_IMAGE=initrd.img-6.1.0-0.deb11.7-amd64
rm -rf /root/initrd
mkdir /root/initrd
cp /boot/$INIT_RD_IMAGE /root/$INIT_RD_IMAGE.gz
gunzip /root/$INIT_RD_IMAGE.gz
cd /root/initrd
cpio -id < /root/$INIT_RD_IMAGE

재부팅하고 즐기십시오!

답변2

나는 당신의 접근 방식이 마음에 듭니다. 메인 시스템의 데이터를 수정할 필요가 없기 때문에 깔끔합니다.

그리고, 그렇습니다. tune2fs크게 실행하고 싶다면 가장 쉬운 해결책은 실행 중인 Linux에서 실행하는 것입니다. 따라서 기본 파일 시스템이 마운트되지 않은 경우 실행할 수 있는 실제 방법은 없습니다.

tune2fs … /dev/disk/by-partuuid/…나는 귀하의 네트워크 설정이 의미가 없다고 생각합니다. 귀하는 시스템에서 수행하려는 작업을 정확히 알고 있습니다. SSH 셸을 제공하기 위해 네트워크를 미리 구성하는 것이 자동화된 스크립트에서 실행하는 것보다 낫습니다. 정상적인 시스템을 시작하는 데 걸리는 시간) 필요한 작업)이 더 어렵습니다.

이제 두 가지 옵션이 있습니다.

  1. 귀하의 데비안은 현재 다음을 사용하고 있습니다.초기화 프로그램포함파일 시스템 초기화(나는 희망한다)
  2. 그러나 실제로는 그렇지 않습니다.

첫 번째 경우에는 tune2fs필요한 호출만 포함하도록 initrd 생성 프로세스를 수정하고 새 initrd를 생성한 후 부팅하는 것이 아마도 가장 쉬운 방법일 것입니다. initrd는 빌드를 피하고 싶은 바로 그 것입니다: 맞춤형, 본격적인 Linux 시스템(이것은 루트 파일 시스템을 마운트하고 기본 부팅 프로세스를 계속하기 전에 Linux 배포판이 시스템을 초기화하는 방법입니다). 어쨌든, 데비안은 여러분을 위해 이것을 만들었습니다 :)
인정해야 합니다. 제가 데비아노이드 Linux에 대해 비슷한 작업을 수행한 지 10년(또는 그 이상)이 지났기 때문에 잘 모르겠습니다.어떻게;데비안의 문서(슬프게도 약간 부족하고 오래된 것 같습니다)를 확인하고 를 참조하세요 /etc/mkinitrd.

두 번째 경우에는 귀하의 접근 방식이 합리적인 것 같습니다.

답변3

과거에 원격 루트 파일 시스템 수정에 사용했던 방법은 램디스크에 경량 OS를 설정한 다음(예: a를 설치 tmpfs한 다음 debootstrapping하여) pivot_root해당 램디스크로 실행하는 것입니다. 일부 정리를 통해 루트 파일 시스템을 마운트 해제하고 계속 변경할 수 있습니다. 이 모든 작업은 언제든지 시스템을 재부팅할 필요 없이 실시간으로 수행할 수 있습니다. 물론 시스템을 깨끗한 상태로 되돌리려면 최종 재부팅을 수행하는 것이 좋습니다.

이 방법을 사용하면 프로세스 중에 원격 연결을 유지할 수 있고 변경 시 발생할 수 있는 문제를 해결할 수 있다는 장점이 있습니다. 재부팅하기 전에 수정된 파일 시스템을 마운트해 볼 수도 있습니다.

pivot_root매우 포괄적인 사용자 가이드 가 있습니다.이 비슷한 질문에 대한 대답. 이 답변은 기존 시스템의 핵심 부분을 램디스크에 복사합니다. 이렇게 하면 SSH 액세스 및 기타 도구를 더 쉽게 유지할 수 있습니다.

관련 정보