Как сделать резервную копию моего Raspberry Pi?

296

Я пишу программы для своего Raspberry Pi (под управлением Raspbian) уже несколько недель и хочу убедиться, что я защищаю свою работу.

Как я могу сделать резервную копию файлов, которые я создал?

Могу ли я просто подключить SD-карту к ПК с Windows (XP или 7) и скопировать ее на жесткий диск или другую SD-карту?

Стив Робиллард
источник
6
У меня есть ПК под управлением Ubuntu и Windows (XP & 7), но я ожидаю, что большинство людей заинтересуется ответом Windows. Я отредактирую вопрос, чтобы прояснить это.
Стив Робиллард
7
Rsync из Raspi на ваш компьютер?
Алекс Л
41
Что касается кода, вы также можете рассмотреть возможность использования распределенного программного обеспечения для управления версиями, например gitили hg, таким образом, вы не только имеете копии своего кода в нескольких местах, но и имеете полную историю того, как этот код изменился.
Марк Бут
4
@MarkBooth Я не понимаю, зачем DVCS по сравнению с VCS, если мы просто рассматриваем возможность получения кода позже. Черт возьми, это даже проще, так как вы используете номера ревизий, а не фиксируете хэши для определения определенного состояния. Изучение CVCS, такого как Subversion, не требует больших затрат времени (насколько я помню ... хотя это было очень и очень давно). Да, переход на Git в то время немного нервировал, но я никогда не оглядывался назад.
Стивен Лу
1
Комментарии не являются подходящим местом для такого рода дискуссий @StevenLu, мы должны отнести это к Raspberry Pi Chat .
Марк Бут

Ответы:

293

Если вы хотите сохранить все данные, вам, вероятно, придется создать образ диска. Более того, Windows не может распознать типичные файловые системы Linux, поэтому вы, вероятно, даже не сможете увидеть свои файлы, когда подключите SD-карту.

Создание образа диска сохранит не только файлы, но и структуру файловой системы, и когда вы решите прошить новую SD-карту, вы сможете просто подключить ее, и она будет работать.

Linux

В Linux вы можете использовать стандартный ddинструмент:

dd if=/dev/sdx of=/path/to/image bs=1M

Где /dev/sdxтвоя SD-карта?

макинтош

На Mac вы также можете использовать стандартный ddинструмент с немного другим синтаксисом:

dd if=/dev/rdiskx of=/path/to/image bs=1m

Где /dev/rdiskxтвоя SD-карта?

(использование rdisk предпочтительнее, поскольку его необработанное устройство - быстрее)

Чтобы узнать, какой диск ваше устройство вводит diskutil listв командной строке, вам также может потребоваться быть пользователем root; чтобы сделать этот тип sudo -sи введите свой пароль, когда будет предложено.

Windows

Опция 1

В Windows вы можете использовать обратный процесс, который вы использовали при прошивке SD-карты.

Вы можете использовать Win32 Disk Imager , который является предпочтительным инструментом для прошивки SD-карты Foundation. Просто введите имя файла (местоположение и имя файла резервной копии, который будет сохранен), выберите устройство (SD-карту) и нажмите read:

Win32 Disk Imager

Конечно, вы также можете использовать RawWrite , ddдля Windows или аналогичных инструментов, процесс довольно похож.

Вариант 2

Если вы не хотите выполнять резервное копирование всей системы, а только определенных файлов, я предлагаю вам подключиться к Raspberry Pi через SFTP и скопировать файлы на локальный компьютер (вы можете использовать клиент WinScp ). Если у вас включен SSH, SFTP обычно не требует специальной настройки на стороне Raspberry Pi.

Другой вариант - скопировать файлы в удаленную систему с помощью rsync .

Вы также можете установить специальные драйверы, чтобы ваша Windows могла читать extфайловые системы (и, таким образом, могла читать всю SD-карту), например, ext2fsdно это, вероятно, не стоит усилий.


Поскольку изображение будет того же размера, что и ваша SD-карта, вы можете сжать его. Это может быть достигнуто просто с помощью вашего любимого инструмента сжатия, таких как gzip7zip, WinZip, WinRar ...

пользователей13
источник
1
+1 в общем, хотя rsyncчерез sshнаверное было бы проще. Кроме того, для исходного кода - как уже сказал Марк Бут - вы должны обязательно использовать DVCS
Тобиас Кинцлер
1
Если моя SD-карта повреждена, как мне установить этот образ на новую SD-карту?
Флиппер
2
Ваша ссылка на Win32 Disk Imager не загружается. Я предполагаю, что это так же, как sourceforge.net/projects/win32diskimager ?
Yamikuronue
2
о боже, я не могу различить, означает ли «прочитать» на этом изображении «прочитать файл изображения» или «прочитать раздел и записать его в файл изображения» .... то же самое для «записи» ... Это необходимо для графического интерфейса быть продезинфицированным. Что-то вроде «Изображение -> Устройство» и «Устройство -> Изображение» (или лучшая альтернатива)
Оливье Дюлак
4
Кажется, что Win32DiskImager может работать только с разделами, которые распознает Windows. Мне почти не повезло с клонированием SD-карт Noobs / Raspbian. Нашел эту бесплатную программу: hddguru.com/software/HDD-Raw-Copy-Tool . Это работает как очарование делать побайтный клон SD-карты в Windows (я использовал это с 64-битной Win7), независимо от схемы разбиения и содержимого.
techie007
156

Если вы работаете в Linux, вы можете использовать ddкоманду для создания полной резервной копии образа:

dd if=/dev/sdx of=/path/to/image

или для сжатия:

dd if=/dev/sdx | gzip > /path/to/image.gz

Где sdxтвоя SD-карта?

Чтобы восстановить резервную копию, вы меняете команды:

dd if=/path/to/image of=/dev/sdx

или при сжатии:

gzip -dc /path/to/image.gz | dd of=/dev/sdx
Jivings
источник
3
Я настоятельно рекомендую использовать gzip - сегодня я зарезервировал некоторые разделы рабочего стола, а раздел размером 20 ГБ был сохранен в 8,9 ГБ.
Алекс Чемберлен
2
bzip2 должен сжимать еще лучше и доступен на всех системах Linux. В новых системах Linux xz должен сжиматься еще лучше. Распаковщики для них - bunzip2 и unxz соответственно.
Арне
4
@ Арне, я бы не ожидал такой разницы! Тем не менее, это, кажется, намного ниже моих опасений. (Кстати, это круто, когда вы отвечаете на комментарий почти 1 года, и вы получаете ответ через 2 минуты :))
yo '24
5
Не делайте ошибку (как я только что сделал), пропуская bs=1Mили другой подобный параметр. Размер блока по умолчанию 512 байт снижает производительность копирования.
Стивен Лу
1
@Arne Я попытался использовать bzip2 сейчас, и, возможно, было бы целесообразно, если бы я делал резервное копирование со своей карты SD класса 4, но на этой карте Class 10 UHS 1 SanDisk 8 ГБ (которая на прошлой неделе стоила 12 долларов) она максимально использует Ivy Bridge Поток процессора и ограничение скорости чтения с карты до 6 МБ / с (дд с Ctrl + T сообщает о 4,2 МБ / с). Это не идеально, потому что я могу использовать gzip с этой картой и читать ее гораздо быстрее (dd сообщает 18MB / s). Конечно, если на большей части диска есть свободное место, чтение во время этих пустых отрезков ускорится. Но я должен увидеть, в чем разница в конечном размере файла.
Стивен Лу
31

Помимо этих резервных копий на уровне блоков, существует два распространенных подхода к работе с источниками: непрерывное архивирование (1) или использование системы контроля версий (2).

Мы собираемся использовать командную строку (любой локальный терминал или SSH- соединение с машиной Raspberry Pi), верно?

1. Архив

cd ~/projects
tar czvf your-raspberry-project-top-level-dir-v1.0.tgz \
         ./your-raspberry-project-top-level-dir 
scp your-raspberry-project-top-level-dir-v1.0.tgz \
         user@backup-host:/home/user/backups/

2. RCS (например, Git)

