Как создать собственный сценарий резервного копирования? [закрыто]

Попробуйте

sudo apt-get purge grub\*
sudo apt-get install grub-efi
sudo apt-get autoremove
sudo update-grub

исправить.

0
задан 27 February 2018 в 16:07

2 ответа

Непонятно: какие разрешения вы изменили? Но я проигнорирую это сообщение:)

Обычно у пользователей системы нет разрешений на запись вне их собственного домашнего каталога, по умолчанию это /home/<user>. Также пользователь-A не может читать большинство файлов пользователя-B. Итак, согласно пути в вашем вопросе, для резервного копирования всех файлов и каталогов, расположенных в /home, вы должны запустить команду с привилегиями root, используя sudo.

Кроме того, вы используете неправильную опцию - x вместо c - используйте tar --help:

tar -cf archive.tar foo bar # Create archive.tar from files foo and bar. tar -xf archive.tar # Extract all files from archive.tar.

Таким образом, правая команда должна быть одной из следующих:

sudo tar -zcvf /home/homefiles.tar.gz /home/ --exclude=/home/homefiles.tar.gz # the backup will be created in the directory `/home` tar -zcvf /home/<user>/homefiles.tar.gz /home/<user> --exclude=/home/<user>/homefiles.tar.gz

Вот расширенный пример для вас:

Как создать собственный сценарий резервного копирования

Предположим вместе с каталогом /home также Apache и MySQL, и мы хотим сделать более полную резервную копию системы.

1. Создайте файл с именем mybackup; сделать его исполняемым; найдите его в /usr/local/bin, чтобы он был доступен как система командной оболочки. Создайте каталог, в котором будут храниться файлы резервных копий:

sudo touch /usr/local/bin/mybackup && sudo chmod +x /usr/local/bin/mybackup sudo mkdir /var/backup

Вставьте следующий скрипт в качестве содержимого файла /usr/local/bin/mybackup и сохраните его:

#!/bin/bash ## Get the current date as variable. TODAY="$(date +%Y-%m-%d)" ## Delete backup files older than 2 weeks before create the new one. find /var/backup/ -mtime +14 -type f -delete ## MySQL Section. The first line is if you are using `mysqldump`, ## the next line is for `automysqlbackup`. I'm using both. mysqldump -u'root' -p'<my-pwd>' --all-databases | gzip > /var/backup/mysql-all-db.sql.gz automysqlbackup ## Tar Section. Create a backup file, with the current date in its name. ## Add -h to convert the symbolic links into a regular files. ## Backup some system files, also the entire `/home` directory, etc. ## --exclude some directories, for example the the browser's cache, `.bash_history`, etc. tar zcvf "/var/backup/my-backup-$TODAY.tgz" \ /etc/hosts /etc/sudoers* /var/spool/cron/crontabs /etc/cron* \ /etc/apache2 /etc/letsencrypt /etc/php/7.0/apache2/php.ini \ /etc/phpmyadmin/apache.conf /etc/mysql/debian.cnf \ /etc/ssh/sshd_config* /etc/pam.d/sshd \ /usr/local/bin \ /var/backup/mysql-all-db.sql.gz /var/lib/automysqlbackup/latest/*.sql.gz \ /root \ /home \ /var/www \ --exclude=/home/<some-user>/.composer --exclude=/home/<some-user>/.npm ## MySQL Section - remove the DB backup files, if you want: #rm /var/lib/automysqlbackup/latest/*.sql.gz rm /var/backup/mysql-all-db.sql.gz Если это VPS, возможно, вы захотите получить доступ к своему файлу резервного копирования из Интернета через веб-браузер. В этом случае мы могли бы зашифровать файл для дополнительной безопасности. Если вы являетесь поклонником 7zip, добавьте некоторую команду в следующую строку внизу: rm /var/www/html/the-location/* 7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz" Если это рабочий стол, возможно, вам захочется исключить весь каталог Downloads для каждого пользователя. Вы также можете исключить все файлы, размер которых превышает или / и исключая расширения некоторых файлов. Обратите внимание, что все команды, используемые выше, расположены в /bin или /usr/bin, которые указаны в умолчанию $PATH Cron. Если вы намерены использовать задание Cron для автоматизации задачи, и у вас есть команды (скрипты), которые расположены за пределами этих каталогов, вы должны использовать /the/full/path/to/the/script :)

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

