Entendendo subvolumes no BTRFS

Já usei o OpenSUSE Tumbleweed por um mês e gostei das possibilidades de snapshots. O programa snapper resolve de forma definitiva a organização para deletar snapshots antigos e garimpar informações sobre alterações, inclusive com um diff como opção para visualizar diferenças entre versões de arquivo.

Porém tentei entender a lógica dos subvolumes e me perdi diversas vezes. Nessa última semana me propuz a masterizar esse assunto e como exercício alterei uma instalação do linux Mint na máquina virtual de uma instalação padrão (apenas uma partição EFI e uma EXT4) para uma instalação com suporte a snapshots usando o snapper. Quebrei o sistema diversas vezes, consertei e aprendi bastante. Não vou fazer disso um tutorial dessa transformação, mas sim condensar informações que não são corriqueiras em tutoriais sobre o assunto mas que são de fundamental importância para saber como funcionam os subvolumes. Foram pontos que eu me bati para entender.

1) Volume BTRFS sem subvolumes

Mantra: O ID de uma partição BTRFS sem subvolumes é 5! O ID do volume é 5. Por que 5? Não sei, mas é cinco. É um número mágico quando se trata de btrfs, portanto lembre-se dessa lição. O nome desse “subvolume” é especial: (FS_TREE) e eu vou chamá-lo de Árvore.

2) O que acontece quando monto uma partição btrfs sem especificar ID ou nome de subvolume?

Simples, todo volume btrfs guarda uma informação de ID-padrão, ou Default-ID. Se nenhum subvolume foi criado, essa variável guarda o ID 5. Ao montar o volume btrfs, o sistema pega o valor do id-padrão e monta o subvolume com essa id. No caso de não haver subvolumes, é montada a árvore do sistema de arquivos (FS_TREE). (Resposta continua no ITEM 5)

3) O que acontece quando eu crio um subvolume?

Primeiro, lembre-se que você cria um subvolume num sistema de arquivos que foi montado. Portanto o subvolume criado vira um filho do subvolume em questão. Se é o primeiro subvolume que você criou, ele vai ser filho do ID 5! O ID desse primeiro subvolume é geralmente algo perto de 250, mas provavelmente será referenciado pelo nome que foi escolhido. Se você voltar na pasta onde montou o btrfs, verá que apareceu um diretório com o mesmo nome do subvolume. Não se engane, aquele não é um diretório comum, é um subvolume! Para lembrar esse fato, duas abordagens são mais costumeiras:

  1. Dar nomes aos subvolumes que comecem com @, todos eles filhos da Árvore (o id 5). Assim terá na Árvore os subvolumes @rootfs, @home, @snapshots, @var_log, etc…
  2. Criar um subvolume de nome @, e criar todos os demais subvolumes dentro desse subvolume sem @ no nome. Para isso cria-se o subvolume @, depois cria-se novos subvolumes nele. Assim a referência desses subvolumes será @/home, @/.snapshots, @/usr/local . Nesse caso o subvolume pai do subvolume @/home não será o 5, mas o ID do @.

4) O que acontece quando monto uma partição btrfs especificando o nome de subvolume ou id?

Simples, no ponto de montagem especificado será montado o subvolume também especificado. Se não houver subvolume com esse ID ou nome, será retornado erro.

5) O que acontece quando monto uma partição btrfs sem especificar ID ou nome de subvolume?

O sistema irá montar o subvolume especificado no ID-Padrão. Agora que já há diversos subvolumes na partição o valor do id-padrão é importante. Você provavelmente vai querer mudar o ID-Padrão para o subvolume que escolheu ser o raiz do seu sistema operacional. Costumeiramente é o subvol @rootfs ou então o @. Assim quando o kernel montar o seu sistema de arquivos, já montará a raiz do sistema. Também não precisará alterar o seu /etc/fstab, deixando o ponto de montagem do / sem especificar subvolumes. Em sistemas que terão snapshots, também costuma-se deixar o ID-Padrão para o subvolume da atual versão dos arquivos.

