Может ли малина Pi использоваться для создания резервной копии?

Этот вопрос отвечает на вопрос о том, как я использую внешний компьютер для создания резервной копии моего RPi.

Мне интересно, могу ли я создать резервный образ используемой в данный момент SD-карты и скопировать ее в файл на USB-накопителе. Это возможно? Если нет, есть ли способ создать резервную копию RPi без привлечения другого компьютера?

64 голоса | спросил Eric Wilson 14 MaramThu, 14 Mar 2013 05:14:54 +04002013-03-14T05:14:54+04:0005 2013, 05:14:54

7 ответов


71

Вот вступление к использованию rsync для резервного копирования на пи. Как только первоначальная резервная копия создается, ее обновление до сегодняшнего дня намного быстрее, чем постоянное копирование всего изображения. Вы можете сделать это на локальном жестком диске или в сети.

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

Есть и другие исключения. Rsync может принять список ( glob ) шаблонов для исключения, и это может быть читайте из файла, поэтому давайте сначала пройдите через то, что должно быть в таком файле. Обратите внимание, что записи имеют вид /directory/*, а не /directory. Это потому, что мы хотим, чтобы они существовали, но мы не хотим ничего копировать в них.

/proc/*
/sys/*

Они на самом деле не существуют на диске. Они являются интерфейсом к ядру, который создает и поддерживает их в памяти . Если вы скопируете их, а затем скопируете обратно в систему и загрузите, это будет (в лучшем случае) бессмысленным, поскольку ядро ​​использует их как точки монтирования для интерфейсов. [Если вы хотите увидеть, что происходит, когда вы монтируете устройство на каталог с данными в нем, попробуйте. Он работает и не повредит, но материал, который был в каталоге, теперь недоступен.]

Обратите внимание, что важно, чтобы точки подключения /sys и /proc существовали. Но они не должны содержать ничего. Далее:

/dev/*

Каталог dev не совсем то же самое, что и proc и sys, но для наших целей он есть. Если вы считаете, что вам следует сохранить это, чтобы вы могли иметь одни и те же узлы устройства в своей резервной копии или что-то в этом роде, вы ошибаетесь . Не беспокойтесь. Не копируйте dev. Когда-то давно Linux работал так, но этого больше нет.

/boot/*

Это своего рода особый случай с наиболее (возможно, все) специфическими дистрибутивами Pi, такими как Raspbian. Это на самом деле точка монтирования для первого, vfat, partition. Мы будем иметь дело с этим отдельно. Что бы вы ни делали, не беспокойтесь, включив его здесь, потому что снова это точка монтирования.

/tmp/*
/run/*

/run обычно не находится на диске, он находится в памяти. Возможно, /tmp может быть слишком (это сэкономит немного действия SD-карты), но в любом случае, поскольку имена подразумевают, это не места для хранения постоянных данных. Приложения, которые их используют, ожидают, что они могут быть удалены при каждой загрузке.

/mnt/*
/media/8

Это особенно важно, если вы планируете выполнять резервное копирование на жесткий диск или 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 tra тщательно: D

Это не совсем полная резервная копия. Достаточно, если вы ничего не загрузили, и вам будет хорошо с помощью резервного копирования, чтобы просто восстановить систему, вставив карту в компьютер и запустив ее:

rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/

Вы также можете сделать это с помощью карты с новым изображением на ней (предположим, что это то же самое, что и ваше базовое изображение), хотя это немного неэффективно, если вам нужно создать изображение (потому что вы собираетесь перезаписать большую часть Это). Вы также можете подключить другую карту SD через адаптер USB с таким изображением на ней и использовать вышеуказанный метод для поддержания дублирующей карты.

Если вы поместили вещи в /boot (например, настраиваемое ядро), включая /boot/config.txt, вы тоже захотите это сделать (довольно просто - есть не так много). Просто делайте это отдельно, и когда вы восстанавливаете, этот материал входит в первый раздел.

См. здесь , если вы хотите создать образ blank стиля Raspbian, который вы может затем выполнить резервное копирование. Вы можете использовать подобную методологию для создания пустой карты стиля Raspbian - вместо того, чтобы иметь дело с файлом .img, вы должны иметь дело с реальным устройством (например, /dev/sdb), то есть все, что вам нужно сделать, это создать таблицу разделов с помощью fdisk, а затем форматировать /dev/sdb1 и sdb2 ( или что-то еще) с помощью mkfs.

Но копирование всего изображения проще! Зачем беспокоиться об этом?

Это не так сложно; Я восстановил пустую карточку (отформатированную согласно последней ссылке) за 10 минут. Да, просто использование dd в целом проще (если вы находите такие вещи, как слова, запутывающими ...), но тогда это занимает довольно много времени, каждый раз, когда вы хотите обновить резервную копию, потому что вы должны сделать 100% от этого каждый раз. Используя rsync, как только существует резервная копия, обновление происходит намного быстрее, поэтому вы можете установить это безболезненно каждый день через cron. По сети даже. Каждые шесть часов. Чем чаще вы это делаете, тем меньше времени займет.

rsync через ssh

Вот пример:

rsync [options] --rsh="ssh [ssh options]" [email protected][the pi ip]:/ /backup/rpi/

«Опции» будут, например, -av --delete --exclude-from=/rsync-exclude.txt и "ssh options" - это то, что вы обычно используете (если есть). У вас должен быть доступ root через ssh для этого в целях резервного копирования системы (установите PermitRootLogin=yes в /etc/ssh/sshd_config) и перезапустите сервер).


  1. Вы должны сохранить этот файл. Вы можете добавлять комментарии в строки, начинающиеся с # или ;. Это может включать в себя фактическую команду rsync, которую можно скопировать позже, поэтому вам не нужно запоминать ее каждый раз.

  2. Спасибо Крису за указание, что rsync не делает это автоматически.

ответил goldilocks 17 MarpmSun, 17 Mar 2013 19:32:52 +04002013-03-17T19:32:52+04:0007 2013, 19:32:52
22

Рабочий скрипт из сообщества малины, сделанный членом там.

Вы можете повторно использовать и настраивать код, как вам нравится. Это хорошо документировано и понятно.

 #!/bin/bash

# Setting up directories
SUBDIR=raspberrypi_backups
DIR=/hdd/$SUBDIR

echo "Starting RaspberryPI backup process!"

# First check if pv package is installed, if not, install it first
PACKAGESTATUS=`dpkg -s pv | grep Status`;

if [[ $PACKAGESTATUS == S* ]]
   then
      echo "Package 'pv' is installed."
   else
      echo "Package 'pv' is NOT installed."
      echo "Installing package 'pv'. Please wait..."
      apt-get -y install pv
fi

# Check if backup directory exists
if [ ! -d "$DIR" ];
   then
      echo "Backup directory $DIR doesn't exist, creating it now!"
      mkdir $DIR
fi

# Create a filename with datestamp for our current backup (without .img suffix)
OFILE="$DIR/backup_$(date +%Y%m%d_%H%M%S)"

# Create final filename, with suffix
OFILEFINAL=$OFILE.img

# First sync disks
sync; sync

# Shut down some services before starting backup process
echo "Stopping some services before backup."
service apache2 stop
service mysql stop
service cron stop

# Begin the backup process, should take about 1 hour from 8Gb SD card to HDD
echo "Backing up SD card to USB HDD."
echo "This will take some time depending on your SD card size and read performance. Please wait..."
SDSIZE=`blockdev --getsize64 /dev/mmcblk0`;
pv -tpreb /dev/mmcblk0 -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock

# Wait for DD to finish and catch result
RESULT=$?

# Start services again that where shutdown before backup process
echo "Start the stopped services again."
service apache2 start
service mysql start
service cron start

# If command has completed successfully, delete previous backups and exit
if [ $RESULT = 0 ];
   then
      echo "Successful backup, previous backup files will be deleted."
      rm -f $DIR/backup_*.tar.gz
      mv $OFILE $OFILEFINAL
      echo "Backup is being tarred. Please wait..."
      tar zcf $OFILEFINAL.tar.gz $OFILEFINAL
      rm -rf $OFILEFINAL
      echo "RaspberryPI backup process completed! FILE: $OFILEFINAL.tar.gz"
      exit 0
# Else remove attempted backup file
   else
      echo "Backup failed! Previous backup files untouched."
      echo "Please check there is sufficient space on the HDD."
      rm -f $OFILE
      echo "RaspberryPI backup process failed!"
      exit 1
fi

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

* И благодарю вас за отзыв AndersW (нажмите для скрипта GIT)

ответил ppumkin 14 MarpmThu, 14 Mar 2013 15:58:02 +04002013-03-14T15:58:02+04:0003 2013, 15:58:02
9

Я адаптировал ответ @goldilocks на rsync для резервного копирования на pi. Я делаю резервную копию раздела ext4 на жестком диске, установленном на Pi. Если жесткий диск не установлен, rsync будет копировать в каталог монтирования (пока карта SD не будет заполнена). Если жесткий диск не установлен в режиме rw, генерируются обильные сообщения об ошибках. Ни один из них не является желательным, поэтому прежде чем продолжить, убедитесь, что мой раздел установлен в режиме rw.

ПРИМЕЧАНИЕ 2015-03-03 Я изменил свой ответ для точной копирования жестких ссылок. Оригинал работал, но преобразовал много hardlinks в файлы. В дополнение к тратам пространства, это ставит под угрозу многие применения, которые предполагают наличие жестких ссылок. (Мое текущее изображение имеет 869 ссылок, многие из них в Raspbian.)

Мой сценарий для этого следует. (Мой раздел PiData, установлен на /mnt/PiData

 #!/bin/bash
# script to synchronise Pi files to backup
BACKUP_MOUNTED=$(mount | awk '/PiData/ {print $6}' | grep "rw")
if [ $BACKUP_MOUNTED ]; then
    echo $BACKUP_MOUNTED
    echo "Commencing Backup"
    rsync -avH --delete-during --delete-excluded --exclude-from=/usr/bin/rsync-exclude.txt / /mnt/PiData/PiBackup/
else
    echo "Backup drive not available or not writable"
fi

Восстановить (или обновить другое Pi) следующим образом: -

 sudo rsync -avH /mnt/PiData/PiBackup/ /

Я удалил rsync-exclude.txt, чтобы устранить ненужные файлы.

Первая группа - это каталоги, задокументированные @goldilocks https://raspberrypi.stackexchange.com/users/5538/

Вторая группа - это файлы и каталоги, созданные OS X, когда я обращаюсь к своему Pi, используя AFP (Apple Filing Protocol). (Они обычно невидимы для OS X, но не для Raspbian. В любом случае нет необходимости в резервном копировании.) Даже если вы никогда не используете AFP, это не повредит.

Третья группа - это файлы, которые не нужно копировать (и, конечно же, не копировать на другой Pi). Примеры fake-hwclock.data, отчеты RPi-Monitor. Вероятно, у вас будут другие.

 /proc/*
/sys/*
/dev/*
/boot/*
/tmp/*
/run/*
/mnt/*

.Trashes
._.Trashes
.fseventsd
.Spotlight-V100
.DS_Store
.AppleDesktop
.AppleDB
Network Trash Folder
Temporary Items

.bash_history
/etc/fake-hwclock.data
/var/lib/rpimonitor/stat/
ответил Milliways 26 FebruaryEurope/MoscowbThu, 26 Feb 2015 07:36:58 +0300000000amThu, 26 Feb 2015 07:36:58 +030015 2015, 07:36:58
5

У меня есть три Pis, работающих в моей локальной сети, и вам нужно делать резервные копии на обычной базе с помощью cron, когда они работают и работают. Вот почему я создал скрипт, который может создавать резервные копии dd, tar и rsync и восстанавливать их. Я предпочитаю использовать rsync для своих резервных копий, но другие люди предпочитают dd или tar. Он уже используется многими людьми. Надеюсь, это полезно и для других :-) raspibackup - Малина создает резервные копии самого себя

ответил framp 17 WedEurope/Moscow2014-12-17T19:09:59+03:00Europe/Moscow12bEurope/MoscowWed, 17 Dec 2014 19:09:59 +0300 2014, 19:09:59
2

Вот наш стабильный инструмент для таких целей: https://github.com/aktos -io /Актос-TKS-инструменты

Этот инструмент записывается в соединения make ssh, make backup-root, make mount-root из отдаленных мест вначале, а затем добавляются локальные сеансы. Таким образом, он поддерживает локальные резервные копии, прямые удаленные резервные копии, удаленные резервные копии прокси. Резервные копии берутся инкрементально (переносятся только diff), а резервные каталоги являются автономными (просто выберите каталог /версию для восстановления, в любом каталоге имеется полная резервная копия). Конечно, у вас есть версии (backup.last-0 - самый новый). Вы можете прервать процесс резервного копирования в любое время и продолжить позже.

Вот инструкции по вашей конкретной проблеме:

 ssh to-your-raspberry
 cd /mnt/usb0/my-rpi-backups
 git clone https://github.com/ceremcem/aktos-dcs-tools backup-tools
 ln -s backup-tools/Makefile .

 ./backup-tools/configure # you do not need to make any settings for local sessions, just save the default 

 # just for the first time
 make set-local-session  # a flag file is created
 make init               # snapshots directory is created

 # anytime you want to back up
 make backup-root        # backup with rsync

ИЗМЕНИТЬ

Теперь добавлена ​​новая цель: вы можете создать физическую SD-карту из своих резервных копий с помощью одной команды:

make create-disk-from-last-backup

Следуйте инструкциям, создайте свою SD-карту, загрузите RaspberryPi с помощью этой вновь созданной SD-карты.

ответил ceremcem 17 PM00000090000001131 2015, 21:19:11
0

Откройте терминал и введите «lsblk -f».
Это должно показать все подключенные устройства хранения.
Затем введите 'dd if = /dev /[НАЗВАНИЕ вашей SD-карты] bs = 1M'.
Это займет некоторое время, поэтому вы можете запустить его в фоновом режиме.
Это точно так же, как вы делаете резервную копию своей SD-карты в Linux.

ответил jay jayjay 28 J0000006Europe/Moscow 2016, 15:14:34
0

Вот полный подход. Вы можете использовать LVM ( L ogical V olume M ) для создания согласованных резервных копий. Помимо других улучшений, таких как простое добавление, расширение и сокращение хранилища или восстановление операционной системы до более раннего статуса из моментального снимка, вы также можете создавать резервные копии. Вы не беспокоитесь о динамических измененных файлах во время резервного копирования, устанавливаете файловые системы только для чтения, исключаете определенные каталоги или что-то еще. С помощью LVM вы просто создаете моментальный снимок, монтируете этот снимок и создаете резервную копию с помощью метода, который вы предпочитаете. Вы можете сделать копию с помощью cp -a, сделать зеркало с помощью rsync, создать архив с tar или сделать изображение с помощью dd. Предполагая, что вы установили резервное устройство на /mnt/usbhd/pi_backup/, вы можете сделать, например:

rpi ~$ sudo lvcreate --snapshot --name rpi_snap --size 1G rpi_vg/root_lv
rpi ~$ sudo mkdir /mnt/snapshot
rpi ~$ sudo mount /dev/mapper/rpi_vg-rpi_snap /mnt/snapshot

# make backups
rpi ~$ sudo cp -a /mnt/snapshot/ /mnt/usbhd/pi_backup/
rpi ~$ sudo rsync -aH --delete /mnt/snapshot/ /mnt/usbhd/pi_backup/
rpi ~$ sudo tar -czf /mnt/usbhd/pi_backup/backup.tar.gz -V "Backup of my Raspberry Pi" -C /mnt/snapshot/ ./
rpi ~$ sudo dd if=/mnt/snapshot/ of=/mnt/usbhd/pi_backup/backup.img bs=4M

rpi ~$ sudo umount /mnt/snapshot/
rpi ~$ sudo lvremove rpi_vg/rpi_snap

Для установки LVM требуется только одно время. Как это сделать, вы можете посмотреть Простые резервные копии и моментальные снимки работающей системы с LVM .

ответил Ingo 16 J000000Monday18 2018, 12:56:37

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132