O instantâneo pode ser visto como um caso especial, mas distinto, da cópia.
Não estou familiarizado com os detalhes do Btrfs, mas o seguinte se aplica ao ZFS, do qual o Btrfs atrai muita inspiração. Aparentemente Os snapshots do Btrfs são realmente de leitura / gravação , tornando-os mais semelhantes a Clones do sistema de arquivos ZFS , mas isso não altera sua relação com as cópias de arquivos.
Um instantâneo é uma cópia somente leitura, point-in-time, do estado do sistema de arquivos.
Isso funciona porque o Btrfs e o ZFS são os chamados sistemas de arquivos Copy On Write. Sempre que um bloco de dados é alterado, os dados alterados são gravados em um local no disco diferente da cópia original. A principal vantagem disso é que ela aumenta muito a confiabilidade: como muito poucos dados precisam ser sobrescritos, há uma possibilidade muito reduzida de um problema que leva à perda de dados. No entanto, também há outras vantagens. Uma dessas vantagens é que você pode fazer snapshots em nível de sistema de arquivos com eficiência. Uma desvantagem importante é que, à medida que seu armazenamento é preenchido, ele tende a aumentar muito a fragmentação de armazenamento à medida que o alocador de bloco se esforça para encontrar em algum lugar, em qualquer lugar, para armazenar fisicamente a cópia. De fato, é recomendado manter o uso do pool do ZFS abaixo de 80% , presumivelmente não pelo menos por esse motivo exato.
Um instantâneo diz basicamente ao código do sistema de arquivos "esses blocos ainda são necessários". Assim, eles não serão recuperados e potencialmente sobrescritos com novos dados. No entanto, eles ainda fazem referência aos mesmos blocos de dados antigos.
Agora, como isso é diferente de simplesmente fazer uma cópia usando o rsync, cp, cat ou o que for? É diferente porque até que os dados realmente mudem, nenhuma cópia física adicional dos dados é feita.
É como hardlinks em stereoids; a mesma cópia física em disco dos dados é usada ao acessar um arquivo com nomes diferentes. A diferença é que, com hardlinks, uma alteração no arquivo sob um nome se propaga para todas as outras cópias, pois elas realmente fazem referência aos mesmos blocos de dados. Com copy-on-write e snapshot, os blocos alterados só aparecem no local onde foram alterados. (Com snapshots somente leitura, isso significa na versão "atual" do arquivo.) Você também só precisa reescrever os blocos que foram realmente alterados; os blocos restantes são deixados exatamente onde estão. Para fazer coisas como fazer snapshot de arquivos contendo imagens de disco da VM por exemplo, isso pode fazer uma diferença maciça na quantidade de dados necessários para armazenar no disco.
Então, para recapitular:
- A captura instantânea exige apenas o espaço em disco exigido pelos blocos modificados. A cópia requer o número de cópias vezes o tamanho do arquivo.
- As capturas instantâneas são somente leitura ou leitura / gravação, dependendo do design do sistema de arquivos. As cópias são de leitura / gravação por design.
- As cópias são independentes. Os snapshots fazem referência aos mesmos blocos de dados que a versão atual do arquivo, até que a versão atual do arquivo seja alterada (no todo ou em parte).