cd ~/projects/your-raspberry-project-top-level-dir
make clean                          # Or clean it manually using rm (rm ./*.o ./*.pyc)
git init                            # Create new repo here
git add .                           # Add source files to the staging index
git status                          # Verify if it's OK
git commit -a -m "Initial import"   # Fix application's source changes
git add remote https://github.com/user/your-raspberry-project.git
git push -u origin master           # Sends the sources to your github repo
git pull && git push && git status  # Now origin/master is your tracking branch
okertanov
источник
2
Возможно, стоит также отметить, что люди могут устанавливать «голые» репозитории на других компьютерах в своей сети и переносить туда свои Raspberry Pi, вместо того, чтобы настраивать учетную запись github, ключи ssh и т. Д. И переходить туда.
Марк Бут
2
Это хорошее начало для реального ответа. Код должен управляться под контролем версий, если кто-то хочет поддерживать его. Контроль версий позволяет отслеживать изменения, понимать историю изменений, управлять различными ветвями (например, стабильный против dev) и объединяться между ними. Но это не резервная копия как таковая. Однако нужно просто сделать резервную копию репозитория (например, папка .git для Git). Проверьте Linux / Unix форумы, вики, стек-обмены и т. Д. Для способов резервного копирования папок в Linux. Примечание: я не считаю github резервной копией. И вы не хотите публиковать все на github!
Гюйгенс
29

На Mac вы не хотите использовать /dev/diskn. /dev/rdisknВместо этого следует использовать , где n - это номер, который ОС использует для идентификации вашей SD-карты. Это уменьшает время, необходимое для копирования, на огромное количество.

Поэтому для оптимального процесса резервного копирования на Mac я бы рекомендовал сделать следующее:

Запустите diskutil listи найдите диск, соответствующий SD-карте вашего Raspberry Pi:

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            499.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk1
   1:             Windows_FAT_32                         58.7 MB    disk1s1
   2:                      Linux                         7.9 GB     disk1s2

Ясно, что /dev/disk1моя 8 ГБ SD-карта, имя раздела Linux также немного подсказка.

Однако вместо использования /dev/disk1с dd, вы должны использовать /dev/rdisk1, например, так:

sudo dd if=/dev/rdisk1 of=/path/to/backup.img bs=1m

И чтобы восстановить его, просто поменяйте местами параметры if(входной файл) и of(выходной файл):

sudo dd if=/path/to/backup.img of=/dev/rdisk1 bs=1m

Или, gzipчтобы сэкономить значительное количество места:

sudo dd if=/dev/rdisk1 bs=1m | gzip > /path/to/backup.gz

И, чтобы скопировать изображение обратно на SD:

gzip -dc /path/to/backup.gz | sudo dd of=/dev/rdisk1 bs=1m

Для получения дополнительной информации, смотрите эту вики- страницу.

Алекс Коплан
источник
1
Я считаю, что это самый эффективный ответ и проголосовал за него, спасибо @Alex Coplan.
Бош
Тем не менее, я искал надежный графический инструмент для MacOS (как пользователи Windows) и без риска dd, и я нашел «SD Clone» от Two Canoes (которому я доверяю, так как я пользователь WinClone). Он довольно новый и довольно дорогой (100 $ с двухнедельной пробной версией), но, похоже, ориентирован на RasPi, поэтому я попробую прямо сейчас и сообщу в новом комментарии.
Бош
3
При копировании обратно отключите SD-карту, если вы получите следующее сообщение: «Ресурс занят»
Spipau
26

Вы можете запустить эту команду с вашего компьютера Linux с большим количеством места:

ssh root@raspberrypi gzip -c /dev/mmcblk0 > img.gz

В качестве предварительного условия вам необходимо сгенерировать ключи .ssh и скопировать их id_XXX.pubв /root/.ssh/authorized_keys.

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

Скорее всего, сжатие на ПК выполняется быстрее:

ssh root@raspberrypi dd if=/dev/mmcblk0 | gzip -c > img.gz
Джон Ла Рой
источник
1
или с помощью sudo 'ssh pi @ raspberry sudo dd if = / dev / mmcblk0 | gzip -c> raspberry.img.gz '
cupakob
и в качестве справочного материала для входа без пароля, raspberrypi.stackexchange.com/a/1687/22603
Паоло
2
Я также нашел полезным добавить размер блока и, как он был доступен, использовать pv для проверки прогресса. ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
Паоло
Это отличный ответ, если вы не хотите размонтировать SD-карту, а также работает для macOS. Вот командная строка, которую я использую: ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4> sd.img.xz. Не требует генерации ключей SSH, делающих это таким образом. Ctrl-T можно нажать, чтобы увидеть прогресс.
Изучите OpenGL ES
Почему gzip предпочтительнее команды dd ?
Игорь Ганапольский
18

