Como gravar backups na mesma fita LTO consecutivamente?

1. Como gravar backups na mesma fita LTO consecutivamente?

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 11/03/2015 - 15:41h

Oi Galera...

Sei que é dúvida de iniciante, mas não tenho experiência com o uso de fitas de backup.

Tenho ligado a um servidor de arquivos um drive de fita LTO com capacidade de 800 GB, faço diariamente um backup total de 236GB de tamanho e uso uma fita por dia, mas gostaria de ter uma fita reserva com pelo menos 3 backups ( 800GB > [3x{236GB}=708GB] ) e não sei como gravar 1 backup por dia durante 3 dias ( agendado no cron ).

por acaso o comando é tar -cvf /dev/nst0 /root/backup/$pasta? Onde:

$pasta= nome da pasta
nst0 = não rebobinar a fita


Como faço depois para restaurar qualquer um dos 3 backups dessa fita?

desde já agradeço....


  


2. Re: Como gravar backups na mesma fita LTO consecutivamente?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/03/2015 - 20:40h

Uma coisa boa é que você já sabe que o prefixo n é para o dispositivo de fita que não rebobina automaticamente quando é fechado (e.g. /dev/nst0, em lugar de apenas /dev/st0).

Leia sobre o comando mt. Ele permite fazer coisas como avançar ou retroceder um determinado número de arquivos ou registros, rebobinar a fita, retensioná-la etc.


3. Não está dando certo...

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 25/03/2015 - 15:54h

Obrigado pela Ajuda, mas ainda continuo com dúvidas...

Tenho um gravador de fita ( HP 5 Ultriun ) reconhecido como (/dev/st0), e fiz os seguinte testes:

1 - CRIAÇÃO DE ARQUIVOS.

* criei a seguinte estrutura de diretórios:

Pasta teste ( pasta pai ), com as seguintes Subpastas:

###########################

teste_zero com o arquivo:

- arquivo_zero.txt (20kb)

############################

teste_a, com os arquivos:

- teste1 ( 500mb )

- teste_primeiro.txt (20kb)

#############################

teste_b, com os arquivos:

- teste2 (500mb)

- teste_segundo (20kb)

#############################
------------------------------------------------------------------------------------------------------------------------------

2 - TESTES DE GRAVAÇÃO COM AUTOREWIND (st0).

*dei os seguintes comandos: ( para teste de gravação )


tar -cvf /dev/st0 /root/testes/teste_a/ ( para a primeira gravação )

saída:

