Raspberry Piをバックアップするにはどうすればよいですか?


297

Raspberry Pi(Raspbianを実行中)のプログラムを数週間にわたって書いていますが、これまで行った作業を確実に保護したいと考えています。

作成したファイルをバックアップするにはどうすればよいですか?

SDカードをWindows(XPまたは7)PCに接続し、ハードドライブまたは別のSDカードにコピーするだけでいいですか?


6
UbuntuとWindows(XP&7)の両方を実行しているPCがありますが、ほとんどの人がWindowsの答えに興味があると思います。それを明確にするために質問を編集します。
スティーブロビラード

7
RaspiからPCへのrsync?
アレックスL

41
コードについては、またはのような分散バージョン管理ソフトウェアの使用を検討することもできます。この方法では、コードのコピーを複数の場所に置くだけでなく、そのコードがどのように変更されたかの完全な履歴も取得できます。githg
マークブース

4
@MarkBooth後でコードを取得できるようにすることを検討している場合、VCSでDVCSが必要な理由はわかりません。確かに、特定の状態を識別するためにハッシュをコミットせずにリビジョン番号を使用するため、さらに簡単です。SubversionのようなCVCSを学ぶことは、時間の投資ではありません(覚えているように...それは非常に長い時間前でしたが)。はい、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/sdxSDカードはどこにありますか。

マック

Macではdd、わずかに異なる構文で標準ツールを使用することもできます。

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

/dev/rdiskxSDカードはどこにありますか。

(rdiskを使用することは、そのrawデバイスとして望ましい-より高速です)

diskutil listコマンドプロンプトでデバイスがどのディスクであるかを調べるには、rootになる必要があります。このタイプを実行しsudo -s、プロンプトが表示されたらパスワードを入力します。

オプション1

Windowsでは、SDカードをフラッシュするときに使用した逆のプロセスを使用できます。

FoundationのSDカードをフラッシュするための推奨ツールであるWin32 Disk Imagerを使用できます。ファイル名(保存するバックアップイメージファイルの場所と名前)を入力し、デバイス(SDカード)を選択してreadを押します。

Win32ディスクイメージャー

もちろん、あなたも使用することができますRawWriteをddWindows用または同様のツール、プロセスは非常に似ています。

オプション2

システム全体ではなく特定のファイルのみをバックアップする場合は、SFTP経由でRaspberry Piに接続し、ローカルコンピューターにファイルをコピーすることをお勧めします(WinScpクライアントを使用できます)。SSHを有効にしている場合、SFTPは通常、Raspberry Pi側で特別な構成を必要としません。

別のオプションは、rsyncを使用してファイルをリモートシステムコピーすることです

Windowsがextファイルシステムを読み取ることができるように(したがってSDカード全体を読み取ることができるように)特別なドライバーをインストールすることもできますext2fsdが、おそらく努力する価値はありません。


画像はSDカードと同じサイズになるため、圧縮することをお勧めします。これはgzip、7zip、WinZip、WinRar などのお気に入りの圧縮ツールを使用するだけで実現できます。


1
一般的には+1ですが、おそらくrsyncviaのssh方が簡単でしょう。また、ソースコードのために-としてマークブースは、すでに述べた -あなたは絶対に使うべきDVCS
トビアスKienzler

1
SDカードが破損した場合、このイメージを新しいSDカードにインストールするにはどうすればよいですか?
フリッパー

2
Win32 Disk Imagerへのリンクには、ダウンロード可能なものはありません。sourceforge.net/projects/win32diskimagerと同じだと思いますか?
ヤミクロヌエ

2
ああ、私はその写真の「読む」が「画像ファイルを読む」ことを意味するか、「パーティションを読んで画像ファイルに書き込む」ことを意味するか区別できません。消毒する。「イメージ->デバイス」や「デバイス->イメージ」のようなもの(またはより適切な代替品)
オリビエデュラック

