Резервное копирование Raspberry Pi не должно быть сложным. Несмотря на то, что существует множество сложных решений для резервного копирования, иногда самый простой подход оказывается наиболее эффективным. В этой статье мы покажем вам, как использовать rsync — небольшой, но мощный инструмент командной строки, который идеально подходит для создания надёжных локальных резервных копий вашей системы Raspberry Pi.
Rsync (удаленная синхронизация) — это мощный инструмент для синхронизации и передачи файлов, предустановленный на вашем Raspberry Pi.
По сути, rsync эффективно копирует файлы из одного места в другое, но это гораздо более интеллектуальная операция, чем простое копирование. Она переносит только изменённые части файлов, экономя время и системные ресурсы. Это особенно полезно при резервном копировании больших файлов, которые часто меняются.
В основном я использую rsync для резервного копирования важных пользовательских данных на Pi. Например, мы поддерживаем сервер фотогалереи на своём Raspberry Pi, и rsync идеально подходит для хранения резервной копии всех этих ценных изображений на внешнем диске с автоматическим обнаружением и копированием новых или изменённых файлов.
В отличие от инструментов резервного копирования, которые копируют целые файлы, rsync передает только измененные части, что значительно ускоряет резервное копирование и снижает износ вашей SD-карты. Интерфейс командной строки делает его идеальным для автоматизации заданий cron, а встроенная функция проверки суммы обеспечивает целостность резервной копии. Лучше всего то, что легкий характер rsync означает, что он не замедлит работу вашего Pi, если в данный момент не запущен процесс резервного копирования, и не займет слишком много места на SD-карте.
По этим причинам rsync является лучшим решением для моих нужд, и мы считаем, что это идеальный выбор для многих других пользователей Raspberry Pi, которым нужна надёжная и эффективная система резервного копирования.
Самый простой способ создать резервную копию каталога — это команда:
rsync -av /source/directory /backup/location
Например, чтобы создать резервную копию моего домашнего каталога на внешнем диске, подключённом к «/media/backup», мы используем команду:
rsync -av --delete /home/david/immich-app /media/backup
чтобы создать резервную копию базы данных моей фотобиблиотеки.
Вот что делают различные варианты:
-a
включает режим архивирования, который сохраняет права доступа к файлам, права собственности и временные метки-v
предоставляет подробный вывод, чтобы я мог видеть, что копируется.--delete
удаляет файлы из хранилища резервной копии, которые больше не существуют в источнике.
Примечание: вы также должны знать, что rsync чувствителен к завершающим косым чертам в путях. Завершающая косая черта в источнике означает «скопировать содержимое этого каталога», а не сам каталог. Например, rsync -av --delete /home/pi/folder /media/backup
копирует содержимое «folder
» непосредственно в «backup
», а без косой черты копирует сам каталог «folder
» в «резервную копию».
Прежде чем полагаться на резервное копирование, убедитесь, что оно выполнено правильно. Самый простой способ проверки — использовать опцию «пробный запуск» в rsync, которую можно указать как -n
или --dry-run
. Выполнение команды:
rsync -avn --delete /home/pi/folder /media/backup
Если резервная копия актуальна, файлы, которые нужно перенести, отображаться не будут.
Для более тщательной проверки вы можете добавить параметр -c
или --checksum
в команду rsync. Это медленнее, чем сравнение меток времени и размеров по умолчанию, но гарантирует, что каждый файл в источнике и резервной копии полностью идентичен, благодаря вычислению контрольных сумм. Просто запустите:
rsync -avc --delete /home/pi/folder /media/backup
Самый подробный способ проверки резервной копии — использование команды diff
, которая сравнивает все файлы и каталоги в исходном и резервном расположениях. Чтобы выполнить эту проверку, используйте:
diff -r /home/pi/folder /media/backup/folder
Опция -r
указывает diff на необходимость рекурсивной проверки всех подкаталогов. Если команда не выводит никаких результатов, это означает, что ваша резервная копия идентична исходной. Если есть различия, diff
покажет вам, какие именно файлы отличаются или отсутствуют.
В некоторых ситуациях может быть удобнее и безопаснее создать резервную копию всей SD-карты Raspberry Pi, а не только нескольких важных папок.
Чтобы создавать полные резервные копии Raspberry Pi с помощью rsync, вам понадобится место для резервного копирования — либо другая SD-карта, либо внешний накопитель с достаточным объёмом памяти для хранения всей вашей системы. Резервный накопитель должен быть отформатирован с помощью совместимой с Linux файловой системы, например ext4, чтобы правильно сохранить все разрешения и атрибуты файлов.
Самая сложная часть резервного копирования всей системы Raspberry Pi — это правильная работа со специальными системными каталогами и файлами. По нашему опыту, самое простое решение — исключить системные каталоги, которые либо не нужно сохранять, либо они могут вызвать проблемы при восстановлении. Создайте файл с названием «backup-exclude.txt» и добавьте следующие системные каталоги, которые следует исключить из резервной копии:
При наличии этих исключений вы можете закрыть как можно больше запущенных приложений, а затем выполнить следующую команду резервного копирования:
sudo rsync -avxhP --delete --exclude-from=/home/pi/backup-exclude.txt / /media/backup/rootfs/
Опция -x
предотвращает пересечение rsync границ файловой системы, что может вызвать проблемы с системными каталогами. Опция -h
позволяет rsync отображать размеры файлов и скорость передачи в удобном для восприятия человеком формате.
Хотя резервные копии, созданные вручную, полезны, мы предпочитаем автоматизировать их с помощью встроенного в Linux планировщика cron. Чтобы настроить это, создайте в своём домашнем каталоге файл с именем «backup-pi.sh» со следующим содержимым:
#!/bin/bash BACKUP_DRIVE="/media/backup" LOG_FILE="/home/pi/backup-log.txt" # Проверьте, подключен ли резервный диск if ! mountpoint -q $BACKUP_DRIVE; then echo "Резервный диск не смонтирован в $BACKUP_DRIVE" >> $LOG_FILE exit 1 fi # Создать временную метку для журнала date >> $LOG_FILE # Запустить резервное копирование с проверкой ошибок sudo rsync -avxhP --delete \ --exclude-from=/home/pi/backup-exclude.txt \ / $BACKUP_DRIVE/rootfs/ \ >> $LOG_FILE 2>&1 # Запись завершения резервного копирования echo "Резервное копирование завершено в $(date)" >> $LOG_FILE echo "-------------------" >> $LOG_FILE
Сделайте скрипт исполняемым с помощью chmod +x backup-pi.sh
, затем запланируйте его запуск с помощью cron. Введите crontab -e
и добавьте эту строку, чтобы запускать резервное копирование ежедневно в полночь:
0 0 * * * /home/pi/backup-pi.sh
Для восстановления отдельных файлов или каталогов процесс прост. Просто поменяйте местами источник и место назначения в команде rsync. Например, чтобы восстановить библиотеку фотографий из резервной копии:
rsync -av /media/backup/home/david/immich-app/ /home/david/immich-app/
Для полного восстановления системы сначала потребуется установить новую версию ОС Raspberry Pi на SD-карту. Для начала установите новую версию ОС Raspberry Pi на новую SD-карту. После этого загрузите Pi с новой SD-картой и завершите процесс первоначальной настройки. Затем подключите резервный накопитель к Pi. Когда все будет подключено и смонтировано должным образом, вы сможете восстановить резервную копию с помощью команды rsync:
sudo rsync -avxhP /media/backup/rootfs/ /
После завершения восстановления я рекомендую перезагрузить Raspberry Pi, чтобы проверить, правильно ли загружены все восстановленные файлы. Вам также следует убедиться, что важные службы и настройки работают должным образом.
Если после восстановления некоторые приложения не работают, проверьте их файлы журналов (обычно в /var/log/) на наличие ошибок, связанных с разрешениями. Возможно, вам потребуется выполнить:
sudo chown -R $USER:$USER /home/$USER
чтобы изменить владельца файлов в вашем домашнем каталоге. Как видите, восстановление с помощью rsync так же просто, как и создание резервных копий — просто поменяйте местами пути к источнику и месту назначения в командах.
Хотя я предпочитаю простоту командной строки rsync, есть несколько отличных альтернатив с графическим интерфейсом, если вам не нравится работать с терминалом. Например, Syncthing позволяет синхронизировать несколько папок в разных системах, а Timeshift предлагает функцию создания снимков системы с удобным интерфейсом. Какой бы инструмент вы ни выбрали, важно регулярно создавать резервные копии Raspberry Pi, чтобы защитить ценные данные и системные настройки.