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

blog comments powered by Disqus