4
Win32DiskImagerは、Windowsが認識するパーティションのみを処理できるようです。Noobs / Raspbian SDカードのクローンを作成することはほとんどできなかった。このフリーウェアプログラム:hddguru.com/software/HDD-Raw-Copy-Toolを見つけました。パーティションスキームとコンテンツに関係なく、WindowsでSDカードのバイト単位のクローンを作成するのは魅力的です(Win7 64ビットで使用しました)。
techie007

156

Linuxを実行している場合は、ddコマンドを使用してイメージの完全バックアップを作成できます。

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

または圧縮の場合:

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

sdxSDカードはどこにありますか。

バックアップを復元するには、コマンドを逆にします。

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

または圧縮された場合:

gzip -dc /path/to/image.gz | dd of=/dev/sdx

3
gzipを使用することを強くお勧めします-今日いくつかのデスクトップパーティションをバックアップしましたが、20 GBのパーティションは8.9 GBで保存されました。
アレックスチェンバレン

2
bzip2はさらに圧縮する必要があり、すべてのLinuxシステムで使用できます。新しいLinuxシステムでは、xzはさらに圧縮する必要があります。これらの圧縮解除プログラムは、それぞれbunzip2とunxzです。
アルネ

4
@アーネ私はそのような違いを期待していません!それでも、それは私の懸念よりはるかに低いようです。(ちなみに、コメントに1歳近く返信すると、2分で応答が返ってくるのはすばらしいことです:)
yo

5
bs=1Mまたは私がやったように)間違いを犯さないでください。512バイトのデフォルトのブロックサイズはなり殺すコピーのパフォーマンスを。
スティーブンルー

1
@Arne bzip2を使用してみましたが、クラス4 SDカードからバックアップするのが適切かもしれませんが、このクラス10 UHS 1 SanDisk 8GBカード(先週12ドルでした)では、Ivy Bridgeが最大になりますCPUスレッドおよびカードからの読み取り速度を6MB / sに制限します(Ctrl + Tを使用したddは4.2MB / sを報告します)。このカードでgzipを使用し、はるかに速いペースで読み取ることができるため、これは理想的ではありません(ddは18MB / sと報告しています)。確かに、ディスクの大部分が空き領域であれば、それらの空のストレッチ中の読み取りは高速化されます。ただし、結果のファイルサイズの違いを確認する必要があります。
スティーブンルー14

31

これらのブロックレベルのバックアップに加えて、ソースに対処するための2つの一般的なアプローチがあります:継続的にアーカイブする(1)、またはリビジョン管理システムを使用する(2)。

コマンドライン(ローカル端末またはRaspberry PiマシンへのSSH接続)を使用しますか?

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
また、githubアカウント、sshキーなどを設定してそこにプッシュするのではなく、ネットワーク上の他のマシンで裸のリポジトリを設定し、Raspberry Piからそこにプッシュできることも注目に値します。
マークブース

2
それは本当の答えの良いスタートです。コードを維持できるようにするには、コードをバージョン管理下で管理する必要があります。バージョン管理により、変更の追跡、変更履歴の理解、さまざまなブランチの管理(例:安定版と開発版)、およびそれらの間のマージが可能になります。しかし、それ自体はバックアップではありません。ただし、リポジトリ(Gitの.gitフォルダーなど)をバックアップするだけです。Linuxでフォルダーをバックアップする方法については、Linux / Unixフォーラム、Wiki、stackexchangesなどを確認してください。注:githubをバックアップとは見なしません。そして、すべてをgithubに公開したくありません!
ホイヘンス

29

Macでは使用したくありません/dev/diskn/dev/rdiskn代わりに使用する必要があります。nは、OSがSDカードを識別するために使用する番号です。これにより、コピーに必要な時間が大幅に短縮されます。

したがって、Macで最適なバックアッププロセスを行うには、次のことをお勧めします。

を実行しdiskutil list、Raspberry PiのSDカードに対応するディスクを見つけます。

$ 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私の8GB SDカードは明らかに、Linuxパーティション名も少し手がかりです。

ただし、/dev/disk1with を使用する代わりに、次のように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

詳細については、このWikiページを参照しください。


1
@Alex Coplanに感謝します。これが最も効率的な答えだと思い、投票しました。
ボッシュ

