읽기 전용 파일 시스템을 사용하여 /etc 읽기/쓰기

읽기 전용 파일 시스템을 사용하여 /etc 읽기/쓰기

루트 파일 시스템을 읽기 전용으로 유지하고 시스템 구성을 읽기/쓰기 파티션에 유지하려는 임베디드 프로젝트에 대한 설정이 있습니다. 사용자는 프로그램을 설치할 수 없지만 구성을 수정할 수는 있습니다. 목차를 제외하면 대부분은 매우 간단합니다 /etc. 여기에는 시작 시 필요한 구성(예: fstab)과 변경할 수 있는 구성(예: passwd)이 포함되어 있습니다.

앞으로 나아가는 것이 최선의 선택인지 잘 모르겠습니다. 기본 /etc디렉토리를 갖고 부팅 후 여기에 마운트할 수 있나요? 모든 변수 구성 파일을 읽기/쓰기 파티션에 심볼릭 링크하는 것은 어떻습니까? 또 다른 더 나은 솔루션? 단순화를 위해 Raspberry Pi를 사용하여 이 작업을 수행하는 방법을 고려해보세요.

일부는 업데이트가 어떻게 처리되는지 (올바로) 물을 수 있습니다. 업데이트는 내장된 소프트웨어가 설치 방법을 알고 있는 루트 및 부팅 파티션의 압축되고 서명된 이미지입니다. 따라서 업그레이드 시 모든 변경 사항이 손실되므로 읽기 전용 루트 파일 시스템이 필요합니다.

답변1

나에게는 두 가지 실행 가능한 옵션이 있습니다. 첫 번째는 더 어렵습니다. btrfs를 사용할 수 있다면 두 번째 작업은 쉬울 것입니다.

파일 시스템 초기화

오늘날 Linux를 부팅하는 일반적인 방법은 다음을 사용하는 것입니다.파일 시스템 초기화. 기본적으로 실제 rootfs를 마운트하는 데 필요한 것만을 갖춘 최소한의 rootfs입니다. 바이너리와 구성은 /boot 아래에 저장된 아카이브에 압축되고 시스템 시작 시 첫 번째 rootfs로 tmpfs에 압축이 풀립니다.

즉, 임시 rootfs가 아카이브에서 로드되는 부팅 프로세스를 가질 수 있으며 커널이 init라는 실행 파일을 호출하는 위치를 수정할 수 있으며 수정이 가능하고 실제 루트를 마운트하고 다른 시스템 시작을 수행하도록 설계되었습니다. 운영.

이 부분에 대한 더 자세한 설명을 보려면 다음을 읽어보세요.아치 부팅 프로세스. (특히 5부(initramfs) 및 6부(초기 사용자 공간))

기회: initramfs는 무엇이든 될 수 있고 무엇이든 할 수 있습니다. 이것젠투 위키무엇이 가능한지에 대한 아이디어를 제공합니다.
나쁜 점: 쉽지 않습니다. 일반적인 방법은 initramfs-toolsDebian, mkinitcpioArch 또는 dracut기타 도구와 같은 일부 도구를 사용하여 initramfs를 만드는 것입니다. 구성 옵션이 있지만 별도의 /etc를 갖는 것은 특별합니다.

(다른 도구에 대해서는 initramfs-tools잘 모르겠습니다) 자신만의 마운트 등을 추가하는 것이 가능할 수도 있습니다. 일반적인 데비안 initramfs-tools은 기본적으로 초기 초기화로 마무리된 일련의 쉘 스크립트이며, 이 역시 단순한 쉘 스크립트입니다.

이 도구에는 initramfs에 사용자 정의 파일을 추가하는 데 사용할 수 있는 후크(이름 후크는 약간 오해의 소지가 있을 수 있습니다. 이러한 후크는 update-initramfs일반적으로 커널 업데이트 후 새 initraf가 생성될 때 실행됩니다)와 스크립트의 다양한 지점에서 실행되는 스크립트가 있습니다. initramfs. 초기 사용자 공간 초기화(후크라고 부르기 때문에 이번에도 약간 오해의 소지가 있는 이름입니다).

이 길로 가면 행운을 빌어요. 데비안에서 initramfs를 원하면 명령을 사용하여 initramfs를 추출하고(/boot/initrd.image*에 있음) unmkinitramfs다른 도구를 거기에 통합할 수 있는 방법을 조사할 수 있습니다(예: dropbear-initramfs.

BTRFS

또 다른 간단한 옵션은 btrfs를 루트 파일 시스템으로 사용하는 것입니다. btrfs를 사용할 수 있는 옵션이 있는 경우 읽기 전용으로 설정할 수 있는 하위 볼륨 기능을 활용할 수 있습니다.

btrfs 하위 볼륨은 별도의 파일 시스템처럼 마운트할 수 있지만 가장 좋은 점은 그럴 필요가 없다는 것입니다. 하위 볼륨을 마운트하면 아래의 모든 하위 볼륨이 자동으로 마운트됩니다.

매우 간단하게 /etc를 별도의 하위 볼륨으로 만들 수 있습니다. 설치 후에는 다음과 같은 작업을 수행합니다.

mv /etc /etc-tmp
btrfs subvolume create /etc
mv /etc-tmp/* /etc-tmp/.* /etc
rmdir /etc-tmp

이제 /etc가 다른 하위 볼륨과 다른 하위 볼륨에 있으므로 다음 명령을 사용하여 루트 하위 볼륨을 읽기 전용으로 만들고 /etc를 쓰기 가능으로 유지할 수 있습니다.

btrfs property set -t subvol / ro true

참고 : 동일한 방법을 사용하여 /usr을 읽기 전용으로 만들 수 있습니다. 기존 /usr을 밖으로 이동하고 하위 볼륨을 생성한 다음 내용을 다시 이동하려는 경우 /usr/bin이 현재 비어 있기 때문에 "mv: command notfound" 메시지가 표시됩니다. 이는 항상 재미있습니다.

관련 정보