tar: Removing leading `/' from member names
/root/testes/teste_a/
/root/testes/teste_a/teste_primeiro.txt
/root/testes/teste_a/teste1

Logo após:

tar -tvf /dev/st0 /root/testes/result.txt (para verificação)

saída:

drwxr-xr-x root/root 0 2015-03-25 13:05 root/testes/teste_a/
-rw-r--r-- root/root 103 2015-03-25 13:05 root/testes/teste_a/teste_primeiro.txt
-rw-r--r-- root/root 524288000 2015-03-12 10:44 root/testes/teste_a/teste1

.
.
.

*Fiz o mesmo procedimento com os diretórios teste_b e teste_zero, e o resultado foi que:

CADA GRAVAÇÃO SOBRESCREVEU A ANTERIOR!!!A cada gravação o arquivo result.txt mudava

------------------------------------------------------------------------------------------------------------------------------

3 - TESTES DE GRAVAÇÃO SEM AUTOREWIND (nst0).

*dei os seguintes comandos: ( para teste de gravação em série )

tar -cvf /dev/nst0 /root/testes/teste_a/

tar -cvf /dev/nst0 /root/testes/teste_b/

tar -cvf /dev/nst0 /root/testes/teste_zero/

* AGORA COMEÇAM OS PROBLEMAS!!!Após as gravações dei o comando:

tar -tvf /dev/nst0 > /root/testes/result.txt ( usando nst0)

saída:

tar: This does not look like a tar archive
tar: /root/testes/result.txt: Not found in archive
tar: Exiting with failure status due to previous errors


------------------------------------------------------------------------------------------------------------------------------
Segunda tentativa: (usando st0)

tar -tvf /dev/st0 > /root/testes/result.txt

saída:

tar: /dev/st0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now

------------------------------------------------------------------------------------------------------------------------------

terceira tentativa: ( repeti o comando e não sei explicar pq, mas na segunta tentativa rodou )

tar -tvf /dev/st0 > /root/testes/result.txt

saída:

drwxr-xr-x root/root 0 2015-03-25 13:05 root/testes/teste_a/
-rw-r--r-- root/root 103 2015-03-25 13:05 root/testes/teste_a/teste_primeiro.txt
-rw-r--r-- root/root 524288000 2015-03-12 10:44 root/testes/teste_a/teste1

SOMENTE LISTOU O PRIMEIRO DIRETÓRIO GRAVADO!!!

------------------------------------------------------------------------------------------------------------------------------

quarta tentativa ( rebobinar "na mão" e refazer )

mt -f /dev/st0 rewind

tar -tvf /dev/st0 > /root/testes/result.txt

saída:

drwxr-xr-x root/root 0 2015-03-25 13:05 root/testes/teste_a/
-rw-r--r-- root/root 103 2015-03-25 13:05 root/testes/teste_a/teste_primeiro.txt
-rw-r--r-- root/root 524288000 2015-03-12 10:44 root/testes/teste_a/teste1

SOMENTE LISTOU O PRIMEIRO DIRETÓRIO GRAVADO DE NOVO!!!

------------------------------------------------------------------------------------------------------------------------------

quinta tentativa ( verificar o comando mt )

mt -f /dev/st0 status

saída:

drive type = Generic SCSI-2 tape
drive status = 1174405120
sense key error = 0
residue count = 0
file number = 0
block number = 0
Tape block size 0 bytes. Density code 0x46 (unknown).
Soft error count since last status=0
General status bits on (41010000):
BOT ONLINE IM_REP_EN

mt -f /dev/nst0 tell verificar em que ponto da fita estou

saída:

mt: /dev/st0: Input/output error


Alguém pode me ajudar!? O que estou fazendo de errado?










4. e agora?

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 30/03/2015 - 08:38h


Pq meu drive não consigo gravar mais coisas na mesma fita?


5. Re: Como gravar backups na mesma fita LTO consecutivamente?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2015 - 00:19h

Leia a manpage de st (seção 4 do manual) para entender como a fita funciona. Dela, eu destaco o seguinte trecho.

A filemark is automatically written to tape if the last tape operation before close was a write.

When a filemark is encountered while reading, the following happens. If there are data remaining in the buffer when the filemark is found, the buffered data is returned. The next read returns zero bytes. The following read returns data from the next file. The end of recorded data is signaled by returning zero bytes for two consecutive read calls. The third read returns an error.


Exemplificando, suponha que você colocou no drive uma fita rebobinada, e em seguida executou a seguinte operação.

tar cjf /dev/nst0 conjunto_de_dados_1
tar cjf /dev/nst0 conjunto_de_dados_2
tar cjf /dev/nst0 conjunto_de_dados_3
mt -f /dev/nst0 rewind


Você vai gravar na fita três “arquivos” (na nomenclatura de fitas) e vai rebobiná-la. Haverá, portanto, três filemarks (um padrão especial de bits que não se confunde com nada que possa ser gravado como parte do pacote de dados) ao final de cada arquivo, justamente para dizer que aquele arquivo acabou. (Alguns dispositivos ainda guardam uma segunda filemark após a filemark do último arquivo da fita.)

Se você ler dessa fita (depois de reboninada), é de se esperar, conforme a documentação, que sua leitura pare ao final do primeiro arquivo (quando encontrar a primeira filemark). Isso não quer dizer que o restante da fita acabou, mas sim que aquele conjunto de dados chegou ao final. Se você tentar uma nova operação de leitura depois daquele ponto, vai começar a ler do arquivo seguinte, e vai continuar lendo desse arquivo até a próxima filemark.

É claro que você não precisa ler todos os blocos de dados de todos os arquivos da fita sequencialmente até chegar ao arquivo desejado. O comando mt tem subcomandos que permitem avançar ou retroceder um determinado número de filemarks.

Algumas pessoas têm o hábito de gravar na fita informações sobre os dados que são ou serão gravados nela. Eu trabalhei numa empresa que fazia rodízio quinzenal de fitas de backup, e tinha o hábito de gravar no primeiro arquivo da fita uma cópia do label dessa fita. Era uma forma de identificar se a fita inserida no drive estava correta, antes de sobrescrever acidentalmente uma fita colocada por engano a respeito da ordem do rodízio.

Você poderia fazer algo melhor ainda. Por exemplo, você poderia ter em suas fitas um primeiro arquivo de tamanho fixo, onde você poderia gravar não só um label, mas também um índice do conteúdo da fita, e atualizar esse índice na medida em que fosse gravando novos arquivos à fita.

#!/bin/bash

# ATENÇÃO: Este código é uma ideia. Ele não foi testado,
# nem mesmo com relação a sintaxe.

export TAPE=/dev/nst0

# Tenta ler o label+diretorio de 1MB (100 blocos de 10kB)
mt rewind
dd if=$TAPE iflag=fullblock bs=10k count=100 | tr -d \\0 > /tmp/workfile
mt rewind
if ! head -n 1 /tmp/workfile | egrep -q '^Minha fita com label [0-9A-F]{8}$'; then
# Fita sem label ou label invalido => assume que a fita esta vazia.
echo -n "Aguarde: limpando conteúdo anterior da fita... "
if ! mt erase; then
echo "FALHA! Ejetando a fita." >&2
mt rewoffl
exit 1
fi
echo "OK."
echo -n "Gerando novo label... "
label=$(printf "%08X" $(date "+%s"))
echo "OK (label: $label)."
echo -n "Gravando novo label na fita..."
if ! { echo "Minha fita com label $label"; cat /dev/zero; } | dd iflags=fullblock of=$TAPE bs=10k count=100; then
echo "FALHA! Ejetando a fita." >&2
mt rewoffl
exit 1
fi
echo "Label gravado com sucesso."
mt rewind
echo "Minha fita com label $label" > /tmp/workfile
fi
# Na contagem de arquivos gravados, inclui o label-indice
n_files=`wc -l /tmp/workfile`
echo -n "Deslocando para o final da fita... "
if ! mt fsf $n_files; then
echo "FALHA! Ejetando a fita." >&2
mt rewoffl
exit 1
fi
echo "OK."
newdataset=$(date "+Back-up_of_%Y-%m-%d_%H:%M:%S%z")
echo "Gravando dataset $newdataset... "
if ! tar c diretorio1 diretorio2 diretorio3; then
echo "FALHA! Ejetando a fita sem atualizar índice." >&2
mt rewoffl
exit 1
fi
echo "Backup bem sucedido."
echo -n "Atualizando indice... "
mt rewind
echo "$newdataset" >> /tmp/workfile
cat /tmp/workfile /dev/zero | dd iflags=fullblock bs=10k count=100 of=$TAPE
mt rewind
echo "OK."



6. Muito obrigado pela ajuda

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 06/04/2015 - 16:04h

Velhinho, to aqui queimando a cabeça para tentar entender o código, li o manual do mt e queria tirar uma dúvida ( to ainda em fase de testes)


1 - gravei os 3 arquivos:

serverbkp:~ # tar -cvf /dev/nst0 /root/testes/teste_zero
tar: Removing leading `/' from member names
/root/testes/teste_zero/
/root/testes/teste_zero/arquivo_zero.txt
serverbkp:~ # tar -cvf /dev/nst0 /root/testes/teste_a
tar: Removing leading `/' from member names
/root/testes/teste_a/
/root/testes/teste_a/teste_primeiro.txt
/root/testes/teste_a/teste1
serverbkp:~ # tar -cvf /dev/nst0 /root/testes/teste_b
tar: Removing leading `/' from member names
/root/testes/teste_b/
/root/testes/teste_b/teste_segundo.txt
/root/testes/teste_b/teste2

