Вот вступление к использованию rsync
для резервного копирования на Pi. После создания первоначальной резервной копии ее обновление будет намного быстрее, чем постоянное копирование всего изображения. Вы можете сделать это на локальном жестком диске или по сети.
На самом деле вам не нужна полная копия работающей системы в качестве резервной копии, поскольку некоторые вещи якобы в файловой системе существуют только во время выполнения. Включение этого в резервную копию и последующее использование ее для воссоздания образа позже может создать проблемы для вас.
Есть и другие исключения. rsync
может принять список ( глобальных ) шаблонов для исключения, и их можно прочитать из файла, поэтому давайте сначала рассмотрим, что должно быть в таком файле. Обратите внимание, что записи имеют форму, /directory/*
а не /directory
. Это потому, что мы хотим, чтобы они существовали, но мы не хотим копировать в них что-либо.
/proc/*
/sys/*
Они действительно не существуют на диске. Это интерфейс к ядру, который создает и поддерживает их в памяти . Если вы скопируете их, а затем скопируете обратно в систему и загрузите их, это будет (в лучшем случае) бессмысленно, поскольку ядро использует их в качестве точек монтирования для интерфейсов [Если вы хотите увидеть, что происходит при монтировании раздела файловой системы в каталоге с данными, попробуйте. Это работает и не принесет никакого вреда, но то, что было в каталоге, теперь недоступно.]
Обратите внимание, что очень важно, чтобы точки монтирования /sys
и /proc
существовали. Но они не должны содержать ничего. Следующий:
/dev/*
dev
Каталог не совсем то же самое , как proc
и , sys
но для наших целей. Если вы считаете, что должны сохранить это, чтобы в резервной копии могли быть одинаковые узлы устройства или что-то в этом роде, вы ошибаетесь . Не беспокойся Не копируйте dev
. Когда-то давным-давно Linux работал таким образом, но больше не работает.
/boot/*
Это особый случай с большинством (возможно, со всеми) дистрибутивов Pi, таких как Raspbian. На самом деле это точка монтирования первого, vfat, раздела. Мы собираемся разобраться с этим отдельно. Что бы вы ни делали, не стесняйтесь включать это здесь, потому что, опять же, это точка монтирования.
/tmp/*
/run/*
/run
как правило, не на диске, а в памяти. Возможно, /tmp
может быть слишком (это сэкономит немного действия SD-карты), но в любом случае, как видно из названий, это не места для хранения постоянных данных. Приложения, которые их используют, ожидают, что они могут быть удалены при каждой загрузке.
/mnt/*
/media/*
Это особенно важно, если вы планируете выполнять резервное копирование на жесткий диск или USB-накопитель, а устройство подключено /mnt
или /media
(автомонтирование имеет тенденцию использовать последнее), потому что если вы не исключите расположение этих устройств в файловой системе, вы будете создайте цикл резервного копирования содержимого диска на себя, пока он не исчерпает пространство. Я думаю, rsync
может быть достаточно умен, чтобы заметить что-то глупое, но постарайтесь не проверять предпосылку.
О фактическом резервном копировании: Создайте каталог для резервного копирования на локально смонтированном жестком диске, USB-устройстве и т. Д., Например, «pi_backup». Вы можете поочередно выполнять резервное копирование в удаленное местоположение с помощью ssh
(см. Ниже) или с помощью сетевой файловой системы, но это, вероятно, займет некоторое время в первый раз.
Если файл, содержащий список для исключения, равен /rsync-exclude.txt
1, а ваш диск - /mnt/usbhd
для выполнения фактического резервного копирования:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Обратите внимание, что на конце есть косая чертаpi_backup/
.
Это займет некоторое время и даст много выходных данных (если вы хотите проверить это в журнале, добавьте > rsync.log
). --delete
первый раз бессмысленно, но для сохранения резервной копии используйте его. Это гарантирует, что материал, который вы позже удалили на Pi, также будет удален из вашей резервной копии. a
Наборы рекурсии в каталогах и убеждается все атрибуты файла соответствия. -H
для сохранения жестких ссылок 2 , v
для многословных, поэтому вы получаете некоторые выходные данные (в противном случае rsync
тихо). Смотрите man rsync
больше.
Существует ярлык, с помощью которого вы можете пропустить --exclude-from
файл. Если вы уверены, что все вещи, которые вы не хотите копировать ( /tmp
и т. Д.), Находятся в отдельных файловых системах, вы можете просто использовать:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-x
был вставлен. Это краткая форма --one-file-system
, которая говорит rsync
не пересекать границы файловой системы. Лично я предпочитаю --exclude-from
, но, например, по умолчанию Raspbian, --one-file-system
будет работать нормально. Вы можете использовать оба, если вы хотите быть -x
осторожным: D
Это не совсем полная резервная копия. Достаточно, если вы ничего не вставили boot
и у вас все в порядке с резервным копированием, чтобы просто восстановить систему, вставив карту в компьютер и запустив:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Вы также можете сделать это с картой с новым изображением (при условии, что она совпадает с вашим базовым изображением), хотя это немного неэффективно, если вам нужно создать изображение (потому что вы собираетесь перезаписать большую его часть). Вы также можете подключить другую SD-карту через USB-адаптер с таким изображением на нем и использовать описанный выше метод для сохранения дубликата карты.
Если вы добавили что-то /boot
(например, собственное ядро), в том числе /boot/config.txt
, вы тоже захотите это сделать (довольно просто - тут не так много). Просто сделайте это отдельно, и когда вы восстановите, этот материал будет помещен в первый раздел.
Посмотрите здесь, если вы хотите создать пустой образ в стиле Raspbian, который вы можете затем сделать резервную копию в. Вы можете использовать аналогичную методологию для создания пустой карты в стиле Raspbian - вместо того, чтобы иметь дело с .img
файлом, вы будете иметь дело с реальным устройством (например /dev/sdb
), то есть все, что вам нужно сделать, это создать таблицу разделов, fdisk
а затем формат /dev/sdb1
и sdb2
(или что-то еще) с mkfs
.
Но копировать все изображение проще! Зачем беспокоиться об этом?
Это не так сложно; Я восстановил на пустую карту (отформатированную по последней ссылке) за 10 минут. Да, просто использовать dd
в целом все проще (если вы находите такие вещи, как слова, сбивающие с толку ...), НО тогда требуется довольно много времени каждый раз, когда вы хотите обновить резервную копию, потому что вы должны делать 100% каждый раз. Используя rsync
, когда резервная копия существует, ее обновление происходит намного быстрее, поэтому вы можете настроить ее так, чтобы она происходила безболезненно каждый день через cron. По сети даже. Каждые шесть часов. Чем чаще вы это делаете, тем меньше времени это займет.
rsync
через ssh
Вот пример:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
«Опции» будут, например, -av --delete --exclude-from=/rsync-exclude.txt
и «опции ssh» - это то, что вы обычно используете (если что-нибудь). Вы должны иметь корневой доступ через ssh
сделать это для целей резервного копирования системы (устанавливается PermitRootLogin=yes
в /etc/ssh/sshd_config
и перезапустить сервер).
1 Вы должны сохранить этот файл. Вы можете размещать комментарии в строке, начинающейся с #
или ;
. Это может включать в себя фактическую rsync
команду, которую можно скопировать позже, чтобы вам не приходилось запоминать ее каждый раз.
2 Спасибо Крису за то, что он rsync
не указал это автоматически.
dd
, посмотрите вrsync
.