읽기 전용 /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).

관련 정보