sudo mybackup

3. Чтобы автоматизировать задачу, вы можете добавить новую запись в файл crontab root с помощью команды sudo crontab -e. Например, чтобы исполнить сценарий каждую ночь в 1:15, задание задания Cron должно быть:

15 1 * * * /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1 Если это VPS, возможно, вы захотите получить доступ к своему файлу резервной копии из Интернета через веб-браузер. В этом случае мы могли бы зашифровать файл для дополнительной безопасности. Если вы являетесь фанатом 7zip, добавьте некоторую команду в качестве следующей в нижней части скрипта: rm /var/www/html/the-location/* 7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz"

В качестве альтернативы я бы предпочел создать сценарий в /etc/cron.daily/:

sudo touch /etc/cron.daily/mybackup && sudo chmod +x /etc/cron.daily/mybackup

Содержимое файла должно быть чем-то таким:

#!/bin/sh test -x /usr/local/bin/mybackup || exit 0 echo -e "*** Log Begin $(date +%Y-%m-%d) ***\n" >> /var/log/mybackup-cron.log /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1 echo -e "*** Log End $(date +%Y-%m-%d) *** \n" >> /var/log/mybackup-cron.log

Обновление:

Вышеупомянутый скрипт можно найти в репозитории GitHub, названном crontab .

5
ответ дан 17 July 2018 в 19:56

Непонятно: какие разрешения вы изменили? Но я проигнорирую это сообщение:)

Обычно у пользователей системы нет разрешений на запись вне их собственного домашнего каталога, по умолчанию это /home/<user>. Также пользователь-A не может читать большинство файлов пользователя-B. Итак, согласно пути в вашем вопросе, для резервного копирования всех файлов и каталогов, расположенных в /home, вы должны запустить команду с привилегиями root, используя sudo.

Кроме того, вы используете неправильную опцию - x вместо c - используйте tar --help:

tar -cf archive.tar foo bar # Create archive.tar from files foo and bar. tar -xf archive.tar # Extract all files from archive.tar.

Таким образом, правая команда должна быть одной из следующих:

sudo tar -zcvf /home/homefiles.tar.gz /home/ --exclude=/home/homefiles.tar.gz # the backup will be created in the directory `/home` tar -zcvf /home/<user>/homefiles.tar.gz /home/<user> --exclude=/home/<user>/homefiles.tar.gz

Вот расширенный пример для вас:

Как создать собственный сценарий резервного копирования

Предположим вместе с каталогом /home также Apache и MySQL, и мы хотим сделать более полную резервную копию системы.

1. Создайте файл с именем mybackup; сделать его исполняемым; найдите его в /usr/local/bin, чтобы он был доступен как система командной оболочки. Создайте каталог, в котором будут храниться файлы резервных копий:

sudo touch /usr/local/bin/mybackup && sudo chmod +x /usr/local/bin/mybackup sudo mkdir /var/backup

Вставьте следующий скрипт в качестве содержимого файла /usr/local/bin/mybackup и сохраните его:

#!/bin/bash ## Get the current date as variable. TODAY="$(date +%Y-%m-%d)" ## Delete backup files older than 2 weeks before create the new one. find /var/backup/ -mtime +14 -type f -delete ## MySQL Section. The first line is if you are using `mysqldump`, ## the next line is for `automysqlbackup`. I'm using both. mysqldump -u'root' -p'<my-pwd>' --all-databases | gzip > /var/backup/mysql-all-db.sql.gz automysqlbackup ## Tar Section. Create a backup file, with the current date in its name. ## Add -h to convert the symbolic links into a regular files. ## Backup some system files, also the entire `/home` directory, etc. ## --exclude some directories, for example the the browser's cache, `.bash_history`, etc. tar zcvf "/var/backup/my-backup-$TODAY.tgz" \ /etc/hosts /etc/sudoers* /var/spool/cron/crontabs /etc/cron* \ /etc/apache2 /etc/letsencrypt /etc/php/7.0/apache2/php.ini \ /etc/phpmyadmin/apache.conf /etc/mysql/debian.cnf \ /etc/ssh/sshd_config* /etc/pam.d/sshd \ /usr/local/bin \ /var/backup/mysql-all-db.sql.gz /var/lib/automysqlbackup/latest/*.sql.gz \ /root \ /home \ /var/www \ --exclude=/home/<some-user>/.composer --exclude=/home/<some-user>/.npm ## MySQL Section - remove the DB backup files, if you want: #rm /var/lib/automysqlbackup/latest/*.sql.gz rm /var/backup/mysql-all-db.sql.gz Если это VPS, возможно, вы захотите получить доступ к своему файлу резервного копирования из Интернета через веб-браузер. В этом случае мы могли бы зашифровать файл для дополнительной безопасности. Если вы являетесь поклонником 7zip, добавьте некоторую команду в следующую строку внизу: rm /var/www/html/the-location/* 7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz" Если это рабочий стол, возможно, вам захочется исключить весь каталог Downloads для каждого пользователя. Вы также можете исключить все файлы, размер которых превышает или / и исключая расширения некоторых файлов. Обратите внимание, что все команды, используемые выше, расположены в /bin или /usr/bin, которые указаны в умолчанию $PATH Cron. Если вы намерены использовать задание Cron для автоматизации задачи, и у вас есть команды (скрипты), которые расположены за пределами этих каталогов, вы должны использовать /the/full/path/to/the/script :)

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

sudo mybackup

3. Чтобы автоматизировать задачу, вы можете добавить новую запись в файл crontab root с помощью команды sudo crontab -e. Например, чтобы исполнить сценарий каждую ночь в 1:15, задание задания Cron должно быть:

15 1 * * * /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1 Если это VPS, возможно, вы захотите получить доступ к своему файлу резервной копии из Интернета через веб-браузер. В этом случае мы могли бы зашифровать файл для дополнительной безопасности. Если вы являетесь фанатом 7zip, добавьте некоторую команду в качестве следующей в нижней части скрипта: rm /var/www/html/the-location/* 7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz"

В качестве альтернативы я бы предпочел создать сценарий в /etc/cron.daily/:

sudo touch /etc/cron.daily/mybackup && sudo chmod +x /etc/cron.daily/mybackup

Содержимое файла должно быть чем-то таким:

#!/bin/sh test -x /usr/local/bin/mybackup || exit 0 echo -e "*** Log Begin $(date +%Y-%m-%d) ***\n" >> /var/log/mybackup-cron.log /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1 echo -e "*** Log End $(date +%Y-%m-%d) *** \n" >> /var/log/mybackup-cron.log

Обновление:

Вышеупомянутый скрипт можно найти в репозитории GitHub, названном crontab .

5
ответ дан 23 July 2018 в 20:41
  • 1
    Благодарю. Как я могу сжать все файлы, которые не использовались в течение одной недели с tar? Должен ли я использовать работу cron? – user 27 February 2018 в 10:32
  • 2
    @ 20_90, В комментариях к этому вопросу Ринзвинд дал вам ответ на этот вопрос. Думаю, я ничего не могу добавить к этому ответу. – pa4080 27 February 2018 в 13:53
  • 3
    @ 20_90 - невозможно в обычном Ubuntu. Вам нужно будет добавить atime к вашим настройкам монтирования, и эта опция была удалена из-за того, что она --kills-- SSDs: atime означает запись каждого файла в любое время, когда он изменен, что делает его большим количеством записей , Смертельно для SSD. Теперь у нас есть что-то, что записывается на диск один раз так часто, но это также убило способность знать, когда файл был прочитан. – Rinzwind 27 February 2018 в 14:02
  • 4
    @Rinzwind Действительно ли atime как опция монтирования удалена? Моя manpage (17.10.1) все еще упоминает об этом. Я думал, что это просто очень обескураживает и больше не дефолт (с тех пор). – PerlDuck 27 February 2018 в 14:06

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

Похожие вопросы: