Configurou um volume para o Firefox de acordo com a ideia em questão.
- Na inicialização, dois dispositivos zram são criados. O conteúdo de um volume de HDD é copiado para o primeiro. O segundo é usado como dispositivo copy-on-write para instantâneos;
- O diretório do perfil do Firefox é vinculado por links simbólicos ao volume mantido em zram0.
- Periodicamente, um script (abaixo) cria um instantâneo do dispositivo na memória (usando zram1 como copy-on-write), captura instantânea do volume do HDD e copia o instantâneo da memória para o volume do HDD.
Cada atualização leva cerca de 10 segundos (no caso de um pequeno número de alterações); a atualização completa é de 40 segundos.
Atualizar script:
#!/bin/bash
set -e
SOURCE_DEVICE=/dev/zram0
COW_DEVICE=/dev/zram1
SOURCE_SNAPSHOT_NAME=ffsnap
DESTINATION_VG=cryptie3
DESTINATION_VOL=ff
HASH_FILE=/tmp/ff.md5
MS=$(blockdev --getsize "$SOURCE_DEVICE")
WS=$(blockdev --getsize "$COW_DEVICE")
MN=$(printf '%d:%d' 'stat -c '0x%t 0x%T' "$SOURCE_DEVICE"')
WN=$(printf '%d:%d' 'stat -c '0x%t 0x%T' "$COW_DEVICE"')
dmsetup create $SOURCE_SNAPSHOT_NAME --table "0 $MS snapshot $MN $WN N 8"
trap "dmsetup remove --force --retry $SOURCE_SNAPSHOT_NAME" EXIT
T=$(date "+%s")
lvcreate $DESTINATION_VG/$DESTINATION_VOL --snapshot --name ${DESTINATION_VOL}_$T -L 100M
# You can just use "cat /dev/mapper/$SOURCE_SNAPSHOT_NAME > /dev/mapper/$DESTINATION_VG-$DESTINATION_VOL" here if you don't want to use hashed_update
if [ -e "$HASH_FILE" ]; then
/usr/local/bin/hashed_update /dev/mapper/$SOURCE_SNAPSHOT_NAME "$HASH_FILE" \
/dev/mapper/$DESTINATION_VG-$DESTINATION_VOL "${HASH_FILE}".new 65536
mv "${HASH_FILE}".new "$HASH_FILE"
else
/usr/local/bin/hashed_update /dev/mapper/$SOURCE_SNAPSHOT_NAME NULL \
/dev/mapper/$DESTINATION_VG-$DESTINATION_VOL "$HASH_FILE" 65536
fi
lvremove --force ${DESTINATION_VG}/${DESTINATION_VOL}_$T
hashed_update está aqui: link
Alguma atualização: 1. Não se esqueça de montar SOURCE_DEVICE
embora snapshot-origin
, não diretamente; 2. Agora eu uso o gerenciamento manual de snapshots de destino com a zona CoW persistente usando dmsetup
em vez de lvcreate / lvremove repetidos.
Ainda estou procurando ideias sobre como melhorá-lo ou para soluções estabelecidas que não consegui encontrar.