altere a fita no script de deslocamento

0

Eu tenho que escrever 17 Tb para fita:

ssh some_host 'tar -cz /' | dd bs=20b of=/dev/tape

é claro que 17 Tb não se encaixa em uma fita, então eu preciso alterá-la automaticamente quando ocorre um erro "no room". Eu tenho changer robô e "mtx next" funciona bem. Eu também preciso escrever rótulo para log quando fita mudou, então eu prefiro escrever o script de gancho neste evento.
"tar" tem o recurso "change tape script", mas eu executo o tar em outro host.

Além disso, lidar com 17 Tb para o host local não é a opção. O sshfs não é uma opção tão ruim. E, por favor, não ofereça grandes soluções de backup.

O que eu preciso é uma ferramenta de pipe como o dd, que é capaz de executar algum script no erro 'no room' e prosseguir depois. Especificar o tamanho do bloco também é importante, pois a unidade de fita requer alguns valores.

    
por xoid 25.09.2015 / 09:06

1 resposta

1

Se você pode instalar o rmt no sistema com a unidade de fita, você pode ter o tar acessando a unidade a rede. Por padrão tar usará o protocolo rsh para executar o rmt no servidor de fita, mas se você tiver o GNU tar, você pode dar a opção --rsh-command='ssh tapeserver /usr/sbin/rmt' .

Se você tiver fitas LTO, um fator de bloqueio de 20 pode ser muito pequeno para manter a transmissão da fita; 126 é o que usamos com o LTO4. Mas eu acho que algumas implementações rmt restringem você a 20 blocos de tamanhos de transferência, então você pode querer olhar para a implementação do @ schily de rmt .

Em um comentário que você fez

rmt is a good choice, but how to divide it's time? I have about twenty servers who needs backup. How can I queue them to use rmt?

Se os comandos de backup de cada servidor puderem ser empacotados em um shell script, provavelmente existem alguns sistemas de enfileiramento em lote flexíveis que podem garantir o processamento sequencial deles, mas não sei de nenhum outro e percebo que você não não quero ter muita complexidade aqui.

Como um começo, você poderia tentar algo assim, em um sistema que pode ssh para todos os servidores:

#!/bin/sh
lock=/var/run/doalldumps.lock
status=/var/run/doalldumps.status
for s in $(cat ~/servers)
do
(
    flock -e 9
    echo started $s at $(date) > $status
    ssh $s -n command-to-do-backups
    echo finished $s at $(date) > $status
) 9> $lock
done

Como alternativa, uma maneira simples de serializar o acesso à unidade de fita é usar flock para bloquear um arquivo no servidor com a unidade de fita. Você poderia usar isso na opção tar --rsh-command :

tar ... --rsh-command='ssh tapeserver flock -e /var/run/tape.lock /usr/sbin/rmt'
    
por 29.09.2015 / 18:56

Tags