reserva espaço em disco antes de copiar arquivos

3

Gostaria de reservar (ou a palavra-chave "claim"?) alguma quantidade de espaço em disco antes que ocorra um rsync para que outros programas acreditem que um disco tenha menos espaço (porque após o rsync , o disco têm significativamente menos espaço).

plano de fundo

Um script bash rsync é uma grande quantidade de dados para um local, faz algum trabalho e, em seguida, remove os dados rsync ed. Várias instâncias do script bash podem ser executadas simultaneamente. O problema é, de vez em quando, vários scripts simultaneamente rsync e usar todo o espaço em disco disponível e depois travar.

pseudo-código

Aqui está o algoritmo atual

check:

$disk_A = source disk
$disk_X = pick a different disk
$space_need = 12345  # disk space needed
$space_avail = space_available(some disk X)  # disk space available on $disk_X

if $space_need < $space_avail then
    rsync $disk_A/data $disk_X/data  # this step takes much time
else
    goto check:

do work
remove $disk_X/data

Gostaria que as etapas mudassem para ( ... é o mesmo que o pseudo-código anterior)

...
if ... then
    reserve $space_avail on $disk_X
    # space_available() should now report $disk_X as $space_avail - original
    # HOW TO DO THAT?
    rsync $disk_A/data $disk_X/data  # this step takes much time
else
    ...
...
release $disk_X $space_avail  # HOW TO DO THAT?

Com o pseudo-código modificado, o espaço é reservado (ou "reivindicado") instantaneamente. Outros scripts veem space_available() return menos espaço imediatamente . Atualmente, space_available() retornará um número decrescente, enquanto outras instâncias rsync são executadas.

    
por JamesThomasMoon1979 13.04.2016 / 01:54

1 resposta

2

Se você mantiver ferramentas independentes de sistema de arquivos, não consigo pensar em uma maneira de fazer isso além de alocar o espaço em disco, ou seja, reserve precisaria criar um arquivo (não esparso!) do arquivo solicitado. tamanho, e você precisa excluir este arquivo antes de iniciar o rsync .

Se os arquivos estiverem em um volume ext2 / ext3 / ext4 e o uso de acesso root para algumas operações for aceitável, você poderá usar suas espaço reservado . O espaço reservado é normalmente para raiz, mas você pode disponibilizá-lo para um usuário diferente ou para um grupo diferente. Execute o processo de rsync como esse usuário / grupo e ajuste o espaço reservado com tune2fs -m antes de executar o rsync.

Há provavelmente uma solução mais flexível com pools do ZFS ou do Btrfs, mas não sei como fazer isso.

    
por 13.04.2016 / 02:10