Если вы используете Windows:

  1. Загрузите Win32 Disk Imager.

  2. Создайте путь к файлу, который вы хотите использовать для сохранения вашего изображения. (Я использую C: \ RasPi_Bkp)

  3. Запустите Win32 Disk Imager

  4. Найдите путь к файлу резервной копии и введите имя файла.

  5. Нажмите сохранить

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

Win32 Disk Imager в действии

  1. Нажмите «Читать»

  2. Подождите.

zenbike
источник
1
Спасибо - только работа. (Как ни странно, когда я подключаю свою SD-карту к своему основному ПК, Windows 7 переходит на BSOD! К счастью, на другой машине это нормально.)
Джон Эгертон,
Если у вас проблемы с Win32 Disk Imager, попробуйте Rufus.
DavidB
9

Если все ваши программы находятся в имени пользователя pi, на самом деле нет причин делать резервные копии всей файловой системы, как это предлагается. что я делаю, это просто резервное копирование одного идентификатора. Я запускаю команду:

tar -czf pi.tgz *

из домашнего каталога pi, который создает файл pi.tgz, содержащий все содержащиеся в нем файлы и каталоги (кроме скрытых файлов). Затем я копирую этот файл на другой компьютер с Linux, но вы можете загрузить его или отправить его по электронной почте куда-нибудь для хранения ... всего, что попало на другой компьютер.

Это создает гораздо меньший файл для вашей резервной копии.

Обеспокоены всеми дополнительными пакетами, которые вы установили по пути? Создайте сценарий, который снова выполнит эти установки для вас, если вам нужно будет воссоздать вашу SD-карту, и сохранить ее где-нибудь в домашнем каталоге pi. (У меня есть каталог ~ / bin для таких вещей). У вас есть все команды, необходимые для установки, чтобы вернуть вас в положение, в котором вы хотите оказаться. Он документирует ваши изменения и позволяет быстро создать новую SD-карту. Он будет содержать команды в виде:

apt-get --assume-yes install apache2 mysqld mysql php5 php-pear

Начни с

apt-get update
apt-get --assume-yes upgrade

так что ваша система также будет переведена на текущий уровень, прежде чем вы начнете добавлять свои пакеты.

Так как это будет в вашем файле pi.tgz, вы получите его, когда вам это нужно.

Роберт Никс
источник
Обратите внимание, что при выделении Raspbmc обновление apt-get, по-видимому, вызывает проблемы. Это для меня, и, видимо , это известная проблема .
Кристи Диаконеску
Это также можно сделать удаленно, например: ssh pi@raspberrypi.local "sudo tar -cvp ~ / *" | xz -9 -e --threads = 4> raspbian.home.tar.xz
OpenGL ES
8

Я запускаю Raspbian и использую dd и cron для автоматического резервного копирования моей SD-карты на внешний USB-накопитель.

Это действительно простое решение. Он запускается один раз в неделю в 2 часа ночи в понедельник утром и создает образ SD-карты.

Я написал сценарий, который закрывает службы, такие как lighttpd и cron, чтобы минимизировать риск записи SD-карты в середине резервной копии, затем он вызывает dd, прежде чем снова запускать службы после завершения резервного копирования.

Я разместил скрипт и некоторые инструкции в своем блоге, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html.

Мартин О'Хэнлон
источник
1
Это может быть разумным решением, если вы не можете отключить карту. Однако ddиспользование sd?устройства со смонтированными перегородками не выглядит достаточно безопасным.
'
Вы, вероятно, правы, но у меня не было проблем.
Мартин О'Хэнлон
4

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

dd if=/dev/sdd of=yourbackupfilenamehere.dd
tar zcvf yourbackupfilenamehere.dd.tar.gz

Если / dev / sdd - это местоположение вашей SD-карты и ofимя выходного файла.

Forkrul Assail
источник
Это ограничено тем, что куда-то нужно записать изображение (оно также достаточно велико, чтобы брать изображения). Предположительно, это также означает, что большие объемы данных через usb-концентратор - могут занять некоторое время?
Джон Эгертон,
Правда, но это как бы требуется в вопросе: «Я хочу полное изображение SD-карты».
Forkrul Assail
1
Почему вы делаете .tar.gzфайл из dd-файла? Разве не было бы лучше просто запустить gzipили непосредственно bzip2на dd-файле?
Андерс
Что означает / dev / sdd ? Я /dev/mmcblk0p1и /dev/mmcblk0p2перечислил ...
Игорь Ганапольский
4