6) Mas o GRUB? Como especificar o subvolume durante a inicalização?

O GRUB só vê a Árvore, ele só “monta” o ID 5. Então refira-se aos arquivos como se estivesse montando o subvolid=5. Para chamar o kernel, o comando ficará linuxefi (hd0,gpt2)/@rootfs/boot/vmlinuz options ou então linuxefi /@rootfs/boot/vmlinuz options caso já tenha especificado anteriormente a variável “root”.

  • Dica: É costume criar um ponto de montagem /btrfs/ para montar a Árvore (subvolid=5). Isso facilita a visualização de subvolumes bem como operações de movimentação (renomear) dos subvolumes.

Conteúdo disponível colaborativamente em GitHub - deleterium/TutoraisBTRFS: Tutoriais e exercícios para entender o funcionamento do sistema de arquivos BTRFS.

7 curtidas

Exercícios

1) Criar, formatar e montar um volume btrfs em arquivo de imagem no seu diretório de usuário.

mkdir testesBTRFS
cd testesBTRFS
truncate -s 200M imagem.img
mkfs.btrfs -L MinhaImagemBTRFS imagem.img
mkdir imagemMontada
sudo mount -o loop imagem.img imagemMontada/

Notas: O comando truncate somente aloca espaço no disco, portanto o conteúdo do arquivo é desconhecido. O mkfs.btrfs faz a formatação desse espaço reservado para organizar o sistema de arquivos e gravar a informação de espaço livre. Se não há esse comando instale o pacote btrfs-progs ou btrfs-tools (depende da distribuição). A opção -o loop no comando mount serve para montar arquivos como se fossem dispositivos de bloco.

2) Criar dois subvolumes, @raiz e @home.

sudo btrfs subvolume create imagemMontada/@raiz
sudo btrfs subvolu crea imagemMontada/@home

Nota: As opções do comando btrfs podem ser abreviadas desde que não causem confusão com outras opções.

3) Verificar os ID’s dos subvolumes criados

sudo btrfs subvol list ./imagemMontada

4) Qual o ID padrão do volume btrfs?

sudo btrfs subv get-default ./imagemMontada

5) Crie um diretório e copie um arquivo para dentro do imagemMontada:

mkdir ./imagemMontada/novodir
cp /etc/fstab ./imagemMontada/novodir

Nota: Saber trabalhar com permissões de arquivos é pré-requisito para esse tutorial. Caso não saiba veja a cola: sudo chown SeuUsuario imagemMontada/.

6) Liste o conteúdo da imagemMontada:

ls -la ./imagemMontada
Nota: Além do diretório criado também há “diretórios” que são subvolumes!

7) Copie um arquivo para um subvolume sem precisar montá-lo especificamente

sudo cp /etc/profile ./imagemMontada/@raiz
ls -la ./imagemMontada/@raiz

Nota: O autocompletar não funciona muito bem com o @, portanto as vezes tem que escrever tudo…

8) Monte um subvolume:

mkdir subvolumeMontado
sudo mount -o loop,[email protected] imagem.img ./subvolumeMontado

Nota: A opção loop só e necessária por causa do arquivo ser imagem. Como o arquivo imagem.img já está montado, é possível também montar usando o dispositivo de bloco já configurado. O comando seria sudo mount -o [email protected] /dev/loop0 ./subvolumeMontado .

9) Liste o conteúdo do subvolume Montado

ls -la ./subvolumeMontado

Nota: Veja que já está lá o arquivo que foi copiado via Árvore!

10) Altere o id-padrão do volume para o subvolume @home

sudo btrfs sub li ./imagemMontada
sudo btrfs subvolume set-default XXX ./imagemMontada

Nota: Substitua o valor XXX pelo ID mostrado pelo list.

11) Liste o id-padrão do subvolume @raiz

