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