읽기 전용 /etc를 쓰기 가능으로 설정

읽기 전용 /etc를 쓰기 가능으로 설정

저는 Linux를 실행하는 임베디드 장치를 다루고 있습니다. 이 장치의 제조업체는 루트 파일 시스템을 읽기 전용으로 로드하도록 설정했습니다.

/etc/mtab에서:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

이는 새 사용자를 추가하는 등 /etc 내의 파일을 수정할 수 없음을 의미합니다.

루트 디렉터리를 다시 마운트해 보았습니다.

mount -o remount,rw -t squashfs /dev/root /

그런데 오류가 발생했어요

mount: cannot remount block device /dev/root read-write, is write-protected

이 오류를 찾아보니 사람들이 blockdev를 사용하라고 했습니다. 시스템에 blockdev가 설치되어 있지 않아서 크로스 컴파일하고 복사했습니다. 그런 다음 나는 달렸다

blockdev --setrw rootfs

하지만 다시 오류가 발생했습니다.

blockdev: cannot open rootfs: No such file or directory

아직 /etc가 아닌 경우 쓰기 가능하게 만들 수 있습니까? 시스템에 대한 루트 액세스 권한이 있지만 '오프라인'으로 파일 시스템에 액세스할 수 없습니다. 모든 변경 사항은 Bash 명령을 통해 수행해야 합니다.

답변1

squashfs읽기 전용 압축 파일 시스템입니다. 일단 생성되면 수정할 수 있는 규정이 없습니다. 따라서 기본 블록 장치를 쓰기 가능하게 만들 수 있더라도 여기에 쓸 수 없습니다. 수정 사항을 적용하여 전체 파일 시스템의 새로운 squashfs 이미지를 생성해야 합니다.불타다해당 파일 시스템이 저장된 저장 장치로 전송되는데, 이는 라이브 시스템에서 수행하기 어려울 수 있습니다.

또 다른 옵션은 에 다른 파일 시스템을 마운트하는 것입니다 /etc. 커널에서 지원하는 경우 통합 마운트를 통해 수행할 수 있습니다. 이는 일반적으로 두 파일 시스템을 하나의 파일 시스템으로 병합하여 변경 사항만 기록합니다.베이스읽기 전용 파일 시스템.

커널 구성에서 AUFS_FS 또는 OVERLAY_FS에 대한 지원을 확인하세요.

예를 들어 시스템에 영구 쓰기 가능한 저장소가 없는 경우 디렉터리를 통합 마운트합니다 /tmp(메모리에 쓰기는 가능하지만 재부팅 시 지속되지는 않음).tmpfs

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

그런 다음 /etc쓰기 가능하며 수정 사항은 실제로 에 저장됩니다 /tmp/etc/upper.

또는 수정하려는 파일이 몇 개뿐인 경우 쓰기 가능한 파일 시스템에 저장된 버전에서 해당 파일을 바인드 마운트할 수 있습니다(디렉터리뿐만 아니라 모든 파일에 마운트할 수 있습니다).

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

그러면 /etc/passwd쓰기가 가능해집니다. 물론 전체에 대해 그렇게 할 수도 있습니다 /etc. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).

관련 정보