Combinar dinamicamente o conteúdo de vários diretórios é exatamente o que é um conjunto de união (ou sistema de arquivos da união). Existem várias implementações no Linux, mas as mais comuns resolvem a duplicação entre as ramificações sempre preferindo uma ramificação específica (por exemplo, dir2/file
sempre tem precedência sobre dir1/file
se ambas existirem). No entanto, acabei de descobrir mergerfs que tem políticas mais flexíveis e, em particular, permite escolher o arquivo mais recente em uma base arquivo por arquivo.
A configuração:
mkdir dir1 dir2 merge
echo 1 >dir1/b; echo 2 >dir2/a
sleep 1
echo 1 >dir1/a; echo 2 >dir2/b; echo 2 >dir2/c
Agora nós montamos. Definimos a política newest
para acesso a arquivos ( search
) e modificação de metadados ( action
) e proíbem a criação ( create
) (você pode fazer a criação passar para uma das ramificações, seja sempre a mesma, ou com base no espaço disponível em disco, ou mesmo aleatoriamente!).
$ mergerfs -o category.action=newest,category.search=newest,category.create=erofs dir1:dir2:dir3 merge
$ head merge/?
==> merge/a <==
1
==> merge/b <==
2
==> merge/c <==
2
$ rm dir2/c
$ echo merge/?
a b
Para desmontar: fusermount -u merge