Ошибка TAR — `wp-content: файл изменился во время чтения`

Ошибка TAR — `wp-content: файл изменился во время чтения`

Фон

У меня есть псевдоним bash, который я использую для резервного копирования домашней папки Wordpress. Команда запускается из/home/waiheke26/sites/www.DOMAIN.co.nz/public

Команда такая:

tar --exclude='./wp-content/uploads' \
    --exclude='./wp-content/cache' \
    --exclude ='./cache' \
    --exclude='./wp-content/backups' \
    --exclude='./wp-snapshots' \
    --exclude='./wp-content/envato-backups' \
    -zcf \
    /home/waiheke26/sites/www.DOMAIN.co.nz/backups/wp-files-$(date +%Y-%m-%d-%H.%M.%S).tar.gz \
    . \ 
    && echo "File backup OK" || echo "File backup failed"';

Проблема

Недавно при запуске команды я получаю ошибку:

tar: ./wp-content: file changed as we read it
File backup failed

Многое из того, что я видел в сети относительно этой file changed as we read itошибки, предполагает, что это происходит из-за того, что пользователь создает файл tar в архивируемом каталоге. В моем случае это не применимо, поскольку файл tar создается в другом месте.

Вопрос

Как определить причину этой ошибки?

решение1

Итак, на время отвлечемся от изучения того, что изменяет wp-content во время работы tar, из-за заявленной чувствительности вашей среды, которую, предположительно, я могу испортить, наблюдая за ней lsofво время операции.

Если вы можете выделить место в своей среде, вы можете поддерживать «офлайн» копию своего публичного контента в актуальном состоянии, используя что-то вроде этого:

rsync -va /home/asdf/public/ /home/asdf/backups/public/ --delete

Он будет работать быстро после первоначального копирования, потому что он будет копировать только различия. Вы можете рассмотреть возможность добавления --excludeздесь опций, чтобы сэкономить работу по копированию файлов, которые вы в любом случае исключите из архива.

Затем, как и прежде, создайте свой tar-архив, указав в качестве источника backups/public:

tar --exclude='./whatever' \
    -zcf \
    /home/asdf/backups/wp-files-$(date +%Y-%m-%d-%H.%M.%S).tar.gz \
    /home/asdf/backups/public \ 
    && echo "File backup OK" || echo "File backup failed"';

По сути, это создает tarсреду, в которой ничего не изменится во время работы, как и предполагали другие.

Связанный контент