Em um sistema de arquivos cow como o btrfs, você pode conseguir isso usando subvolumes + snapshots ou cp com --reflink = sempre, isso efetivamente resultará no número de arquivos que você deseja, que consumiriam a mesma quantidade de espaço que um + alguma sobrecarga (mas sem um número insano de cópias ou instantâneos, especialmente combinados com pequenos tamanhos de arquivo, isso não deve ser percebido) até que sejam modificados; nesse caso, apenas as partes que foram alteradas serão armazenadas separadamente e o restante ainda será compartilhado. Em seguida, defina as permissões em cada um separadamente (para obter o que deseja, faça regularmente um instantâneo ou copie com permissões somente leitura (e, opcionalmente, monte-o no ro ou não em tudo, se for um instantâneo e se for um arquivo, use chattr + i (os usuários podem escreva ou modifique o arquivo, mesmo que tenha permissões de gravação) em uma cópia, se você for paranóico).