Як створити резервну копію Raspberry Pi?


297

Я вже кілька тижнів пишу програми для мого 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 .
Марк Бут

Відповіді:


294

Якщо ви хочете зберегти всі дані, вам, мабуть, доведеться створити образ диска. Крім того, 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-картці.

Ви можете використовувати диск Disk Imager Win32 , який є кращим інструментом для прошивки SD-карти фонду. Просто введіть ім'я файлу (місце розташування та ім'я файла резервного зображення, яке потрібно зберегти), виберіть пристрій (SD-карта) та натисніть read:

Дисковик Win32

Звичайно, ви також можете використовувати RawWrite , ddдля Windows або подібних інструментів, процес досить схожий.

Варіант 2

Якщо ви не хочете створювати резервну копію всієї вашої системи, а лише конкретні файли, я пропоную вам підключитися до вашого Raspberry Pi через SFTP і скопіювати файли на свій локальний комп'ютер (Ви можете використовувати клієнт WinScp ). Якщо у вас включений SSH, SFTP зазвичай не вимагає спеціальної конфігурації на стороні Raspberry Pi.

Інший варіант - скопіювати файли у віддалену систему за допомогою rsync .

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


Оскільки зображення буде такого ж розміру, як і Ваша SD-карта, можливо, Ви захочете його стиснути. Цього можна досягти просто за допомогою улюбленого інструменту стиснення, такого як gzip7zip, WinZip, WinRar ...


1
+1 взагалі, хоча rsyncчерез ssh, можливо, буде простіше. Крім того, для вихідного коду - як уже заявив Марк Бут - ви повинні абсолютно використовувати DVCS
Тобіас Кіенцлер

1
Якщо моя SD-карта пошкодилася, як би я встановив це зображення на нову SD-карту?
Фліппер

2
Посилання на Win32 Disk Imager створюється без завантаження. Я припускаю, що це те саме, що sourceforge.net/projects/win32diskimager ?
Yamikuronue

2
о мій, я не можу розрізнити, якщо "читати" на цьому зображенні означає "читати файл зображення" або "читати ПІТНІСТЬ І ЗАПИСАТИ В ІНФОРМАЦІЙНИЙ файл" .... те саме для "писати" ... Цьому потрібно санітувати. Щось на кшталт "Зображення -> Пристрій" та "Пристрій -> Зображення" (або краща альтернатива)
Олів'є Дулак

4
Win32DiskImager, здається, зможе мати справу лише з розділами, які розпізнає Windows. Мені мало не пощастило, коли він клонував карти Noobs / Raspbian SD. Знайшла цю безкоштовну програму: 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

3
Я настійно рекомендую використовувати gzip - сьогодні я створив резервну копію деяких розділів на робочому столі, і розділ 20Gb був збережений у 8,9 Гбіт.
Алекс Чемберлен

2
bzip2 повинен стискатися ще краще, і він доступний у всіх системах Linux. У новіших системах Linux xz повинен стискатися ще краще. Декомпресори для них - bunzip2 і unxz відповідно.
Арн

4
@Arne я б не очікував такої різниці! І все-таки це, здається, значно нижче моїх проблем. (Btw, це здорово, коли ви відповідаєте на коментар майже 1 рік, і ви отримуєте відповідь через 2 хвилини :))
yo

5
Не робіть помилки (як я щойно робив), залишаючи bs=1Mабо якийсь подібний параметр поза. За замовчуванням розмір блоку 512 байтів призведе до знищення продуктивності копіювання.
Стівен Лу

