Настройка резервного копирования файлов проектов (tar)
Резервное копирование проектов с помощью tar: ваш спасательный круг в мире веб-разработки
Представьте: вы месяцами работали над проектом, настраивали сервер, оптимизировали код, а в один "прекрасный" день жёсткий диск умирает. Или хакер шифрует ваши файлы. Или вы случайно удалили критически важную папку командой rm -rf. Без резервной копии — всё пропало.
Сегодня вы научитесь создавать надёжные архивы своих проектов с помощью утилиты tar — стандартного инструмента Linux, который:
✅ Сжимает файлы (экономит место на диске).
✅ Сохраняет права доступа (важно для безопасности).
✅ Работает с любыми типами файлов (от HTML до баз данных).
✅ Автоматизируется (можно запускать по расписанию).
Это как страховка для вашего бизнеса — дешёвая, но спасающая в критических ситуациях.
1. Почему именно tar? Альтернативы и их недостатки
| Инструмент | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
tar |
Сохраняет права доступа, работает с любыми файлами, поддерживает сжатие | Не шифрует данные (нужно дополнительно) | Основной инструмент для бэкапов |
zip/unzip |
Прост в использовании, кроссплатформенный | Не сохраняет права доступа (в Linux это критично) | Для передачи файлов на Windows |
rsync |
Синхронизирует только изменённые файлы | Не создаёт единый архив (нужно дополнительно упаковывать) | Для инкрементальных бэкапов |
| Облачные сервисы (AWS S3, Dropbox) | Автоматизация, гео-резервирование | Платно, зависимость от интернета | Для долговременного хранения |
Вывод: tar — оптимальный выбор для локальных бэкапов (на тот же сервер или другой диск). Для максимальной безопасности его комбинируют с шифрованием (gpg) и удалённым хранением (scp, rsync).
2. Базовые команды tar: создаём и распаковываем архивы
2.1. Создание архива (без сжатия)
Команда:
tar -cvf архив.tar /путь/к/папке
-c(create) — создать архив.-v(verbose) — показывать процесс (чтобы видеть, какие файлы добавляются).-f(file) — указать имя архива.
Пример:
tar -cvf my_project_backup.tar /var/www/my_project
→ Создаст файл my_project_backup.tar с содержимым папки /var/www/my_project.
⚠️ Важно: Архив не сжат — занимает столько же места, сколько оригинальные файлы.
2.2. Создание архива со сжатием (экономия места)
Чтобы сжать архив, добавьте одну из опций:
| Опция | Тип сжатия | Расширение архива | Скорость | Степень сжатия |
|---|---|---|---|---|
-z |
gzip | .tar.gz или .tgz |
Быстро | Средняя |
-j |
bzip2 | .tar.bz2 |
Медленно | Высокая |
-J |
xz | .tar.xz |
Очень медленно | Максимальная |
Примеры:
# Сжатие gzip (рекомендуется для большинства случаев)
tar -czvf my_project.tar.gz /var/www/my_project
# Сжатие xz (если нужно максимально сжать, например, для долговременного хранения)
tar -cJvf my_project.tar.xz /var/www/my_project
💡 Совет: Для веб-проектов обычно хватает gzip (-z). Если архивируете логи или текстовую информацию, xz сэкономит до 30% места.
2.3. Распаковка архива
Команда:
tar -xvf архив.tar [-C /путь/куда/распаковывать]
-x(extract) — распаковать.-C— указать целевую папку (если не указать, распакуется в текущую).
Примеры:
# Распаковка в текущую папку
tar -xvf my_project.tar.gz
# Распаковка в конкретную папку
tar -xvf my_project.tar.gz -C /backup/restored_project/
⚠️ Осторожно: Если распаковать архив поверх существующих файлов, они перезапишутся!
2.4. Просмотр содержимого архива (без распаковки)
Команда:
tar -tvf архив.tar
-t(list) — показать список файлов.
Пример:
tar -tvf my_project.tar.gz | grep "config" # Найдёт все файлы с "config" в имени
3. Продвинутые приёмы: исключения, многотомные архивы, проверка целостности
3.1. Исключение ненужных файлов (экономия места и времени)
Допустим, вам не нужно бэкапить кэш, логи или временные файлы. Используйте --exclude:
tar -czvf my_project_clean.tar.gz /var/www/my_project \
--exclude="*.log" \
--exclude="cache/*" \
--exclude="tmp/*"
Альтернатива: Создайте файл .tarignore (как .gitignore) и укажите его через --exclude-from:
tar -czvf my_project.tar.gz /var/www/my_project --exclude-from=.tarignore
3.2. Разбивка архива на части (для больших проектов)
Если архив больше 4 ГБ (ограничение FAT32) или нужно перенести его на флешку, разбейте на тома:
tar -czvf - /var/www/my_project | split -b 2G - my_project_part_
-b 2G— размер каждого тома (2 ГБ).my_project_part_— префикс для частей (получитсяmy_project_part_aa,my_project_part_abи т. д.).
Как собрать обратно?
cat my_project_part_* | tar -xzv
3.3. Проверка целостности архива
Чтобы убедиться, что архив не повреждён, используйте:
tar -tvfz my_project.tar.gz > /dev/null && echo "Архив цел" || echo "Архив повреждён"
- Если архив цел, команда вернёт
0(успех). - Если повреждён — ненулевой код.
💡 Совет: Автоматизируйте проверку в cron (см. раздел 4).
4. Автоматизация бэкапов: cron + tar
Ручные бэкапы — это риск забыть. Настроим автоматическое резервное копирование по расписанию.
4.1. Создание скрипта для бэкапа
Создайте файл /usr/local/bin/backup_project.sh:
#!/bin/bash
# Пути
SOURCE="/var/www/my_project"
BACKUP_DIR="/backup"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_NAME="my_project_$DATE.tar.gz"
# Создание архива
tar -czvf $BACKUP_DIR/$BACKUP_NAME $SOURCE --exclude="*.log" --exclude="cache/*"
# Удаление старых бэкапов (старше 30 дней)
find $BACKUP_DIR -name "my_project_*.tar.gz" -mtime +30 -delete
# Проверка архива
if tar -tvfz $BACKUP_DIR/$BACKUP_NAME > /dev/null; then
echo "Бэкап $BACKUP_NAME создан успешно" >> $BACKUP_DIR/backup.log
else
echo "ОШИБКА: Бэкап $BACKUP_NAME повреждён" >> $BACKUP_DIR/backup.log
fi
Сделайте скрипт исполняемым:
chmod +x /usr/local/bin/backup_project.sh
4.2. Настройка задачи в cron
Откройте крон:
crontab -e
Добавьте строку для ежедневного бэкапа в 3:00 ночи:
0 3 * * * /usr/local/bin/backup_project.sh
Формат:
минута час день_месяца месяц день_недели команда
*— любой.0 3 * * *— каждый день в 3:00.
💡 Совет: Для арбитражников полезно делать бэкапы перед запуском новых кампаний (например, в 8:00 и 20:00).
4.3. Удалённое хранение бэкапов (дополнительная защита)
Локальные бэкапы могут погибнуть вместе с сервером. Отправляйте их на другой сервер или в облако:
Вариант 1: Копирование по SSH (scp)
scp /backup/my_project_*.tar.gz user@remote_server:/remote_backup/
Вариант 2: Синхронизация с облаком (rclone)
rclone copy /backup my_google_drive:backups/
(Настройте rclone заранее: инструкция)
5. Восстановление из бэкапа: пошаговая инструкция
Допустим, проект сломался. Как вернуть всё назад?
Шаг 1: Остановите веб-сервер (если восстанавливаете живой проект)
systemctl stop nginx # или apache2
Шаг 2: Распакуйте бэкап в временную папку
mkdir /tmp/restore
tar -xzvf /backup/my_project_2024-05-20.tar.gz -C /tmp/restore
Шаг 3: Проверьте содержимое
ls -la /tmp/restore
Шаг 4: Замените повреждённые файлы
rsync -av /tmp/restore/ /var/www/my_project/
-a— архивный режим (сохраняет права и владельцев).-v— показывать процесс.
Шаг 5: Перезапустите сервер
systemctl start nginx
⚠️ Внимание: Если восстанавливаете базу данных, используйте mysql/mongorestore (это тема отдельного урока).
6. Типичные ошибки и как их избежать
| Ошибка | Причина | Решение |
|---|---|---|
| Архив не создаётся | Не хватает прав на папку | chmod 755 /путь/к/папке |
| Файлы в архиве битые | Диск переполнен | Проверьте df -h, освободите место |
| Бэкап занимает слишком много места | Не используется сжатие или исключения | Добавьте -z и --exclude |
| Не распаковывается на другом сервере | Разные версии tar или права доступа |
Используйте --numeric-owner при создании архива |
| Cron не выполняет скрипт | Не указан полный путь к командам | В скрипте используйте /usr/bin/tar вместо tar |
Практика для закрепления
Упражнение 1: Базовый бэкап
- Создайте тестовую папку
/home/user/test_backupс 3-5 файлами. - Заархивируйте её в
test.tar.gzс помощьюtar -czvf. - Удалите оригинальную папку и восстановите её из архива.
❓ Вопрос: Какая команда покажет содержимое архива без распаковки?
Упражнение 2: Исключение файлов
- Добавьте в
/home/user/test_backupфайлsecret.log. - Создайте архив
test_clean.tar.gz, исключив все.logфайлы. - Проверьте, что
secret.logотсутствует в архиве.
❓ Вопрос: Как исключить всю папку tmp при архивации?
Упражнение 3: Автоматизация с cron
- Напишите скрипт, который:
- Архивирует
/var/log(исключая*.gzфайлы). - Сохраняет архив в
/backup/logs_$(date +%F).tar.gz. - Удаляет архивы старше 7 дней.
- Архивирует
- Настройте выполнение скрипта каждый день в 23:55.
❓ Вопрос: Как проверить, что cron действительно запускает задачу? (Подсказка: grep CRON /var/log/syslog)
Упражнение 4: Многотомный архив
- Создайте архив папки
/varразмером 100 МБ на том. - Проверьте, что все части (
aa,abи т. д.) существуют. - Соберите архив обратно и убедитесь, что файлы целы.
❓ Вопрос: Почему нельзя просто склеивать части архива через cat, если они были созданы без split?
Упражнение 5: Удалённое хранение
- Настройте автоматическую отправку бэкапов на другой сервер по
scp. - Проверьте, что файлы появляются в целевой папке.
❓ Вопрос: Как защитить передачу бэкапов от перехвата? (Подсказка: ssh-keygen + отключение парольной аутентификации)
Итоги урока
✅ Вы научились:
- Создавать и распаковывать архивы
tarс разными типами сжатия. - Исключать ненужные файлы для экономии места.
- Автоматизировать бэкапы с помощью
cron. - Восстанавливать проекты из архивов.
- Защищать бэкапы от потери (удалённое хранение).
🚀 Следующий шаг: Комбинируйте tar с шифрованием (gpg) и инкрементальными бэкапами (rsync). Это темы следующих уроков!
Вопросы? Пишите в комментариях — разберём сложные моменты! 🛠️
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно