Você pode usar o dm-snapshot ou o NBD no modo copy-on-write.
A solução dm-snapshot é fornecida aqui (desculpe por não repetir):
Quanto ao NBD, você pode instalar nbd-server
e nbd-client
e usá-lo da seguinte forma:
mount /mnt/storage # something with some free space
losetup --read-only /dev/sda1 /dev/loop0 # to ensure it's readonly
ln -s /dev/loop0 /mnt/storage/loop0
nbd-server 127.0.0.1@4242 /mnt/storage/loop0 -c
O link simbólico é necessário porque nbd-server insiste em armazenar o arquivo de cache de gravação temporário no mesmo local do arquivo que está sendo exibido. Então, sem o link, ele acabaria em /dev/
, o que não é útil.
Por fim, conecte-se a ele com o cliente:
nbd-client 127.0.0.1 4242 /dev/nbd0
O único problema com esta solução NBD é que ela usa bastante RAM (dependendo do tamanho do seu dispositivo), independentemente do armazenamento temporário disponível. Como fsck
em si também é bastante ávido por RAM, é possível acabar se você não tiver muita RAM instalada.