/ informatica

Creazione automatica di archivi multivolume con tar

La mia necessità  era semplice: creare una serie di file non più grandi di 2gb (limitazione data di default da smbmount, sormontabile con l'opzione lfs) partendo da un singolo file (o da una cartella, ma lo script finale richiede una piccola modifica utilizzando du anzichè ls).

Tar si adatta bene allo scopo, l'unico scoglio è stato capire come evitare che mi chiedesse ad ogni file di inserire il nuovo volume (la funzionalità  multivolume di tar è nata per archiviare su nastro, quindi si aspetta che qualcuno lo cambi).

Il comando è quindi questo:

$ tar -L 1536000 -M -c --file=destinazione1.tar --file=destinazione2.tar --file=destinazione3.tar /path/file_o_cartella_sorgente

volendo potete anche comprimere:

$ tar -L 1536000 -M -c -j --file=destinazione1.tar.bz2 --file=destinazione2.tar.bz2 --file=destinazione3.tar.bz2 /path/file_o_cartella_sorgente

Questo comando implica però che sappiate la dimensione del file da archiviare, con lo script di seguito, invece, tale operazione è automatica:

#!/bin/bash

# DICHIARO QUESTE VARIABILI COME INTERE
declare -i MAX_DIM
declare -i ORIG_DIM
declare -i NUM_FILES
declare -i COUNT

# FILE DI CUI FARE BACKUP
FILE_ORIGINE="/path/file.tar.bz2"

# DIMENSIONE MASSIMA DEI FILES DA CREARE
MAX_DIM=1536000 # 1,5GB

# DIMENSIONE DEL FILE DI ORIGINE
ORIG_DIM=`ls -s $FILE_ORIGINE  | cut -d " " -f1`

# NUMERO DI FILES DA CREARE
NUM_FILES=$ORIG_DIM/$MAX_DIM
# AUMENTATO DI 1 IN CASO DI RESTO
NUM_FILES=$NUM_FILES+1

# INIZIALIZZO LE VARIABILI DEL CICLO
COUNT=1
FILE=""

while [ $COUNT -le $NUM_FILES ]
do
        FILE="$FILE--file=backup$COUNT.tar "
        COUNT=$COUNT+1
done

tar -L $MAX_DIM -M -c $FILE $FILE_ORIGINE

il comando che ne viene fuori è tipo questo:

$ tar -L 1536000 -M -c --file=backup1.tar --file=backup2.tar --file=backup3.tar  /path/file.tar.bz2