1
@Arne Я спробував зараз використовувати bzip2, і, можливо, це було б доречно, якби я робив резервну копію з моєї SD-карти 4 класу, але на цій картці 10 UHS 1 SanDisk 8GB 8GB (що було 12 доларів минулого тижня), це максимум Ivy Bridge Потік процесора та обмеження швидкості читання з карти до 6 Мб / с (dd з 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

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.
bosch

Однак я шукав бездоганний інструмент графічного інтерфейсу для MacOS (як це мають користувачі Windows) і без ризиків dd, і я знайшов "SD Clone" з "двох каное" (якому я довіряю, оскільки я є користувачем WinClone). Це доволі новий -2016- та дорогий (100 $ з 2-тижневою пробною версією), але, здається, орієнтований на RasPi, тож я спробую зараз, і повідомляю вас у новому коментарі.
bosch

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 @ malberry sudo dd if = / dev / mmcblk0 | gzip -c>
raspberry.img.gz

і як посилання на безоплатний логін, 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 в дії

  1. Натисніть "Прочитати"

  2. Зачекайте.


1
Спасибі - просто робота. (Як не дивно, коли я підключаю SD-карту до свого основного ПК, Windows 7 переходить на BSOD! На щастя, її штрафують на іншій машині.)
Джон Егертон,

Для всіх, хто має проблеми з програмою Win32 Disk Imager, як у мене, спробуйте Rufus.
DavidB

9

Якщо всі ваші програми знаходяться в pi userid, насправді немає причин створювати резервну копію всієї файлової системи, як це пропонується. що я роблю, це просто створити резервну копію єдиного ідентифікатора. Я запускаю команду:

tar -czf pi.tgz *

з домашнього каталогу pi, який створює файл pi.tgz, що містить усі файли та каталоги, що містяться там (крім прихованих файлів). Потім я переношу цей файл на інший комп'ютер Linux, але ви можете його ftp або по електронній пошті кудись для безпечного зберігання ... все, що потрапило на інший комп'ютер.

Це створює набагато менший файл для резервного копіювання.

Ви стурбовані усіма додатковими пакунками, які ви встановили по дорозі? Створіть сценарій, який повторно виконає ці встановлення для вас, якщо вам буде потрібно відтворити 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є вихідним файлом.


Це обмеження необхідності десь написати зображення хоч (що також досить велике, щоб прийняти зображення). Імовірно, це означає також великі io через дані через 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 та ін. Перед створенням резервної копії. Існує інше питання , де підхід пояснюється більш детально і можливе рішення пояснюється тут


3

Якщо ваш Raspberry Pi підключений до мережі, і ви хочете робити автоматичні резервні копії під час польоту, мабуть, найпростіший спосіб - це Bittorent Sync - дуже простий в установці та роботі та стабільній роботі на Pi та багатьох інших платформах.


Я просто хотів би оголосити, що Sync та резервне копіювання - це дві різні речі
Pitto

3

Більше не страшно DD, синхронізація, смола, ..., привітний для початківців копір SD Card

У новій версії Raspbian під назвою stretch є дуже сприятливий для початківців додаток під назвою SD Card Copier. Вам не потрібно використовувати такі інструменти Linux, як DD і т.д. Він може навіть копіювати великі карти на маленькі картки.

Як це зробити

Ви починаєте з піктограми меню програми GUI RPi в самому верхньому лівому куті, переходите до Аксесуари та натискаєте Копір SD Card.

Все, що вам потрібно зробити - це кілька клацань всередині графічного інтерфейсу!

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

Звичайно, ви можете просто використовувати резервну карту в якості робочої копії, щоб замінити оригінальну картку, яка тепер стає вашою основною карткою, і зафіксувати її в безпечному місці.


1

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


1

Ось 3 варіанти:

  1. В останній версії Raspbian є інструмент, який перетворює вашу ОС та файли в.

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

    В (1) введіть ім'я файлу та розташування для файлу зображень athe. У (2) виберіть літеру накопичувача SD-карти. Потім натисніть 3. Це робиться так само, як і варіант 1.

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



0

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

Це запустить скрипт python, який проведе вас через процес. Просто підключіть карту microSD до комп'ютера Ubuntu, Linux Mint або Debain та дотримуйтесь інструкцій терміналу.


-2

Я використовую usbit для Windows. Це єдиний інструмент, який я можу знайти, який дозволить вам перейти з більшої SD-карти на меншу. Все, що я зробив, це позначити наступне на сторінці параметрів; Ігноруйте перевірки розмірів і скорочуйте зображення великих розмірів .

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

Це набагато простіше, ніж змінювати розмір таблиць розділів тощо.


2
Ви коли-небудь перевіряли файли? Я маю на увазі з find -type f -exec md5sum {} \; > filelist.txt?
Авіо

2
Це не гарантовано спрацює, оскільки дані, що зберігаються на другій половині диска, втрачаються. Крім того, таблиця розділів пошкоджена.
Алекс Чемберлен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.