sudo btrfs subvolume get-default ./subvolumeMontado

Nota: Ao se alterar o ID-padrão de qualquer subvolume, será alterado o ID-padrão do volume como um todo. Da mesma forma pegar a variável id-padrão de qualquer subvolume retornará o valor do id-padrão da Árvore.

12) Desmonte tudo

sudo umount ./imagemMontada
sudo umount ./subvolumeMontado

13) Monte a imagem sem especificar subvolume e liste seu conteúdo

sudo mount -o loop imagem.img ./imagemMontada
ls -la ./imagemMontada

Nota: Como era de se esperar, foi montado o subvolume @home, que está vazio.

14) Liste os subvolumes do diretório imagemMontada

sudo btrfs subvo lis ./imagemMontada

Nota: Foram mostrados todos os subvolumes da Árvore. Talvez alguns esperassem que fosse mostrado apenas os subvolumes do subvolume @home, mas não é assim que funciona. O list sempre mostra todos os subvolumes!

15) Crie um arquivo e um subvolume no subvolume @home

sudo touch ./imagemMontada/arquivo.txt
sudo btrfs subv creat ./imagemMontada/temp-files

16) Liste o conteúdo do diretório imagemMontada

ls -la ./imagemMontada

Nota: Essa é uma estratégia que pode ser usada para snapshots, onde os subvolumes não são monitorados. Neste caso um futuro snapshot do @home não conterá os arquivos dentro do temp-files.

17) Crie mais um subvolume na Árvore, nomeado @tmp.

Nota: a árvore não está montada, então primeiro teremos que montá-la para depois criar o subvolume. Não é possível acessá-la pelo ponto de montagem imagemMontada, pois ele está montado como um subvolume e não é possível acessar volumes de hieraquia anterior a ele.

mkdir arvoreMontada
sudo mount -o loop,subvolid=5 imagem.img ./arvoreMontada
sudo btrfs subvol create ./arvoreMontada/@tmp
sudo btrfs sub list ./arvoreMontada

Nota: Número mágico 5 aparecendo aqui para montar a Árvore, pois não é possível montá-la pelo nome. Note também que com a árvore montada é possível criar subvolumes em qualquer subvolume! Outro ponto é perceber o relacionamento dos subvolumes, com o top level indicando o subvolume pai. Neste caso apenas o temp-files não é filho direto da árvore, mas sim do subvolume @home (perceba pelo id do top level)

18) Renomeie o subvolume @raiz para @rootfs

Nota: Não existe um comando específico do btrfs para renomear o volume. Porém mover o subvolume como se fosse um diretório resolve a situação. Para essas operações monte a Árvore. Mover um subvolume não altera seu ID, então se ele for o ID-padrão, continuará sendo.

mv ./arvoreMontada/@raiz ./arvoreMontada/@rootfs
sudo btrfs sub list ./arvoreMontada

19) Mova o subvolume @tmp para dentro do subvolume @home, renomeando-o para tmp

sudo mv ./arvoreMontada/@tmp ./arvoreMontada/@home
sudo mv ./arvoreMontada/@home/@tmp ./arvoreMontada/@home/tmp
sudo btrfs sub list ./arvoreMontada

Nota: Mover um subvolume para dentro de outro subvolume não altera seu ID, mas altera o subvolume pai. Veja como o top level do subvolume tmp mudou.

20) Monte o subvolume padrão e crie um arquivo de 120MB

sudo mount -o loop imagem.img ./imagemMontada
truncate -s 120M ./imagemMontada/arquivogrande.lixo
ls -la ./imagemMontada/arquivogrande.lixo

21) Crie uma cópia desse arquivo no subvolume temp-files.

cp ./imagemMontada/arquivogrande.lixo ./imagemMontada/tmp-files

