- When a file is modified in ZFS after a snapshot, will the snapshot be the same size and only the differences, or the whole file?
Os blocos que são diferentes aumentam o tamanho.
Isto significa que se um arquivo consiste em 100 blocos e você modifica um único byte (assumindo que um byte é menor que um bloco), um novo bloco será adicionado (total de 101) no final, seu arquivo antigo fará referência a blocos 1 para 100 (pode ser acessado somente leitura a partir do instantâneo) e seu arquivo novo / atual fará referência aos blocos 1 a 37 e 39 a 101 (ou qualquer outra combinação, dependendo da operação de modificação real).
Assim que você destruir o snapshot, o bloco 38 será marcado como livre e poderá ser sobrescrito (desde que nenhum outro snapshot faça referência a ele).
- When a file is moved in ZFS after a snapshot, will the snapshot remain essentially zero size?
Dentro do mesmo sistema de arquivos, sim, além dos metadados (as referências devem ser reorganizadas, por exemplo).
Entre sistemas de arquivos, é uma operação de cópia completa + exclusão, mesmo se os sistemas de arquivos estiverem no mesmo pool ou descendentes uns dos outros.
- When a file is renamed in ZFS after a snapshot, will the snapshot remain essentially zero size?
Sim, além dos metadados (por exemplo, seu novo nome deve estar registrado em algum lugar).
- When a file has a hardlinked copy of itself after a snapshot, will the snapshot remain essentially empty?
Você poderia ser mais específico aqui?
- There is suggestion that BTRFS is designed to do largely the same things as ZFS, would it then be expected to have the same behaviours in these conditions?
Eu não diria que faz tudo igual.
- When a Windows machine accesses the ZFS share remotely over SAMBA, will the same behaviour above hold true or does SAMBA a subset of the standard drive instructions i.e. a move becomes a copy+delete?
Você tem duas implementações possíveis para o compartilhamento de arquivos do Windows - o servidor CIFS desenvolvido pela Sun para Solaris e opensourced com OpenSolaris / illumos, ou a implementação Samba SMB que é usada em quase todas as distribuições GNU / Linux e sistemas BSD:
- A versão do Solaris é melhor adaptada aos recursos do ZFS (como a configuração de propriedades de compartilhamento diretamente nos sistemas de arquivos, a implementação de instantâneos do ZFS como versões anteriores do Windows.
- Por outro lado, a versão do Samba é mais cross-plattform e tem alguns recursos mais avançados como suporte (parcial) SMB3, IIRC.
Eu assumo que no segundo caso você tem praticamente o mesmo que em outros sistemas, embora eu não tenha testado.
- Is it possible to answer the questions above generically or are the answers all implementation-specific?
Você pode responder especificamente de acordo com o código que está no repositório illumos / OpenZFS (repositório Github) se você gosta de ler o código C, ou você pode respondê-lo geralmente de acordo com as páginas de manual e documentação. Por exemplo, as propriedades REFER, USED, etc. são explicadas em detalhes. As páginas de manual mais interessantes são man zpool
(hardware, layouts de disco, propriedades do pool), man zfs
(propriedades do sistema de arquivos, snapshots, clones), man chmod
(somente Solaris / illumos, ACLs de compartilhamento e arquivo) e man zdb
(depuração e análise).