Btrfs + LXC: alguma maneira de mostrar até mesmo espaço livre estimado aproximado para o contêiner LXC de hospedagem de subvol com quota?

2

Estou fazendo experiências com o LXC usando o Btrfs como uma loja de apoio. O Btrfs permite fácil snapshot / desduplicação e é ideal para girar várias "pseudo-VMs".

O problema que estou tendo é que alguns dos aplicativos que eu testo despejam muitos dados no disco. Eu estou tentando limitar o uso do volume Btrfs, então eu atribuí uma quota ao subvolume criado pelo LXC para um recipiente específico.

O aplicativo tem um teste à prova de falhas - quando vê menos de uma certa quantidade de espaço livre em disco no sistema de arquivos que grava (por exemplo, 512MB), ele começa a limpar logs antigos para dar espaço a novos registros.

O problema é que, mesmo com a cota aplicada, o sistema de arquivos raiz do LXC ainda relata o tamanho total do sistema de arquivos Btrfs do host.

Exemplo: se meu sistema de arquivos Btrfs tiver 250 GB e eu criar um contêiner LXC usando as opções -B btrfs e -s , agora tenho um subvolume no sistema de arquivos Btrfs representando a raiz desse novo contêiner. Eu quero limitar o espaço ocupado pelo contêiner, então aplico um limite de qgroup de 32 GB ao contêiner. No entanto, o comando df , quando executado no contêiner LXC, ainda mostra um tamanho total do sistema de arquivos de 250 GB e um espaço livre aproximadamente baseado no espaço livre real do sistema de arquivos do host; ou seja, os limites de cota não são exibidos para df .

Isso significa que meu aplicativo de registro pode preencher toda a cota e ainda acredita que ele tenha 200 GB de espaço para gravação, portanto, não recicla seus dados antigos. Eventualmente, a cota é excedida e, graças às limitações dos sistemas de arquivos COW, tenho que desabilitar a cota e excluir manualmente os logs antigos - se a cota ainda for aplicada no mesmo tamanho, não é possível excluir os dados devido a isso não há espaço extra para a operação de exclusão.

Eu já li o suficiente e entendo o suficiente sobre o Btrfs para entender que a ideia de "espaço livre" é confusa no Btrfs e pode ser um desafio resolver, mas existe alguma maneira de obter até mesmo uma figura do "balizão"? dentro de um LXC de quanto espaço de cota permanece? De preferência, isso deve ser feito pelas APIs padrão para obter espaço livre em disco (aquelas que df usa), pois isso também se aplica a outros aplicativos que acessam o sistema de arquivos e precisam conhecer seu espaço livre aproximado.

Se eu conseguisse chegar a, digamos, 1GB ou mais do espaço livre real (conforme fornecido pela cota), isso seria suficiente para eu ajustar os parâmetros de expiração de log para que o sistema de arquivos não exceda a cota.

    
por fdmillion 15.02.2016 / 23:31

1 resposta

1

Aqui está a melhor ferramenta que encontrei para lidar com a alocação de espaço de subvolume btrfs: Obtenha o tamanho de seus instantâneos BTRFS | Blog do PoisonPacket

Todos os créditos vão para Kyle Agronick (autor deste roteiro)

    
por 09.03.2016 / 10:12

Tags