Nota: Como era de se esperar, não há espaço suficiente no disco para dois arquivos de 120M, a imagem foi criada com 200MB. Porém uma das vantagens do btrfs é que ele não precisa copiar o conteúdo, ele pode apenas indicar que o mesmo conteúdo está em outro lugar do disco. Para tal usamos a opção –reflink=always ao copiar.

cp --reflink=always ./imagemMontada/arquivogrande.lixo ./imagemMontada/tmp-files

A cópia foi efetuada! Esse é o princípio de funcionamento dos snapshots, onde uma grande quantidade de arquivos parece estar duplicada, mas guardam suas referências de conteúdo.

22) Remova o arquivo do volume padrão e verifique o espaço livre:

rm ./imagemMontada/arquivogrande.lixo
df ./imagemMontada

Nota: O espaço livre não foi liberado pois o conteúdo ainda é referenciado em outro local.

23) Remova o arquivo do subvolume e verifique o espaço livre:

rm ./imagemMontada/tmp-files/arquivogrande.lixo
df ./imagemMontada

Nota: Agora sim o espaço foi liberado. Lembre-se que o espaço só será liberado quando não houver nenhuma referência ao conteúdo do arquivo. Isso pode ser fácil quando há poucos subvolumes, mas quando há 50 snapshots fica difícil. Nessa hora que os programas que auxiliam essa tarefa entram em jogo, como o snapper. Mas isso é assunto para um próximo tutorial!

Exercícios solucionados

[email protected]:~$ # 1
[email protected]:~$ mkdir testesBTRFS
[email protected]:~$ cd testesBTRFS
[email protected]:~/testesBTRFS$ truncate -s 200M imagem.img
[email protected]:~/testesBTRFS$ mkfs.btrfs -L MinhaImagemBTRFS imagem.img
btrfs-progs v4.15.1
See http://btrfs.wiki.kernel.org for more information.

Label:              MinhaImagemBTRFS
UUID:               0e507c12-de93-4d14-be5a-c361660af3ce
Node size:          16384
Sector size:        4096
Filesystem size:    200.00MiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP              32.00MiB
  System:           DUP               8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1   200.00MiB  imagem.img