К счастью, Raspberry Pi может создать собственную резервную копию, которая не зависит от основной ОС, используемой для доступа к Raspberry (Windows, Linux, Mac). dd, tar и rsync - это разные инструменты для создания резервных копий в Linux. Все эти типы резервных копий могут быть созданы работающим Pi при условии, что он останавливает все занятые задачи как mysql, smb, dlna, owncloud, seafile, apache и др. Перед созданием резервной копии. Существует другой вопрос, где подход объясняется более подробно, а возможное решение объясняется здесь

framp
источник
3

Если ваш Raspberry Pi подключен к сети и вам требуется автоматическое резервное копирование «на лету», возможно, самый простой способ - Bittorent Sync - его очень легко установить, он работает плавно и стабильно на Pi и многих других платформах.

IR11
источник
Я просто хотел бы
объявить,
3

Нет больше страшных dd, sync, tar, ..., SD-карта для начинающих

В новой версии Raspbian под названием stretch появилось приложение для начинающих, которое называется SD Card Copier. Вам не нужно использовать инструменты Linux, такие как dd и т. Д. Он может даже копировать большие карты в маленькие карты.

Как это сделать

Вы начинаете со значка меню приложения GUI RPi в самом верхнем левом углу, идете в Аксессуары, затем нажимаете SD Card Copier.

Все, что вам нужно сделать, это пару кликов внутри графического интерфейса!

После создания резервной SD-карты вы можете использовать диспетчер дисков Windows, чтобы прочитать образ карты в файл Windows и сохранить его в любом каталоге Windows. Таким образом, вам нужна только физическая SD-карта и хранить много версий изображений на ПК с Windows.

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

tlfong01
источник
1

При поиске, чтобы создать образ моей настроенной SD-карты, я нашел этот пост. Лучший ответ здесь обсуждает создание образа SD-карты, но то, что я искал, требовало уменьшения файловой системы, чтобы сделать изображение как можно меньшим. Я закончил тем, что создал свой собственный инструмент для этого и обрисовал процесс по адресу: https://raspberrypi.stackexchange.com/a/37899/32585

Берто
источник
1

Вот 3 варианта:

  1. В последней версии Raspbian есть инструмент, который преобразует вашу ОС и файлы в файл .img, который вы затем можете поместить на USB или ваш ПК.

  2. Подключите SD-карту к ПК с Windows и запустите Win32 Disk Imager (установите здесь, если вы этого еще не сделали).

    В (1) введите имя файла и местоположение для файла изображения. В (2) выберите букву диска вашей SD-карты. Затем нажмите 3. Это то же самое, что и вариант 1.

  3. Подключите USB-накопитель к вашему Pi и скопируйте все важные файлы.

Оливер
источник
0

Я создал утилиту для резервного копирования вашего Raspberry Pi, если вы Linux. Это также уменьшит изображение вашего малинового пи, поэтому вы можете поместить .iso на меньшую SD-карту: RaspberryPiShrink

Это запустит скрипт Python, который проведет вас через весь процесс. Просто подключите карту microSD к компьютеру с Ubuntu, Linux Mint или Debain и следуйте инструкциям на терминале.

Audstanley
источник
-2

Я использовал usbit для Windows. Это единственный инструмент, который я могу найти, который позволит вам переключаться с большей SD-карты на меньшую. Все, что я сделал, это отметил следующее на странице настроек; Игнорируйте проверки размера и обрезайте изображения большего размера .

Это позволило мне поменять изображения OpenELEC и Xbian с SD-карты класса 4 16 ГБ на карту класса 10 8 ГБ.

Это НАМНОГО проще, чем изменение размеров таблиц разделов и т. Д.

Craig
источник
2
Вы когда-нибудь проверяли файлы? Я имею в виду с find -type f -exec md5sum {} \; > filelist.txt?
Avio
2
Это не гарантируется, поскольку данные, хранящиеся на второй половине диска, удаляются. Кроме того, таблица разделов повреждена.
Алекс Чемберлен