/var/logs를 tmpfs로 마운트하고 때로는 overlayfs를 사용하여 변경 사항을 저장합니다.

/var/logs를 tmpfs로 마운트하고 때로는 overlayfs를 사용하여 변경 사항을 저장합니다.

/var/logtmpfs를 마운트하는 대신 overlayfs를 사용하고 싶습니다.

  1. /var/log는 tmpfs에서 쓸 수 있지만 포함된 파일은 tmpfs가 마운트되기 전에 존재합니다. 이러한 오래된 파일은 tmpfs 메모리가 아니라 하위 레이어에 있습니다.
  2. 변경 사항만 tmpfs에 저장되고, 오래되고 수정되지 않은 파일은 SSD에 저장됩니다.
  3. 예를 들어 cron을 통해 SSD에 변경 사항을 쓰는 것이 가능할 때도 있습니다. 이렇게 하면 tmpfs 메모리가 확보됩니다.

따라서 결과는 다음과 같습니다. 로그는 RAM에 기록되고 이전 및 새 부팅 로그는 동일한 경로를 통해 액세스할 수 있습니다. 때로는 변경 사항이 스크립트를 통해 디스크에 기록됩니다.

요점은 작업 속도를 조금 높이고 SSD가 다중 쓰기로부터 보호되는지 확인하는 것입니다.

(로그가 아니라 루트에 대한 모든 변경 사항이 아닌 강아지 리눅스에서 비슷한 것을 보았습니다., 그러나 설치하지 않고는 동일한 작업을 수행할 수 없으며 문서는 도움이 되지 않습니다)

답변을 기반으로 브라우저 쿠키/캐시를 사용하여 동일한 작업을 수행하겠습니다. 그러나 브라우저가 닫히면 영구 쓰기가 완료됩니다. 브라우저 캐싱을 끌 수 있는 방법은 없습니다. 웹 개발에서 사용자가 캐싱으로 인해 발생하는 것과 동일한 오류를 발생시키려면 최소한 작은 캐시가 필요합니다.

답변1

/var/log를 덮어쓰도록 관리되었으며 SSD 로그 파일과 변경 사항이 표시됩니다. 모든 변경 사항은 RAM에 저장됩니다. 나중에 상위 레이어를 하위 레이어에 복사하여 시간별 변경 사항이 영구적으로 적용되는 동기화를 수행하겠습니다.

#prepare layers
sudo mkdir -p /var/log.tmpfs
sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512m,mode=0775 tmpfs /var/log.tmpfs
sudo mkdir -p /var/log.tmpfs/upper
sudo mkdir -p /var/log.tmpfs/work
sudo chown -R root:syslog /var/log.tmpfs
sudo chmod -R u=rwX,g=rwX,o=rX /var/log.tmpfs

#prepare overlay
sudo mkdir -p /var/log.overlay
sudo chown root:syslog /var/log.overlay
sudo chmod u=rwX,g=rwX,o=rX /var/log.overlay

#start overlay
sudo mount -t overlay -o rw,lowerdir=/var/log,upperdir=/var/log.tmpfs/upper,workdir=/var/log.tmpfs/work overlay /var/log.overlay
sudo mount --bind /var/log.overlay /var/log

변경 사항을 영구적으로 적용하려면 /var/log 바인딩을 해제하고 파일을 복사한 다음 다시 바인딩해야 합니다.

답변2

LeonidMew의 답변은 거의 완벽하지만 다시 설치하지 않고도 변경 사항을 지속적으로 적용할 수 있는 방법을 제공하고 싶습니다.

# prepare layers
sudo mkdir -p /var/log.tmpfs
sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512m,mode=0775 tmpfs /var/log.tmpfs
sudo mkdir -p /var/log.tmpfs/upper
sudo mkdir -p /var/log.tmpfs/work
sudo chown -R root:syslog /var/log.tmpfs
sudo chmod -R u=rwX,g=rwX,o=rX /var/log.tmpfs

# create a bind mount to the parent directory of the log folder
# since mount --bind does not mount recursively when used on the
# parent, we can use this to preserve access to the real /var/log
# on the disk
sudo mkdir -p /tmp/realvar
sudo mount --bind /var /tmp/realvar

# mount overlay using this new mountpoint as lowerdir
sudo mount -t overlay -o rw,lowerdir=/tmp/realvar/log,upperdir=/var/log.tmpfs/upper,workdir=/var/log.tmpfs/work overlay /var/log

이 방법을 사용하면 /tmp/realvar/log가 하위 디렉터리로 사용되고 오버레이가 설치되어 있어도 계속 액세스할 수 있습니다. 이 마운트 지점을 사용하여 변경 사항을 동기화할 수 있습니다.

sudo rsync -vaz --delete /var/log/ /tmp/realvar/log

좋은 아이디어를 주신 LeonidMew에게 감사드립니다. 이 개념은 Raspberry Pi가 예상치 못한 정전이 발생하는 경우 대부분의 로그를 유지하면서 SD 카드의 쓰기 주기를 줄이는 데 매우 유용합니다.

답변3

데몬을 동기화하기 위해 무엇이든 제안할 수 있습니까? 이것은 꽤 좋은 일입니다.

https://wiki.archlinux.org/index.php/anything-sync-daemon

문서에서,

everything-sync-daemon(asd)은 이제부터 tmpfs에서 동기화 대상이라는 사용자 지정 디렉터리를 관리하고 이를 주기적으로 물리적 디스크(HDD/SSD)에 다시 동기화하도록 설계된 작은 의사 데몬입니다. 이는 tmpfs 복사본과 미디어 바인딩된 백업을 동기화 상태로 유지하기 위한 심볼릭 링크 단계와 혁신적인 rsync 사용을 통해 달성됩니다. 또한 asd에는 다양한 충돌 복구 기능이 있습니다.

답변4

플래시 드라이브 쓰기를 최소화하기 위해 다음을 사용하고 있습니다.log2ram, 효과가 매우 좋습니다. 내가 제공한 일정에 따라 플래시 드라이브에 동기화됩니다.

관련 정보