[email protected]:~/testesBTRFS$ mkdir imagemMontada
[email protected]:~/testesBTRFS$ sudo mount -o loop imagem.img imagemMontada/
[sudo] senha para john:     
[email protected]:~/testesBTRFS$ # 2
[email protected]:~/testesBTRFS$ sudo btrfs subvolume create imagemMontada/@raiz
Create subvolume 'imagemMontada/@raiz'
[email protected]:~/testesBTRFS$ sudo btrfs subvolu crea imagemMontada/@home
Create subvolume 'imagemMontada/@home'
[email protected]:~/testesBTRFS$ # 3
[email protected]:~/testesBTRFS$ sudo btrfs sub list ./arvoreMontada
ID 256 gen 18 top level 5 path @raiz
ID 257 gen 25 top level 5 path @home
[email protected]:~/testesBTRFS$ # 4
[email protected]:~/testesBTRFS$ sudo btrfs subvolume get-default ./imagemMontada
ID 5 (FS_TREE)
[email protected]:~/testesBTRFS$ # 5
[email protected]:~/testesBTRFS$ mkdir ./imagemMontada/novodir
mkdir: não foi possível criar o diretório “./imagemMontada/novodir”: Permissão negada
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada/
total 16
drwxr-xr-x 1 root root 20 fev 29 10:56 .
drwxr-xr-x 1 john john 46 fev 29 10:56 ..
drwxr-xr-x 1 root root  0 fev 29 10:59 @home
drwxr-xr-x 1 root root  0 fev 29 10:59 @raiz
[email protected]:~/testesBTRFS$ sudo chown john:john imagemMontada/.
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada/
total 16
drwxr-xr-x 1 john john 20 fev 29 10:56 .
drwxr-xr-x 1 john john 46 fev 29 10:56 ..
drwxr-xr-x 1 root root  0 fev 29 10:59 @home
drwxr-xr-x 1 root root  0 fev 29 10:59 @raiz
[email protected]:~/testesBTRFS$ mkdir ./imagemMontada/novodir
[email protected]:~/testesBTRFS$ cp /etc/fstab ./imagemMontada/novodir
[email protected]:~/testesBTRFS$ # 6
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada/
total 16
drwxr-xr-x 1 john john 34 fev 29 11:04 .
drwxr-xr-x 1 john john 46 fev 29 10:56 ..
drwxr-xr-x 1 root root  0 fev 29 10:59 @home
drwxr-xr-x 1 john john  0 fev 29 11:04 novodir
drwxr-xr-x 1 root root  0 fev 29 10:59 @raiz
[email protected]:~/testesBTRFS$ # 7
[email protected]:~/testesBTRFS$ sudo cp /etc/profile ./imagemMontada/@raiz
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada/@raiz
total 20
drwxr-xr-x 1 root root  14 fev 29 11:16 .
drwxr-xr-x 1 john john  34 fev 29 11:04 ..
-rw-r--r-- 1 root root 581 fev 29 11:16 profile
[email protected]:~/testesBTRFS$ # 8
[email protected]:~/testesBTRFS$ mkdir subvolumeMontado
[email protected]:~/testesBTRFS$ sudo mount -o loop,[email protected] imagem.img ./subvolumeMontado
[email protected]:~/testesBTRFS$ # 9
[email protected]:~/testesBTRFS$ ls -la ./subvolumeMontado
total 8
drwxr-xr-x 1 root root  24 fev 29 11:17 .
drwxr-xr-x 1 john john  78 fev 29 11:22 ..
-rw-r--r-- 1 root root 581 fev 29 11:16 profile
[email protected]:~/testesBTRFS$ # 10
[email protected]:~/testesBTRFS$ sudo btrfs sub li ./imagemMontada
ID 256 gen 18 top level 5 path @raiz
ID 257 gen 10 top level 5 path @home
[email protected]:~/testesBTRFS$ sudo btrfs subvolume set-default 257 ./imagemMontada
[email protected]:~/testesBTRFS$ # 11
[email protected]:~/testesBTRFS$ sudo btrfs subvolume get-default ./subvolumeMontado
ID 257 gen 10 top level 5 path @home
[email protected]:~/testesBTRFS$ 
[email protected]:~/testesBTRFS$ # 12
[email protected]:~/testesBTRFS$ sudo umount ./imagemMontada
[email protected]:~/testesBTRFS$ sudo umount ./subvolumeMontado
[email protected]:~/testesBTRFS$ # 13
[email protected]:~/testesBTRFS$ sudo mount -o loop imagem.img ./imagemMontada
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada
total 0
drwxr-xr-x 1 root root  0 fev 29 10:59 .
drwxr-xr-x 1 john john 78 fev 29 11:22 ..
[email protected]:~/testesBTRFS$ # 14
[email protected]:~/testesBTRFS$ sudo btrfs subvo lis ./imagemMontada
ID 256 gen 18 top level 5 path @raiz
ID 257 gen 10 top level 5 path @home
[email protected]:~/testesBTRFS$ # 15
[email protected]:~/testesBTRFS$ sudo touch ./imagemMontada/arquivo.txt
[email protected]:~/testesBTRFS$ sudo btrfs subv creat ./imagemMontada/temp-files
Create subvolume './imagemMontada/temp-files'
[email protected]:~/testesBTRFS$ # 16
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada
total 0
drwxr-xr-x 1 root root 42 fev 29 11:51 .
drwxr-xr-x 1 john john 78 fev 29 11:22 ..
-rw-r--r-- 1 root root  0 fev 29 11:51 arquivo.txt
drwxr-xr-x 1 root root  0 fev 29 11:51 temp-files
[email protected]:~/testesBTRFS$ # 17
[email protected]:~/testesBTRFS$ mkdir arvoreMontada
[email protected]:~/testesBTRFS$ sudo mount -o loop,subvolid=5 imagem.img ./arvoreMontada
[email protected]:~/testesBTRFS$ sudo btrfs subvol create ./arvoreMontada/@tmp
Create subvolume './arvoreMontada/@tmp'
[email protected]:~/testesBTRFS$ sudo btrfs sub list ./arvoreMontada
ID 256 gen 18 top level 5 path @raiz
ID 257 gen 25 top level 5 path @home
ID 258 gen 24 top level 257 path @home/temp-files
ID 259 gen 26 top level 5 path @tmp
[email protected]:~/testesBTRFS$ # 18
[email protected]:~/testesBTRFS$ mv ./arvoreMontada/@raiz ./arvoreMontada/@rootfs
[email protected]:~/testesBTRFS$ sudo btrfs sub list ./arvoreMontada
ID 256 gen 18 top level 5 path @rootfs
ID 257 gen 25 top level 5 path @home
ID 258 gen 24 top level 257 path @home/temp-files
ID 259 gen 26 top level 5 path @tmp
[email protected]:~/testesBTRFS$ 
[email protected]:~/testesBTRFS$ # 19
[email protected]:~/testesBTRFS$ sudo mv ./arvoreMontada/@tmp ./arvoreMontada/@home
[email protected]:~/testesBTRFS$ sudo mv ./arvoreMontada/@home/@tmp ./arvoreMontada/@home/tmp
[email protected]:~/testesBTRFS$ sudo btrfs sub list ./arvoreMontada
ID 256 gen 28 top level 5 path @rootfs
ID 257 gen 28 top level 5 path @home
ID 258 gen 28 top level 257 path @home/temp-files
ID 259 gen 28 top level 257 path @home/tmp
[email protected]:~/testesBTRFS$ # 20
[email protected]:~/testesBTRFS$ sudo dd if=/dev/urandom of=./imagemMontada/arquivogrande.lixo bs=1M count=100
100+0 registros de entrada
100+0 registros de saída
104857600 bytes (105 MB, 100 MiB) copiados, 1,756 s, 59,7 MB/s
[email protected]:~/testesBTRFS$ ls -la ./imagemMontada
total 102400
drwxr-xr-x 1 root root        62 fev 29 13:41 .
drwxr-xr-x 1 john john       104 fev 29 11:55 ..
-rw-r--r-- 1 root root 104857600 fev 29 13:41 arquivogrande.lixo
drwxr-xr-x 1 root root         0 fev 29 13:34 temp-files
drwxr-xr-x 1 root root         0 fev 29 13:34 tmp

