시작 후 파일 손실을 방지하려면 debian FS 읽기 전용 및 쓰기 가능 계층을 tmpfs에서 aufs로 전환해야 합니다.

시작 후 파일 손실을 방지하려면 debian FS 읽기 전용 및 쓰기 가능 계층을 tmpfs에서 aufs로 전환해야 합니다.

저는 Debian 9 기반 임베디드 시스템에서 이 작업을 수행하려고 합니다. 루트 파일 시스템은 /etc/fstab에 설치됩니다.

# /etc/fstab: static file system information.
#
/dev/mmcblk1p1  /  ext4  noatime,errors=remount-ro  0  1
debugfs  /sys/kernel/debug  debugfs  defaults  0  0

현재 파일 시스템은 다음과 같습니다.

Filesystem      Size  Used Avail Use% Mounted on
udev            215M     0  215M   0% /dev
tmpfs            49M  6.0M   43M  13% /run
/dev/mmcblk1p1  3.5G  1.9G  1.4G  59% /
tmpfs           242M     0  242M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           242M     0  242M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1000

이제 해야 할 일은 Unionfs(또는 aufs) + ext4를 사용하여 보다 탄력적인 마운트 시스템을 만드는 것입니다. /ext4는 정전으로 인해 실패하고 파일 손상이 발생할 수 있기 때문입니다. 여기서의 아이디어는 하단에 읽기 전용 파일 레이어를 두고 상단에 /home/debian 및 시스템에서 쓰기 위해 필요한 기타 파일(예: var/log)에 대한 쓰기 가능한 파일 레이어를 두는 것입니다. 예배 규칙서). 임베디드 시스템에서 작동하는 ext4는 주기적으로 예상치 못한 정전이 발생할 수 있으며, 이로 인해 많은 디스크 문제/손상이 발생할 수 있다는 말을 들었습니다. 특히 애플리케이션이 실행되는 동안 디스크에 많은 쓰기 작업을 수행하게 되기 때문입니다.(관련된). ext4에 저널링 기능이 존재하더라도 이것이 완전히 사실입니까?

몇 시간의 연구 끝에 후크/스크립트 등을 생성하여 /usr/share/initramfs-tools를 탐색하는 것이 권장된다는 것을 알았습니다. 새 스크립트를 생성하고 시스템을 부팅한 후, 내가 원했던 것과 비슷한 결과를 얻었습니다.

Filesystem      Size  Used Avail Use% Mounted on
udev            215M     0  215M   0% /dev
tmpfs            49M  6.0M   43M  13% /run
/dev/mmcblk1p1  3.5G  1.9G  1.4G  59% /ro
root.rw         242M  8.5M  234M   4% /rw
root.union      242M  8.5M  234M   4% /
tmpfs           242M     0  242M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           242M     0  242M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1000

&& mount를 사용하면 새로 추가된 ro && rw 파일 시스템에 대해 다음과 같은 세부 정보를 얻을 수 있습니다.

/dev/mmcblk1p1  on  /ro                              type  ext4        (ro,relatime,data=ordered)
root.rw         on  /rw                              type  tmpfs       (rw,relatime)
root.union      on  /                                type  aufs        (rw,relatime,si=587d3414)

이것은 이제 /ro 디렉토리에 초기/읽기 전용 시스템을 만드는 측면에서 효과가 있었고 /rw에 쓰기 가능한 레이어를 설치했습니다. 여기서 문제는 새 파일/디렉토리를 생성하면 장치를 부팅한 후 사라진다는 것입니다. 이에 대해 더 깊이 파고들면 일반적으로 RAM에 사용되는 tmpfs를 사용하고 있다는 사실이 문제의 원인일 수 있다고 의심됩니다. 하지만 문제를 해결하기 위해 맨 위에 aufs(root.union)를 사용하는 데 문제가 있습니다. 그렇지 않습니다.

/rw 레이어가 시작 후 생성된 새로운 정보/파일을 유지하도록 하여 이 문제를 어떻게 해결할 수 있습니까? 내 시스템은 현재 읽기 전용이므로 스크립트로 가서 /rw를 aufs로 마운트하려고 할 때마다 장치를 부팅한 후 다시 돌아옵니다.

참고: 내 현재 설정은 현재 응용 프로그램의 로그가 내 /var/log/...에 기록되지 않고 장치 부팅 후 손실된다는 것을 의미합니까? 일부 응용 프로그램은 일반적으로 /rw 디렉터리의 /var/log/syslog에 기록되지만 시작 후 새 로그를 유지하는지, 아니면 시작 시 로그로 되돌리는지 확인할 수 없는 것 같습니다.

답변1

AFAIK, ext4의 로깅은 실제 손상이 거의 없으며 fsck를 통해 수정할 수 있음을 의미합니다. 나는 죽은 디스크(실제로 다음날 회전을 거부함) 외에는 ext4 손상을 겪은 적이 없습니다.

Linux의 캐시는 RAM이 백업 저장소가 있는 tmpfs 역할을 한다는 것을 의미합니다. 속도가 너무 느린 경우(플래시 드라이브를 사용하고 있으므로 놀랄 수 있음) fstab 에 추가하면 commit=<time>속도가 저하되어 데이터를 새로 고치는 데 걸리는 시간을 늘릴 수 있습니다.

프로그램이 작성하는 데 필요한 내용을 찾는 것은 컴퓨터 과학에서 중지 문제보다 더 복잡한 미해결 문제입니다. 장애 발생 시 마이그레이션할 수 있도록 유지해야 하는 항목을 별도의 파티션/디스크에 저장하면 어떨까요?

관련 정보