Код выхода Тар ненулевой

Я пытаюсь создать резервный скрипт, который создает полный тарбол из моей системы каждую ночь. Чтобы сделать это, я следовал за учебником здесь.

Поэтому, чтобы проверить это, я решил создать резервную копию вручную:

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

Когда я пытаюсь запустить эту команду, я получаю сообщение об ошибке:

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

В результате получается код выхода 1. Однако я хочу выполнить эту команду в сценарии, и если код возврата 0 Я хочу переместить выходной файл, иначе удалите его. Если я правильно понимаю из учебника, связанного выше --one-file-system подразумевает, что /run/ игнорируется Но почему я получаю ошибку тогда?

Для полноты картины сценарий (WIP) показан ниже:

#!/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

1 ответ

Решение

Вы должны объявить --one-file-system сначала до правила исключения. Есть заметка из того же руководства, что вы следовали.

Если вы хотите исключить все другие монтирования, кроме текущего - под этим я подразумеваю разделы, смонтированные в каталогах, - тогда используйте параметр --one-file-system, добавленный перед правилами исключения. Это приводит к тому, что tar не может перейти в другие монтирования в любом каталоге, включая /mnt или /media.

Другие вопросы по тегам