web-dev-qa-db-fra.com

Code de sortie du tar non nul

J'essaie de créer un script de sauvegarde qui crée une archive complète à partir de mon système chaque nuit. Pour ce faire, j'ai suivi le tutoriel ici .

Donc, pour le tester, j'ai décidé de créer une sauvegarde manuelle:

tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 

Lorsque j'essaie d'exécuter cette commande, le message d'erreur suivant s'affiche:

tar: /run/: file is on a different filesystem; not dumped

Cela donne un code de sortie égal à 1. Cependant, je souhaite exécuter cette commande dans un script et si le code de retour est 0, je souhaite déplacer le fichier de sortie, sinon le supprimer. Si je comprends bien le tutoriel lié au dessus de --one-file-system implique que /run/ est ignoré. Mais pourquoi ai-je l'erreur alors?

Par souci d’exhaustivité, le script (WIP) est présenté ci-dessous:

#!/bin/bash

# Location to store backups
STORAGE=/media/storage/backups/full
# Current date
DATE=$(date +"%d.%m.%YT%H.%M")
TAR="$DATE.tar.gz"


# Check if the file already exists. Should never be the case though.
if [ ! -f /tmp/$TAR ]; then

    echo "Changing dir to /"
    cd /
    # Create tarball
    echo "Creating tarball"
    tar -cvpzf /tmp/$TAR --exclude=/tmp/$TAR --one-file-system /
    retcode=$?

    echo "Exit status: $retcode"

    if [ $retcode = 0 ] ; then
        echo "Moving file.."
        # Move the file
        mv /tmp/$TAR $STORAGE/$TAR
        echo "Done!"
    fi
fi
3

Vous devez d'abord déclarer --one-file-system avant la règle d'exclusion. Il y a une note du même guide que vous avez suivi.

Si vous voulez exclure tous les autres montages que le courant (j'entends par là les partitions montées sur des répertoires), utilisez l'option --one-file-system system ajoutée avant les règles d'exclusion. Cela a pour effet d'empêcher tar de se croiser avec d'autres supports de n'importe quel répertoire, y compris/mnt ou/media.

1
f01