btrfs - É perigoso desfragmentar o subvolume que possui somente instantâneos?

6

Se você abrir a seção defragment do btrfs-filesystem(8) , você veja a seguinte inscrição sinistra deixada pelos desenvolvedores:

Warning: Defragmenting with Linux kernel versions < 3.9 or ≥ 3.14-rc2 as well as with Linux stable kernel versions ≥ 3.10.31, ≥ 3.12.12 or ≥ 3.13.4 will break up the ref-links of COW data (for example files copied with cp --reflink, snapshots or de-duplicated data). This may cause considerable increase of space usage depending on the broken up ref-links.

Isso parece terrível. Um ponto de venda de btrfs é sua capacidade de criar instantâneos sem copiar tudo. Eu principalmente criar instantâneos de somente leitura.

Os arquivos de snapshots somente leitura também contam como “COW-data” ou a desduplicação de subvolume pai sobreviverá sem aumentar o espaço em disco?

    
por firegurafiku 24.10.2017 / 23:21

2 respostas

4

Sim, os arquivos em uma captura instantânea somente leitura contam como dados COW e contribuirão para o inchaço do espaço em disco causado pela desfragmentação.

Quando a desfragmentação acontece, os dados são copiados das extensões antigas para menos extensões novas. As novas extensões são distintas das extensões antigas. Todas as outras cópias do arquivo (em instantâneos, por exemplo) ainda apontam para as extensões antigas. Portanto, você tem dados inchados.

Existe um longo tópico sobre desfragmentação na lista de discussão, começando aqui que tem alguns pontos interessantes .

    
por 03.11.2017 / 16:09
3

A desfragmentação do Btrfs não quebra todas reflinks

Apenas as instâncias particulares em que você aponta. Portanto, se você tiver subvolume A e snapshots S1 e S2 desse subvolume A , a execução da desfragmentação em apenas subvolume A interromperá os reflexos entre ela e o instantâneos, mas S1 e S2 ainda compartilharão todos os dados que foram originalmente um com o outro. Se você fizer um terceiro instantâneo de A , ele compartilhará dados com A , mas não com S1 ou S2 (porque A não está mais compartilhando dados com S1 ou S2 ) .

Dado esse comportamento, você tem três casos possíveis ao falar sobre instantâneos persistentes:

  1. Você se preocupa com minimizar espaço usado, mas não está tão preocupado com o desempenho.
    Nesse caso, a única opção é não executar a desfragmentação .
  2. Você se preocupa com o desempenho , mas não com o uso do espaço. Nesse caso, desfragmentar tudo .
  3. Você se preocupa com o uso e o desempenho do espaço. Neste caso balanceado , eu pessoalmente sugiro desfragmentar apenas o subvolume de origem (portanto, subvolume apenas A na explicação acima) e fazer isso em um planejamento que coincida com a rotação de snapshot. A idéia é defragment antes de você tirar uma foto e em uma frequência que ofereça um bom equilíbrio entre o uso do espaço e o desempenho. Como regra geral, se você seguir esse caminho, comece a fazer a desfragmentação mensalmente, se estiver fazendo instantâneos diários ou semanais, ou a cada quatro instantâneos, se não, e então ajuste o intervalo com base em como isso impacta sua imagem. uso do espaço.

Fonte: Lista de discussão do Btrfs , conforme mencionado por Spacedog.

Btrfs desfragmenta instantâneo somente leitura

A partir da minha experiência de tentativa e erro, o btrfs desfragmentando instantâneos (para usar a nova compactação zstd) resultou em 100% Exclusivo e 0,00 bytes de dados compartilhados.

Antes de btrfs defragment :

# btrfs filesystem du -s /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/
     Total   Exclusive  Set shared  Filename
   1.41GiB     6.27MiB     1.41GiB  /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/

Após btrfs defragment :

# btrfs filesystem du -s /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/
     Total   Exclusive  Set shared  Filename
   1.42GiB     1.42GiB       0.00B  /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/

Os dados compartilhados diminuem para 0.00B

    
por 28.12.2017 / 12:14