2 - Rebobinei a fita:

serverbkp:~ # mt -f /dev/nst0 rewind

3 - exibo o conteúdo da fita:

serverbkp:~ # tar -tvf /dev/nst0
drwxr-xr-x root/root 0 2015-03-25 13:20 root/testes/teste_zero/
-rw-r--r-- root/root 1 2015-03-25 13:20 root/testes/teste_zero/arquivo_zero.txt

4 - Repito a operação ( para ver se lista o segundo bloco )
serverbkp:~ # tar -tvf /dev/nst0
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
( deu erro )

5 - Mesmo com o erro, eu repito pra ver se cola...

serverbkp:~ # tar -tvf /dev/nst0
drwxr-xr-x root/root 0 2015-03-25 13:05 root/testes/teste_a/
-rw-r--r-- root/root 103 2015-03-25 13:05 root/testes/teste_a/teste_primeiro.txt
-rw-r--r-- root/root 524288000 2015-03-12 10:44 root/testes/teste_a/teste1

( funciounou na segunda vez! Mas mesmo assim repito pra listar o próximo bloco )

6 - Repetindo a Operação:

serverbkp:~ # tar -tvf /dev/nst0
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

( erro novamente e repito a operação pra ver se pega de segunda como na primeira vez )

7 - Repetindo a Operação:

serverbkp:~ # tar -tvf /dev/nst0
drwxr-xr-x root/root 0 2015-03-25 13:05 root/testes/teste_b/
-rw-r--r-- root/root 125 2015-03-25 13:05 root/testes/teste_b/teste_segundo.txt
-rw-r--r-- root/root 524288000 2015-03-12 10:44 root/testes/teste_b/teste2

( deu certo novamente!)


-----------------------------------------------------------------------------

Mas daí vem as perguntas:

1 - O que quer dizer as mensagens de erro:

tar: This does not look like a tar archive ?
tar: Exiting with failure status due to previous errors ?

2 - Porque elas ocorrem?

3 - Como evitar ter que fazer 2 vezes o comando para só dar certo na segunda vez?


Desde já agradeço...

Luiz



7. Re: Como gravar backups na mesma fita LTO consecutivamente?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/04/2015 - 19:55h

No começo da minha última mensagem, eu destaquei um trecho da manpage de st, que é o device driver que lida com fitas. Só o trecho destacado serviria bem para explicar exatamente o comportamento que você viu, mas eu recomendo que você leia toda a manpage (além, é claro, da manpage do mt, que você já leu).

Você quer os subcomandos de mt que avancem (ou retrocedam) em arquivos da fita. Isso está na documentação de mt. No script que eu mostrei há um exemplo de uso do subcomando de avançar.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts