você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Backup multivolume em um DELL PowerVault 124T

Colaboração: Altemir Braz Dantas Junior

Data de Publicação: 03 de fevereiro de 2011

  1. Instalando os pacotes necessários. Como uso Debian:

    # apt-get install mt-st mtx
    

  2. Verificando se o linux reconheceu o driver:
    # dmesg | grep scsi
    
    [ 1.343286] scsi0 : sata_via
    [ 1.354041] scsi1 : sata_via
    [ 1.748725] scsi 0:0:0:0: Direct-Access ATA ST32000542AS CC34 PQ: 0 ANSI: 5
    [ 2.132693] scsi 1:0:0:0: Direct-Access ATA ST32000542AS CC34 PQ: 0 ANSI: 5
    [ 2.352554] scsi2 : ioc0: LSI53C1020A A1, FwRev=01032700h, Ports=1, MaxQ=255, IRQ=24
    [ 4.507518] scsi 2:0:6:0: Sequential-Access IBM ULTRIUM-TD3 93G6 PQ: 0 ANSI: 3
    [ 4.507588] scsi 2:0:6:0: Information Units disabled by blacklist
    [ 4.507649] scsi target2:0:6: Beginning Domain Validation
    [ 4.549424] scsi target2:0:6: Ending Domain Validation
    [ 4.549555] scsi target2:0:6: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 127)
    [ 4.556469] scsi 2:0:6:1: Medium Changer DELL PV-124T 0075 PQ: 0 ANSI: 2
    [ 59.901052] ch 2:0:6:1: Attached scsi changer ch0
    [ 59.901625] st 2:0:6:0: Attached scsi tape st0
    [ 60.058964] sd 0:0:0:0: Attached scsi generic sg0 type 0
    [ 60.059805] sd 1:0:0:0: Attached scsi generic sg1 type 0
    [ 60.060737] st 2:0:6:0: Attached scsi generic sg2 type 1
    [ 60.062052] ch 2:0:6:1: Attached scsi generic sg3 type 8
    
    No meu caso listei o drive no device /dev/st0:
    [ 4.507518] scsi 2:0:6:0: Sequential-Access IBM ULTRIUM-TD3 93G6 PQ: 0 ANSI: 3
    [ 59.901625] st 2:0:6:0: Attached scsi tape st0
    
    e o listei o changer no device /dev/sg3
    [ 4.556469] scsi 2:0:6:1: Medium Changer DELL PV-124T 0075 PQ: 0 ANSI: 2
    [ 60.062052] ch 2:0:6:1: Attached scsi generic sg3 type 8
    
  3. Caso nao encontre nada levante os modulos st mptbase mptscsih e verifique de novo no dmesg
    # modprobe st
    # modprobe mptbase
    # modprobe mptscsih
    
  4. Criei um link do sg3 para changer pois o comando mtx por padrao procura nele # ln /dev/sg3 /dev/changer

Agora alguns comandos para seu conhecimento

mtx: control SCSI media changer devices

# mtx status

Storage Changer /dev/changer:1 Drives, 8 Slots ( 0 Import/Export )
Data Transfer Element 0:Empty
Storage Element 1:Full :VolumeTag=000011L3
Storage Element 2:Full :VolumeTag=000012L3
Storage Element 3:Full :VolumeTag=000013L3
Storage Element 4:Full :VolumeTag=000014L3
Storage Element 5:Full :VolumeTag=000015L3
Storage Element 6:Full :VolumeTag=000016L3
Storage Element 7:Full :VolumeTag=000017L3
Storage Element 8:Empty

Acima mostra que nao existe nenhuma fita no drive aonde vamos gravar o backup e tem 8 Slot no meu caso no Left Magazine com 7 fitas na espera

becape:~# mtx load 1 0

Faz com que a fita que esta no "Storage Element 1" vai para o drive "Data Transfer Element 0" ficando assim

becape:~# mtx status
Storage Changer /dev/changer:1 Drives, 8 Slots ( 0 Import/Export )
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = 000011L3
Storage Element 1:Empty
Storage Element 2:Full :VolumeTag=000012L3
Storage Element 3:Full :VolumeTag=000013L3
Storage Element 4:Full :VolumeTag=000014L3
Storage Element 5:Full :VolumeTag=000015L3
Storage Element 6:Full :VolumeTag=000016L3
Storage Element 7:Full :VolumeTag=000017L3
Storage Element 8:Empty

Para retornar a fita do drive para o Storage numero 1 uso o unload 1 0

# mtx unload 1 0

voce pode sempre verificar com o mtx status. entao para colocar a fita 7 no drive vc executaria

mtx load 7 0

e para voltar no mesmo lugar

mtx unload 7 0

Voce pode tmb tranferir a fita de um lugar do Storage Element para outro. ex tranferir do 7 para o 8

mtx transfer 7 8

Voce pode tmb inverter a posicao das fitas com o invert

mtx invert 4 3

Existe tambem o mtx next que tira a fita do drive e coloca a proxima fita no drive usando a sequencia do Storage

para mais informacoes

# man mtx

mt: control magnetic tape drive operation

os mais importantes

# mt -f /dev/st0 rewind (rebobinar a fita)
# mt -f /dev/st0 erase (formatar a fita)
# mt -f /dev/st0 eject (ejetar a fita)

para mais informacoes

# man mt

tar: The GNU version of the tar archiving utility

# tar -c -v -M -L 417333248 --new-volume-script=/etc/scripts/script-multi.sh -f /dev/st0 /diretorio-a-ser-becapeado
-c cria
-v verbose
-M opcao multivolume
-L tamanho que sera gravado para pedir outra fita N*1024
--new-volume-script=/etc/scripts/script-multi.sh na hora que ele acabar de gravar aquela quantidade estipulada no -L e faltar arquivo para gravar ele chama o script
-f o arquivo aonde vai gravar

para listar os arquivos com multivolume

# tar -t -v -M -f /dev/st0

para recuperar um arquivo

# tar -x -v -M -f /dev/st0 arquivo_a_ser_recuperado

Com essas informacoes criei um script em shell para fazer o backup

criei o diretorio scripts e criei um arquivo fita.txt para saber qual fita eu irei comecar a gravar

becape:~# mkdir /etc/scripts
becape:~# echo 1 > /etc/scripts/fita.txt
becape:~# cd /etc/scripts

Agora os scripts

  1. crie o script do backup_fita.sh com o conteudo abaixo
    #!/bin/bash
    
    #diretorio que vai ser gravado na fita
    DIRETORIO_BASE=/backup
    DEV_CHANGER=/dev/sg3
    DEV_DRIVE=/dev/st0
    #CAPACIDADE DA FITA N*1024 bytes
    TAM_FITA="417333248"
    FITA=$(cat /etc/scripts/fita.txt);
    PROX=$(($FITA+1))
    
    if [ ! -c /dev/changer ];then
    ln $DEV_CHANGER /dev/changer
    fi
    
    #coloca a fita 1 no drive
    mtx load $FITA 0
    
    #Guardo num arquivo texto qual sera a proxima fita
    echo $PROX > /etc/scripts/fita.txt
    
    ### Apaga o Disco - caso tenha que apagar a fita descomente a linha abaixo
    #mt -f $DEV_DRIVE erase
    
    # cria o tar com multivolume (-M) com o tamanho $TAM_FITA (-L)
    # caso o backup seja maior que o tamanho definido ele chama o script /etc/scripts/script-multi.sh
    # aonde sera retirado a fita do drive e colocando outra (--new-volume-script=/etc/scripts/script-multi.sh )
    tar -c -v -M -L $TAM_FITA --new-volume-script=/etc/scripts/script-multi.sh -f $DEV_DRIVE $DIRETORIO_BASE
    
    Após salvar, altere suas flags de permissão para torná-lo executável:

    becape:~# chmod 700 /etc/scripts/backup_fita.sh
    

  2. Criar o script que vai colocar a proxima fita disponivel para gravacao script-multi.sh
    #!/bin/bash
    
    FITA=$(cat /etc/scripts/fita.txt);
    PROX=$(($FITA+1))
    ANT=$(($FITA-1))
    
    
    echo $PROX > /etc/scripts/fita.txt
    
    #no meu caso tenho 7 fitas por isso se tiver gravando ainda e for para 8 fita ferrou rsrsr
    if [ $FITA -eq 8 ]; then
    echo "mtx unload $ANT 0"
    mtx unload $ANT 0
    echo "FERROU, NAO TEM MAIS FITA DISPONIVEL"
    exit;
    else
    echo "mtx unload $ANT 0"
    mtx unload $ANT 0
    echo "mtx load $FITA 0"
    mtx load $FITA 0
    fi
    


Veja a relação completa dos artigos de Altemir Braz Dantas Junior