[email protected]:~/testesBTRFS$ # 21
[email protected]:~/testesBTRFS$ sudo cp ./imagemMontada/arquivogrande.lixo ./imagemMontada/tmp
cp: erro de escrita de './imagemMontada/tmp/arquivogrande.lixo': Não há espaço disponível no dispositivo
[email protected]:~/testesBTRFS$ sudo cp --reflink=always ./imagemMontada/arquivogrande.lixo ./imagemMontada/tmp
[email protected]:~/testesBTRFS$ # 22
[email protected]:~/testesBTRFS$ ls -laR ./imagemMontada/
./imagemMontada/:
total 204800
drwxr-xr-x 1 root root        80 fev 29 13:43 .
drwxr-xr-x 1 john john       104 fev 29 11:55 ..
-rw-r--r-- 1 root root 104857600 fev 29 13:41 arquivogrande.lixo
drwxr-xr-x 1 root root         0 fev 29 13:56 temp-files
drwxr-xr-x 1 root root        36 fev 29 13:57 tmp

./imagemMontada/temp-files:
total 0
drwxr-xr-x 1 root root  0 fev 29 13:56 .
drwxr-xr-x 1 root root 80 fev 29 13:43 ..

./imagemMontada/tmp:
total 102400
drwxr-xr-x 1 root root        36 fev 29 13:57 .
drwxr-xr-x 1 root root        80 fev 29 13:43 ..
-rw-r--r-- 1 root root 104857600 fev 29 13:58 arquivogrande.lixo
[email protected]:~/testesBTRFS$ # 23
[email protected]:~/testesBTRFS$ sudo btrfs filesystem usage ./imagemMontada
Overall:
    Device size:		 200.00MiB
    Device allocated:		 188.00MiB
    Device unallocated:		  12.00MiB
    Device missing:		     0.00B
    Used:			 100.59MiB
    Free (estimated):		   8.00MiB	(min: 8.00MiB)
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		  16.00MiB	(used: 0.00B)

Data,single: Size:108.00MiB, Used:100.00MiB
   /dev/loop0	 108.00MiB

Metadata,DUP: Size:32.00MiB, Used:288.00KiB
   /dev/loop0	  64.00MiB

System,DUP: Size:8.00MiB, Used:16.00KiB
   /dev/loop0	  16.00MiB

Unallocated:
   /dev/loop0	  12.00MiB
[email protected]:~/testesBTRFS$ sudo btrfs filesystem du ./imagemMontada
     Total   Exclusive  Set shared  Filename
     0.00B       0.00B           -  ./imagemMontada/temp-files
 100.00MiB       0.00B           -  ./imagemMontada/tmp/arquivogrande.lixo
 100.00MiB       0.00B           -  ./imagemMontada/tmp
 100.00MiB       0.00B           -  ./imagemMontada/arquivogrande.lixo
 200.00MiB       0.00B   100.00MiB  ./imagemMontada
[email protected]:~/testesBTRFS$ # 24
[email protected]:~/testesBTRFS$ sudo rm ./imagemMontada/arquivogrande.lixo
[email protected]:~/testesBTRFS$ sudo btrfs filesystem sync ./imagemMontada
[email protected]:~/testesBTRFS$ sudo btrfs file us ./imagemMontada
Overall:
    Device size:		 200.00MiB
    Device allocated:		 188.00MiB
    Device unallocated:		  12.00MiB
    Device missing:		     0.00B
    Used:			 100.59MiB
    Free (estimated):		   8.00MiB	(min: 8.00MiB)
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		  16.00MiB	(used: 0.00B)

Data,single: Size:108.00MiB, Used:100.00MiB
   /dev/loop0	 108.00MiB

Metadata,DUP: Size:32.00MiB, Used:288.00KiB
   /dev/loop0	  64.00MiB

System,DUP: Size:8.00MiB, Used:16.00KiB
   /dev/loop0	  16.00MiB

Unallocated:
   /dev/loop0	  12.00MiB
[email protected]:~/testesBTRFS$ # 25
[email protected]:~/testesBTRFS$ sudo rm ./imagemMontada/tmp/arquivogrande.lixo
[email protected]:~/testesBTRFS$ sudo btrfs filesystem sync ./imagemMontada
[email protected]:~/testesBTRFS$ sudo btrfs filesystem usage ./imagemMontada
Overall:
    Device size:		 200.00MiB
    Device allocated:		  92.00MiB
    Device unallocated:		 108.00MiB
    Device missing:		     0.00B
    Used:			 384.00KiB
    Free (estimated):		 120.00MiB	(min: 66.00MiB)
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		  16.00MiB	(used: 32.00KiB)

Data,single: Size:12.00MiB, Used:0.00B
   /dev/loop0	  12.00MiB

Metadata,DUP: Size:32.00MiB, Used:176.00KiB
   /dev/loop0	  64.00MiB

System,DUP: Size:8.00MiB, Used:16.00KiB
   /dev/loop0	  16.00MiB

Unallocated:
   /dev/loop0	 108.00MiB
[email protected]:~/testesBTRFS$ 
8 curtidas