Normalmente, quando queremos liberar espaço em disco, desinstalamos programas que não usamos mais e excluímos arquivos temporários, assim como arquivos pessoais que não precisamos mais. O aplicativo Analisador de utilização do disco pode ajudar nessa faxina. Ele vem instalado por padrão no Linux Kamarada e em outras distribuições que usam a área de trabalho GNOME.
No meu caso, eu queria testar uma distribuição Linux, instalando-a ao lado do Linux Kamarada. Para isso, eu queria reduzir a partição raiz (/
) usando o Gparted. Vendo o espaço Usado na partição /dev/sda5
, pensei que seria interessante fazer uma faxina para liberar mais espaço para a nova distribuição:
Acontece que, ao usar o Analisador de utilização do disco para ver o que estava ocupando tanto espaço, ele me mostrou uma informação diferente do Gparted:
Segundo o Gparted, minha partição raiz usava 66 GB, mas segundo o Analisador de utilização do disco, ela usava 17 GB.
Isso pode acontecer em sistemas de arquivos BTRFS, o sistema de arquivos usado por padrão no openSUSE Leap, devido a algumas características próprias desse sistema de arquivos – como, por exemplo, a criação de instantâneos (snapshots) dos arquivos, compressão, armazenamento dos arquivos em blocos (chunks). Tudo isso faz com que o tamanho dos arquivos armazenados na partição não corresponda exatamente ao tamanho do espaço usado no disco. Dependendo do aplicativo e de como ele trate o sistema de arquivos BTRFS, ele vai mostrar como “espaço usado” um número ou outro.
Por isso, liberar espaço em sistemas de arquivos BTRFS pode não ser tão óbvio quanto apenas desinstalar programas e excluir arquivos.
Pesquisei e encontrei algumas medidas para liberar espaço específicas do BTRFS, e as compartilho a seguir, mostrando como fiz para resolver meu problema.
Verifique o espaço usado
Normalmente, quando queremos verificar o espaço livre no disco, usamos o comando df. No caso de um sistema de arquivos BTRFS, diante do que expus antes, para obtermos informações mais precisas e detalhadas, é melhor usarmos o comando btrfs, específico desse sistema de arquivos.
Use o comando btrfs para listar todas as partições BTRFS no seu computador:
1
# btrfs filesystem show | grep -C2 '/dev/.*'
Ele deve retornar algo parecido com:
1
2
3
Label: none uuid: 10d08ffc-e2d5-4501-9089-d4f29e7dc3d7
Total devices 1 FS bytes used 66.63GiB
devid 1 size 100.00GiB used 77.02GiB path /dev/sda5
O comando grep, da forma que usamos, destaca a partição em vermelho:
No meu caso, só há uma partição BTRFS, que é a /dev/sda5
.
Monte a partição BTRFS:
1
# mount -t btrfs -o subvol=/@ /dev/sda5 /mnt
Por fim, obtenha informações detalhadas sobre o espaço usado em disco:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# btrfs filesystem usage /mnt
Overall:
Device size: 100.00GiB
Device allocated: 77.02GiB
Device unallocated: 22.98GiB
Device missing: 0.00B
Used: 66.63GiB
Free (estimated): 32.55GiB (min: 32.55GiB)
Free (statfs, df): 32.55GiB
Data ratio: 1.00
Metadata ratio: 1.00
Global reserve: 112.59MiB (used: 0.00B)
Multiple profiles: no
Data,single: Size:73.98GiB, Used:64.41GiB (87.06%)
/dev/sda5 73.98GiB
Metadata,single: Size:3.01GiB, Used:2.23GiB (74.02%)
/dev/sda5 3.01GiB
System,single: Size:32.00MiB, Used:16.00KiB (0.05%)
/dev/sda5 32.00MiB
Unallocated:
/dev/sda5 22.98GiB
De todas essas informações, nos interessam três:
- o tamanho da partição (
Device size
): 100 GB; - quanto foi alocado para armazenar os arquivos (
Device allocated
): 77 GB; e - quanto esses arquivos ocupam de fato (
Used
): 66 GB.
Exclua instantâneos
Cada vez que você faz uma alteração importante no seu sistema – por exemplo, instala um programa – ele cria um instantâneo (snapshot) dos arquivos, de modo que, se algo der errado, você pode retornar o sistema para um estado anterior. Se você usa Windows, é a mesma ideia do ponto de restauração.
Não preciso dizer que esses instantâneos ocupam espaço no disco. Se seu sistema está funcionando bem, você pode exclui-los, o que liberará espaço.
No openSUSE, podemos gerenciar os instantâneos do BTRFS com a ferramenta Snapper. Para listá-los, execute:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# snapper --no-dbus --root /mnt list
# | Tipo | Pre # | Data | Usuário | Espaço usado | Limpeza | Descrição | Dados de usuário
-----+--------+-------+--------------------------+---------+--------------+---------+-----------------------+-----------------
0 | single | | | root | | | current |
1+ | single | | dom 18 set 2022 14:45:19 | root | 133,69 MiB | | first root filesystem |
924 | pre | | qua 26 jun 2024 17:56:16 | root | 222,42 MiB | number | zypp(zypper) | important=yes
925 | post | 924 | qua 26 jun 2024 17:57:45 | root | 78,13 MiB | number | | important=yes
954 | pre | | qua 03 jul 2024 15:46:27 | root | 156,52 MiB | number | zypp(zypper) | important=yes
955 | post | 954 | qua 03 jul 2024 15:54:23 | root | 348,55 MiB | number | | important=yes
986 | pre | | seg 22 jul 2024 15:55:50 | root | 3,32 MiB | number | yast sw_single |
987 | pre | | seg 22 jul 2024 15:56:46 | root | 160,00 KiB | number | zypp(ruby.ruby2.5) | important=no
988 | post | 987 | seg 22 jul 2024 15:57:06 | root | 400,00 KiB | number | | important=no
989 | post | 986 | ter 23 jul 2024 19:13:56 | root | 3,50 MiB | number | |
990 | pre | | ter 23 jul 2024 20:53:03 | root | 144,00 KiB | number | zypp(zypper) | important=yes
991 | pre | | ter 23 jul 2024 20:53:30 | root | 96,00 KiB | number | zypp(zypper) | important=yes
992 | pre | | ter 23 jul 2024 21:02:32 | root | 1,47 MiB | number | zypp(zypper) | important=yes
993 | post | 992 | ter 23 jul 2024 21:17:51 | root | 6,42 MiB | number | | important=yes
994 | pre | | ter 23 jul 2024 23:47:18 | root | 1,91 MiB | number | zypp(zypper) | important=yes
995 | post | 994 | ter 23 jul 2024 23:47:58 | root | 1,66 MiB | number | | important=yes
996 | pre | | qua 24 jul 2024 00:50:40 | root | 612,00 KiB | number | yast sw_single |
997 | post | 996 | qua 24 jul 2024 00:51:36 | root | 1,71 MiB | number | |
998 | pre | | ter 30 jul 2024 12:16:36 | root | 193,77 MiB | number | zypp(zypper) | important=yes
999 | post | 998 | ter 30 jul 2024 12:20:10 | root | 17,38 MiB | number | | important=yes
Em seguida, exclua-os (esse comando pode demorar um pouco):
1
# snapper --no-dbus --root /mnt delete --sync 924-999
Repita o comando anterior de listagem para se certificar de que foram excluídos:
1
2
3
4
5
6
# snapper --no-dbus --root /mnt list
# | Tipo | Pre # | Data | Usuário | Espaço usado | Limpeza | Descrição | Dados de usuário
---+--------+-------+--------------------------+---------+--------------+---------+-----------------------+-----------------
0 | single | | | root | | | current |
1+ | single | | dom 18 set 2022 14:45:19 | root | 16,22 GiB | | first root filesystem |
Feito isso, vamos verificar novamente o espaço usado em disco:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# btrfs filesystem usage /mnt
Overall:
Device size: 100.00GiB
Device allocated: 77.02GiB
Device unallocated: 22.98GiB
Device missing: 0.00B
Used: 59.09GiB
Free (estimated): 39.14GiB (min: 39.14GiB)
Free (statfs, df): 39.14GiB
Data ratio: 1.00
Metadata ratio: 1.00
Global reserve: 99.58MiB (used: 0.00B)
Multiple profiles: no
Data,single: Size:73.98GiB, Used:57.82GiB (78.16%)
/dev/sda5 73.98GiB
Metadata,single: Size:3.01GiB, Used:1.27GiB (42.14%)
/dev/sda5 3.01GiB
System,single: Size:32.00MiB, Used:16.00KiB (0.05%)
/dev/sda5 32.00MiB
Unallocated:
/dev/sda5 22.98GiB
O tamanho dos arquivos (Used
) reduziu bastante: de 66 para 59 GB, ou seja, liberamos 7 GB excluindo instantâneos. Nada mal.
Mas o espaço em disco alocado para armazenar os arquivos (Device allocated
) não mudou: continua os mesmos 77 GB. Agora vamos melhorar essa alocação.
Rebalanceie o sistema de arquivos
O sistema de arquivos BTRFS armazena os arquivos em blocos (chunks). Um arquivo grande pode ocupar vários blocos, enquanto um arquivo pequeno pode não preencher um bloco inteiro. Por isso essa diferença: 77 GB escritos no disco representam, na verdade, 59 GB de dados úteis. Fazendo as contas, temos uma proporção de 59 / 77 = 0,77 = 77% (guarde esse número).
Felizmente, há uma forma de resolver esse problema: o BTRFS tem uma ferramenta para “rebalancear” o sistema de arquivos.
Por padrão, esse rebalanceamento reescreverá todos os dados no disco, o que provavelmente é desnecessário. Os blocos não são igualmente preenchidos, mas vimos que, na média, eles estão cerca de 77% preenchidos. Podemos rebalancear apenas os blocos que estiverem menos de 77% preenchidos, não mexendo em quaisquer blocos que estejam mais preenchidos do que a média.
Para rebalancear o sistema de arquivos BTRFS dessa forma, execute:
1
# btrfs balance start -dusage=77 /mnt
Note que esse comando demora bastante.
Ao final, ele deve reportar algo como:
1
Done, had to relocate 15 out of 82 chunks
Verifique mais uma vez o espaço usado em disco:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# btrfs filesystem usage /mnt
Overall:
Device size: 100.00GiB
Device allocated: 67.02GiB
Device unallocated: 32.98GiB
Device missing: 0.00B
Used: 59.08GiB
Free (estimated): 39.14GiB (min: 39.14GiB)
Free (statfs, df): 39.14GiB
Data ratio: 1.00
Metadata ratio: 1.00
Global reserve: 95.70MiB (used: 0.00B)
Multiple profiles: no
Data,single: Size:63.98GiB, Used:57.82GiB (90.37%)
/dev/sda5 63.98GiB
Metadata,single: Size:3.01GiB, Used:1.26GiB (42.03%)
/dev/sda5 3.01GiB
System,single: Size:32.00MiB, Used:16.00KiB (0.05%)
/dev/sda5 32.00MiB
Unallocated:
/dev/sda5 32.98GiB
Dessa vez, foi o tamanho dos arquivos (Used
) que não mudou: continuou os mesmos 59 GB.
Mas o espaço em disco alocado para armazenar os arquivos (Device allocated
) reduziu bastante: de 77 GB para 67 GB. Agora, a proporção é de 88%, indicando que os blocos estão, na média, mais preenchidos. Ou seja, a alocação de espaço em disco melhorou.
Conclusão
Considerando que agora eu tinha 67 GB alocados em uma partição de 100 GB, eu consegui reduzir essa partição para 70 GB (deixando ainda algum espaço livre) e criar uma partição nova de 30 GB para hospedar a nova distribuição.
Espero que essas dicas possam ser úteis para você caso também precise liberar espaço no seu sistema de arquivos BTRFS.
Se precisar, confira mais informações nos textos que consultei, listo-os a seguir.
Ou escreva sua dúvida em um comentário. Até a próxima!