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