しかし、私は(Windowsユーザーが持っているように)MacOS用の誰にも負けないGUIツールを探していましたが、ddリスクはありませんでした。それはかなり新しい-2016-と高価(2週間の試用で100ドル)ですが、RasPi向けに調整されているようですので、今すぐ試して、新しいコメントでお知らせします。
ボッシュ

3
「忙しい[リソース」:バック対処すると次のメッセージが表示得れば、あなたのSDカードをアンマウント
Spipau

26

たくさんのスペースがあるLinux PCからこのコマンドを実行できます。

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

前提条件として、.sshキーを生成し、それid_XXX.pubをにコピーする必要があります/root/.ssh/authorized_keys

ライブバックアップであるため、ファイルシステムに問題がある可能性がありますが、Raspberry Piが実際にビジーでない場合は、通常は問題ありません。

次のように、PCで圧縮を行う方がおそらく高速です。

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
Paolo

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を学ぶ

gzipddコマンドよりも望ましいのはなぜですか?
イゴールガナポルスキー

18

Windowsを使用している場合:

  1. Win32 Disk Imagerをダウンロードします。

  2. 画像の保存に使用するファイルパスを作成します。(私はC:\ RasPi_Bkpを使用します)

  3. Win32 Disk Imagerを実行する

  4. バックアップファイルのパススポットを参照し、ファイル名を入力します。

  5. 保存をクリック

  6. ファイルパスの右側にあるドロップダウンに表示されるデバイスが、バックアップするデバイスであることを確認してください。

動作中のWin32ディスクイメージャー

  1. 「読む」をクリックします

  2. 待つ。


1
ありがとう-ただの仕事。(!私は私のメインPCに私のSDカードを差し込む際に奇妙なことに、Windows 7は、別のマシン上幸いにもその罰金BSODに行く。)
ジョン・エガートン

私のようにWin32 Disk Imagerで問題がある人は、Rufusを試してください。
DavidB 16

9

プログラムがすべてpiユーザーIDに含まれている場合、提案されているように、ファイルシステム全体をバックアップする理由は本当にありません。私がしていることは、ただ一つのIDをバックアップすることです。コマンドを実行します:

tar -czf pi.tgz *

piのホームディレクトリから。pi.tgzファイルが作成され、そこに含まれるすべてのファイルとディレクトリが含まれます(隠しファイルを除く)。次に、このファイルを別のlinuxコンピューターにscpしますが、安全に保管するために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時に週に1回実行され、SDカードのイメージを作成します。

バックアップの途中でSDカードが書き込まれるリスクを最小限に抑えるために、lighttpdやcronなどのサービスをシャットダウンするスクリプトを作成し、ddを呼び出してから、バックアップが終了したときにサービスを再開します。

私のブログにスクリプトといくつかの指示を載せました。http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html


1
カードを取り外すことができない場合、これは合理的な解決策かもしれません。ただし、パーティションがマウントされddsd?デバイスを使用するのは安全ではありません。
yo

おそらく正しいでしょうが、問題はありませんでした。
マーティンオハンロン14年

4

Debianの場合、ddとtarを使用できます。これにより、SDカードの完全なコピーが作成され、外部(SDカードへ)ストレージ、おそらくマウントされたUSBまたはネットワークドライブが必要になります。

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

/ dev / sddはSDカードの場所でありof、出力ファイル名です。


。これは、それはまた、画像(複数可取るのに十分な大きさである(ただしにおそらくそれはまた、大規模なデータは、USBハブを介してioを意味します)画像を書き込むためにどこかに必要とする制限があります- ?しばらく時間がかかるだろう
ジョン・エガートン

確かに、「SDカードの完全な画像が欲しい」という質問では、それが必要です。
Forkrul襲撃

1
なぜ.tar.gzddファイルのファイルを作成するのですか?単に実行するgzipbzip2、またはddファイルを直接実行する方が良いと思いませんか?
アンデルス

何をしないの/ dev / SDDはどういう意味ですか?私が持っている/dev/mmcblk0p1/dev/mmcblk0p2リスト
...-IgorGanapolsky

4

幸いなことに、Raspberry Piは、Raspberryへのアクセスに使用されるプライマリOS(Windows、Linux、Mac)から独立した自身のバックアップを作成できます。dd、tar、およびrsyncは、Linux上でバックアップを作成するための異なるツールです。バックアップを作成する前にmysql、smb、dlna、owncloud、seafile、apacheなどのすべてのビジーなタスクを停止している場合、これらすべてのタイプのバックアップは実行中のPiによって作成できます。アプローチがより詳細に説明され、可能な解決策がここで説明されいる別の質問があります


3

Raspberry Piがネットワークに接続され、自動オンザフライバックアップが必要な場合、おそらく最も簡単な方法はBittorent Syncです。非常に簡単にインストールでき、Piや他の多くのプラットフォームでスムーズに安定して実行できます。


私はちょうど同期とバックアップは2つの異なるものであることを
宣伝し

3

これ以上怖いdd、sync、tar、...、初心者に優しいSD Card Copier

stretchと呼ばれるRaspbianの新しいバージョンには、SD Card Copierという非常に初心者に優しいアプリがあります。ddなどのLinuxツールを使用する必要はありません。大きなカードを小さなカードにコピーすることもできます。

どうやるか

左上隅にあるGUI RPiアプリメニューアイコンから開始し、[アクセサリ]に移動して、[SDカードコピー機]をクリックします。

必要なことは、GUI内で数回クリックするだけです!

バックアップSDカードを作成したら、Windowsディスクマネージャーを使用してカードのイメージをWindowsファイルに読み取り、任意のWindowsディレクトリに保存できます。これにより、物理SDカードのみが必要になり、Windows PCに多くのバージョンの画像を保存できます。

もちろん、バックアップカードを作業用コピーとして使用するだけで、元のカードをマスターカードに置き換え、安全な場所にロックすることができます。


1

カスタマイズしたSDカードの画像を作成するために検索しているときに、この投稿を見つけました。ここでの最良の答えは、SDカードのイメージングについて説明していますが、私が探していたのは、可能な限り画像を小さくするためにファイルシステムを縮小することでした。私はこれを行うための独自のツールを作成し、プロセスを概説しました:https : //raspberrypi.stackexchange.com/a/37899/32585


1

3つのオプションがあります。

  1. Raspbianの最新バージョンには、OSとファイルを.imgファイルに変換して、USBまたはPCに配置できるツールがあります。

  2. SDカードをWindows PCに接続し、Win32 Disk Imagerを起動します(まだインストールしてない場合は、ここにインストールします)。

    (1)で、画像ファイルのファイル名と場所を入力します。(2)で、SDカードのドライブ文字を選択します。次に3を押します。これはオプション1と同じです。

  3. PiにUSBスティックを差し込み、重要なファイルをコピーします。



0

Linuxの場合、ラズベリーパイをバックアップするユーティリティを作成しました。これにより、ラズベリーパイの画像も縮小されるため、.isoを小さなSDカードに配置できます: RaspberryPiShrink

これにより、プロセスを説明するpythonスクリプトが実行されます。microSDカードをUbuntu、Linux Mint、またはDebainコンピューターに接続し、ターミナルの指示に従ってください。


-2

私はWindows用のusbitを使用しています。これは、大きなSDカードから小さなSDカードに交換できる唯一のツールです。私がしたことは、オプションページで次の項目にチェックを入れるだけでした。サイズチェック無視し、サイズの大きい画像切り捨てます

これにより、OpenELECおよびXbianイメージを16 GBクラス4 SDカードから8 GBクラス10カードに交換できました。

パーティションテーブルなどのサイズ変更よりもはるかに簡単です。


2
ファイルを検証したことがありますか?という意味find -type f -exec md5sum {} \; > filelist.txtですか?
Avio

2
ディスクの後半に保存されているデータはドロップされるため、これが機能することは保証されません。さらに、パーティションテーブルが破損しています。
アレックスチェンバレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.