읽기 전용 / etc 쓰기 가능하게 만들기


11

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

/ 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 명령을 통해 수행해야합니다.

답변:


19

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).


일부 내장형 시스템은 /etc부팅시 nvram의 특정 설정에 따라 파일을 무시할 수 있습니다 . 따라서 파일을 변경하려면 /etc"magic"시스템 변수를 설정하고 nvram에 커밋 한 다음 구성을 다시로드하거나 다시 부팅하십시오. 대부분의 가정용 라우터는 이와 같이 작동합니다. 그러나 정확한 메커니즘과 명령은 시스템마다 다릅니다.
— Satō Katsura

완전한! 장치는 오버레이 마운트를 지원하지 않지만 / etc의 파일에 사용자 정의 파일을 바인딩하면 매우 효과적입니다! 당신의 도움을 주셔서 감사합니다.
— Joshua Walsh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.