題:
如何備份Raspberry Pi?
Steve Robillard
2012-06-14 23:27:48 UTC
view on stackexchange narkive permalink

我已經為Raspberry Pi(運行Raspbian)編寫程序了幾個星期,並希望確保我保護自己所做的工作。

如何備份我創建的文件?

我可以簡單地將SD卡插入Windows(XP或7)PC並將其複製到硬盤驅動器或另一個SD卡嗎?

您的電腦運行Linux嗎?
我的PC同時運行Ubuntu和Windows(XP和7),但是我希望大多數人對Windows答案感興趣。我將編輯問題以使其清楚。
從Raspi rsync到您的PC?
對於代碼,您可能還需要考慮使用像git或hg這樣的[分佈式版本控制軟件](http://en.wikipedia.org/wiki/Distributed_revision_control),這樣,您不僅可以獲得代碼的副本在多個地方,而且還擁有有關代碼更改方式的完整歷史記錄。
我已經使用[Ext2IFS](http://www.fs-driver.org/)在Windows上使用了ext2文件系統,而沒有任何麻煩(將Visual Studio關閉了)。我不知道ext3 / ext4支持的狀態(還沒有嘗試過[ext2fsd](http://sourceforge.net/projects/ext2fsd/))。
Xbian具有(命令行和GUI)創建備份的功能。可以通過網絡共享訪問該地址。很容易 :)
@MarkBooth“可能要考慮”輕描淡寫,不是嗎?
@MarkBooth如果我們只是考慮稍後能夠檢索代碼,我不明白為什麼在VCS上需要DVCS。哎呀,因為您使用修訂號而不提交哈希來標識特定狀態,所以這甚至更加容易。學習像Subversion這樣的CVCS並不是很多時間上的投資(我記得……雖然很久很久以前)。是的,當時切換到Git有點令人不安,但我從未回過頭。
-1
您看過Win32DiskImager嗎?它又短又甜。製作一個..img文件,該文件是原始文件的精確克隆。
十八 答案:
user13
2012-06-14 23:37:56 UTC
view on stackexchange narkive permalink

如果要保留所有數據,則可能必須創建磁盤映像。此外,Windows無法識別典型的Linux文件系統,因此,當您插入SD卡時,甚至可能看不到文件。

創建磁盤映像不僅會保留文件,還會保留文件。文件系統結構,當您決定刷新新的SD卡時,只需將其插入即可使用。

Linux

在Linux上,您可以使用標準 dd 工具:

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

其中 / dev / sdx 是您的SD卡。

Mac

在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,這是用於刷新Foundation SD卡的首選工具。只需輸入文件名(要保存的備用映像文件的位置和名稱),選擇設備(SD卡),然後按以下命令即可:

Win32 Disk Imager

,您也可以在Windows上使用 RawWrite dd 或類似工具,過程非常相似。

選項2

如果您不想備份整個系統,而只備份特定文件,建議您通過SFTP連接到Raspberry Pi,然後將文件複製到本地計算機(可以使用 WinScp客戶)。如果啟用了SSH,則SFTP通常不需要在Raspberry Pi端進行任何特殊配置。

另一種選擇是使用rsync將文件複製到遠程系統

您還可以安裝特殊的驅動程序,以便Windows可以讀取 ext 文件系統(從而可以讀取整個SD卡),例如 ext2fsd ,但這可能不值得。


由於圖像的大小與SD卡的大小相同,因此您可能需要對其進行壓縮。只需使用您喜歡的壓縮工具(例如 gzip ,7zip,WinZip,WinRar ...

)即可實現此目的。
總的來說+1,儘管通過`ssh`的`rsync`可能會更容易。此外,對於源代碼-如[Mark Booth已經說過](http://raspberrypi.stackexchange.com/questions/311/how-do-i-backup-my-raspberry-pi#comment539_311)-您絕對應該使用[DVCS](http://en.wikipedia.org/wiki/Distributed_revision_control)
如果我的SD卡損壞了,如何將映像安裝到新的SD卡上?
沒有指向Win32 Disk Imager的鏈接,沒有下載可用。我假設它與http://sourceforge.net/projects/win32diskimager/相同?
@Yamikuronue是的。答案中的頁面具有指向您指定的sourceforge頁面的鏈接。
哦,天哪,我無法區分該圖片中的“讀取”是指“讀取圖像文件”還是“讀取分區並將其寫入圖像文件” ....與“寫入”相同... gui需要進行消毒。類似於“圖片->設備”和“設備->圖片”(或更好的替代方法)
當我使用WinDiskImager時,會得到與存儲分區大小相同的映像-引導分區似乎丟失了。您是否嘗試過將圖像寫入新的SD卡?我目前沒有第二個要測試的東西。
包含dd的壓縮將很有用,這樣圖像的大小將與原始大小不同。 gzip與dd搭配使用效果很好。
@me--我遇到了同樣的問題-儘管SD卡為8 GB,但我僅看到SD卡的RAW分區僅為1.2 GB。我必須為其分配一個驅動器號,並且映像僅為1.2 GB,即不是完整的磁盤。
@Flipper還原圖像只是反轉參數。在Mac OSX上,您可能需要先使用磁盤工具卸載SD磁盤。
Win32DiskImager似乎只能處理Windows識別的分區。我幾乎沒有運氣克隆Noobs / Raspbian SD卡。找到了這個免費軟件程序:http://hddguru.com/software/HDD-Raw-Copy-Tool/。無論分區方案和內容如何,在Windows中對SD卡進行逐字節克隆(我將其與Win7 64位一起使用)都像是一種魅力。
在的輸出部分中,鍵入[backup name] .img
要將映像複製到OSX上的新sdcard,我必須使用OSX磁盤實用程序卸載該卡。
很好的提示,謝謝。從僅使用很小一部分的16GB SD卡創建圖像文件的任何指針?例如,我的Pi已被“擴展”以使用填充大小(16GB),但原始的Raspian圖像將適合4GB的卡。我希望能夠將圖像理想地刻錄到較小的SD卡上。
將圖像寫入SD卡之前,請不要忘記縮小圖像。幾乎沒有SD卡大小相同!參見https://github.com/Drewsif/PiShrink
我還必須在MacOS上使用diskutility卸載sd卡,但仍然無法寫入磁盤(權限被拒絕)。我刪除並重新插入了它,然後就可以卸載它並通過dd對其進行寫入。
我更喜歡ddrescue而不是dd,因為它可以通過在需要時重試扇區來確保成功複製。我在這裡寫了我的首選流程和步驟:https://www.electricrcaircraftguy.com/2018/01/how-to-clone-your-hard-drive.html。
如何將Rpi的所有分區(引導和根目錄)備份到單個映像文件中,以便以後在使用Win32DiskImager或balenaEtcher時,兩個分區都被還原?當前,在使用Win32DiskImager時,需要選擇分區(引導或根目錄),並且不會在單個映像中同時選擇這兩個分區。
如果sdcard具有多個分區怎麼辦?
Jivings
2012-06-14 23:37:30 UTC
view on stackexchange narkive permalink

如果您正在運行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  
我強烈建議使用gzip-今天我已經備份了一些桌面分區,並且在8.9Gb中保存了20Gb分區。
bzip2應該可以更好地壓縮,並且在所有Linux系統上都可用。在較新的Linux系統上,xz的壓縮效果更好,它們的解壓縮器分別為bunzip2和unxz。
@Arne的差異不必太大。任何基本的LZ *方法都能夠消除圖像中所有未使用的空間,包括未使用的空間和未使用的塊長度,這是至關重要的部分。
@tohecz您說得對,但是,如果您的圖像很大,那多餘的部分可能會很好。通過使用bzip2而不是gzip,我的備用圖片從4GB壓縮到了3GB壓縮。
-1
在我的Mac上,直到使用以下命令卸載後,我才獲得“不支持操作”:diskutil unmountDisk / dev / disk1
不要犯錯(像我剛才那樣),將bs = 1M或類似的參數排除在外。缺省的512字節塊大小會“殺死”複製性能。
-1
它也產生了比壓縮後的備份映像更大的文件大小。從那時起,已經安裝了各種軟件,但是絕對不會對文件大小產生顯著的影響。對於bzip2來說,與gzip相比提供33%的改進可能是非常樂觀的。
如果我有8gb SD卡中的圖像並想將其安裝在4GB carD中,則不起作用?解決方法是什麼?新的sd卡啟動時出現kdb錯誤。
@zengr如果實際上有多餘4GB的數據,那麼您無法通過這種方式進行複制。如果沒有,那麼您應該能夠簡單地截斷圖像。
警告如果使用“ dd”複製SD卡,請確保兩張卡的字節和扇區大小均相同,尤其是當它們具有不同的品牌或類型(標準,微型)時。還原到較小的卡會導致分區表超出卡的大小,從而導致許多問題或卡無法使用。
請注意,無論您如何操作,使用dd維護備份都不是一個明智的主意。有關一些更好的信息,請參見http://raspberrypi.stackexchange.com/questions/5427/can-a-raspberry-pi-be-used-to-create-a-backup-of-selfself。
Alex Coplan
2012-12-28 20:40:01 UTC
view on stackexchange narkive permalink

在Mac上,您不想使用 / dev / diskn 。您應該改用 / dev / rdiskn ,其中n是操作系統用來標識SD卡的數字。這樣可以減少大量複製所需的時間。

因此,對於Mac上的最佳備份過程,我建議執行以下操作:

運行 diskutil list ,然後找到與您的Raspberry Pi的SD卡相對應的磁盤:

  $ diskutil list / dev / disk0#:類型名稱大小標識符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#:類型名稱大小標識符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 / disk1 dd 一起使用,則應使用 / dev / rdisk1 ,例如:

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

並恢復它,只需交換 if (輸入文件)和 of (輸出文件)參數:

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

或者,使用 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頁面。

感謝@Alex Coplan,我認為這是最有效的答案,並投了贊成票。
但是,我一直在尋找適用於MacOS的萬無一失的GUI工具(就像Windows用戶一樣),並且沒有dd風險,因此我從“兩個獨木舟”中找到了“ SD Clone”(我是WinClone的用戶,因此可以信任它)。它是非常新的-2016-且價格昂貴(100美元,為期2週的試用期),但似乎是針對RasPi的,所以我現在就嘗試一下,並在新評論中告知您。
返回時,如果出現以下消息,請卸載SD卡:“資源繁忙”
okertanov
2012-08-02 15:00:38 UTC
view on stackexchange narkive permalink

除了這些塊級備份之外,還有兩種常用的方法來處理源:連續對其進行歸檔(1)或使用修訂控制系統(2)。

我們要使用命令行(到Raspberry Pi計算機的任何本地終端或 SSH連接),對嗎?

1。存檔

  cd〜/ projectstar 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-dirmake clean#或使用rm(rm ./*手動進行清理。 o ./*.pyc)git init#在此處創建新的倉庫regit #將源文件添加到暫存indexgit狀態#驗證是否正常OKgit commit -a -m“ Initial import”#修復應用程序的源更改git add remote https://github.com/user/your-raspberry-project.gitgit push -u origin master#將源發送到您的github repogit pull && git push && git status#現在origin / master是您的跟踪分支 
值得一提的是,人們可以在網絡上的其他計算機上設置裸倉庫,然後將其從Raspberry Pi推送到那裡,而不必設置github帳戶,ssh密鑰等然後推送到那裡。
這是真正答案的一個好的開始。如果要維護代碼,則需要在版本控制下對其進行管理。版本控制可跟踪更改,了解更改歷史,管理不同分支(例如穩定版與開發版)並在它們之間合併。但這本身不是備份。但是,只需要備份存儲庫(例如Git的.git文件夾)。檢查Linux / Unix論壇,Wiki,stackexchanges等,以了解在Linux下備份文件夾的方法。注意:我不認為github是備份。而且您不想將所有內容髮佈到github!
John La Rooy
2012-08-02 10:07:16 UTC
view on stackexchange narkive permalink

您可以在具有大量空間的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  
或使用sudo'ssh pi@raspberry sudo dd if = / dev / mmcblk0 | gzip -c> raspberry.img.gz'
並作為無密碼登錄的參考,http://raspberrypi.stackexchange.com/a/1687/22603
我還發現增加塊大小很有用,並且可以使用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查看進度。
為什麼** gzip **比** dd **命令更可取?
zenbike
2012-07-05 14:56:31 UTC
view on stackexchange narkive permalink

如果使用Windows:

  1. 下載Win32 Disk Imager。

  2. 創建Windows您要用來保存圖像的文件路徑。 (我使用C:\ RasPi_Bkp)

  3. 運行Win32 Disk Imager

  4. 瀏覽到備份文件路徑點,然後鍵入文件名。

  5. 單擊“保存”

  6. 請確保文件路徑右側下拉列表中顯示的設備是要備份的那個。

  7. ol>

    Win32 Disk imager in Action

    1. 單擊“讀取”

    2. 等待。

    3. ol>
謝謝-只是工作。 (奇怪的是,當我將SD卡插入主PC時,Windows 7進入了BSOD!幸運的是,它在另一台計算機上正常運行。)
對於像我一樣在Win32 Disk Imager上遇到問題的任何人,請嘗試Rufus。
Robert Nix
2012-08-02 17:48:57 UTC
view on stackexchange narkive permalink

如果您的程序全部在pi用戶ID中,那麼實際上沒有理由像建議的那樣備份整個文件系統。我要做的就是備份單個ID。我從pi的主目錄運行命令:

  tar -czf pi.tgz *  

,該操作會創建文件pi.tgz,其中包含所有文件以及其中包含的目錄(隱藏文件除外)。然後,我將該文件壓縮到另一台linux計算機上,但是您可以通過ftp或通過電子郵件將其發送到某個地方以進行安全保存……將其保存到另一台計算機上的任何內容。

這會為您的備份。

您是否擔心安裝過程中安裝的所有其他軟件包?創建一個腳本,該腳本將在您需要重新創建SD卡並將其保存在pi的主目錄中的某個位置時,再次為您執行這些安裝。 (我有一個〜/ bin目錄用於此類操作)。具有安裝所需的所有命令,以使您回到想要的位置。它記錄您的更改,並允許您快速構建新的SD卡。它將包含以下形式的命令:

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

  apt-get updateapt-get --assume-yes upgrade  

,以便在開始添加自己的系統之前,將系統也升級到當前級別

。由於該文件位於pi.tgz文件中,因此您將在需要時使用它。

請注意,對於Raspbmc衍生產品,apt-get * upgrade *顯然引起問題。它為我做了,顯然[這是一個已知問題](http://forum.stmlabs.com/showthread.php?tid=2637)。
這也可以遠程完成,即:ssh pi@raspberrypi.local“ sudo tar -cvp〜/ *” | xz -9 -e --threads = 4> raspbian.home.tar.xz
Martin O'Hanlon
2012-10-02 17:51:07 UTC
view on stackexchange narkive permalink

我運行Raspbian,並使用dd和cron將SD卡自動備份到外部USB驅動器。

這是一個非常簡單的解決方案。它每週一次在周一的凌晨2點運行一次,並製作SD卡的映像。被寫入備份中間時,它會調用dd,然後在備份完成後再次開始服務。

我已經將腳本和一些說明放在了博客上, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

如果您不能拔下卡,這可能是一個合理的解決方案。但是,對裝有已安裝分區的sd設備進行dd聽起來並不安全。
您可能是對的,但我沒有遇到任何問題。
Forkrul Assail
2012-07-05 15:33:55 UTC
view on stackexchange narkive permalink

對於Debian,您可以使用dd和tar。這將完整復制SD卡,並需要外部(至SD卡)存儲,可能需要安裝USB或網絡驅動器。

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

其中/ dev / sdd是SD卡的位置,而 of 是輸出文件名。

這樣做的局限性是需要在某個地方寫入圖像(它也足夠大以拍攝圖像。想必這也意味著通過USB集線器的大量數據io-會花費一些時間嗎?
是的,但在以下問題中是必需的:“我想要SD卡的完整圖像。”
為什麼要將dd文件製作為.tar.gz文件?直接在dd文件上運行`gzip`或`bzip2`會更好嗎?
** / dev / sdd **是什麼意思?我列出了`/ dev / mmcblk0p1`和`/ dev / mmcblk0p2` ...
framp
2014-12-20 05:25:11 UTC
view on stackexchange narkive permalink

幸運的是,Raspberry Pi可以創建自己的備份,該備份獨立於用於訪問Raspberry的主要操作系統(Windows,Linux,Mac)。 dd,tar和rsync是在Linux上創建備份的不同工具。所有這些類型的備份都可以由運行中的Pi創建,前提是它在創建備份之前停止了所有繁忙的任務,例如mysql,smb,dlna,owncloud,seafile,apache等。還有一個不同的問題,其中方法進行了更詳細的說明,而可能的解決方案在此處進行了解釋

ir11
2014-12-31 03:08:38 UTC
view on stackexchange narkive permalink

如果您的Raspberry Pi已連接到網絡並且需要自動即時備份,則最簡單的方法可能是Bittorent Sync-非常容易安裝,並且可以在Pi和許多其他平台上平穩穩定地運行。

我只想廣告同步和備份是兩件事
tlfong01
2018-04-30 10:05:20 UTC
view on stackexchange narkive permalink

不再有可怕的dd,sync,tar,...,對初學者友好的SD卡複印機

Raspbian的新版本稱為 stretch ,它具有一個非常適合初學者的應用程序,稱為SD卡複印機。您不需要使用dd等Linux工具。它甚至可以將大卡複製到小卡上。

操作方法

從GUI RPi應用開始菜單圖標在左上角,轉到“附件”,然後單擊“ SD卡複印機”。

您需要做的就是在GUI中單擊幾次!

製作備份SD卡後,可以使用Windows磁盤管理器將卡的映像讀取到Windows文件,並將其存儲在任何Windows目錄中。這樣,您只需要一個物理SD卡,即可在Windows PC中存儲許多版本的圖像。

當然,您可以將備份卡用作工作副本,以替換原始卡,該原始卡現在變為您的主卡,並將其鎖定在安全的地方。

berto
2015-11-04 20:39:18 UTC
view on stackexchange narkive permalink

在搜索創建自定義SD卡的圖像時,我發現了此信息。最好的答案是討論SD卡的成像,但是我一直在尋找縮小文件系統以縮小圖像的方法。我最終創建了自己的工具來執行此操作,並在以下位置概述了該過程: https://raspberrypi.stackexchange.com/a/37899/32585

Oliver
2016-09-25 21:30:42 UTC
view on stackexchange narkive permalink

這裡有3個選項:

  1. 在Raspbian的最新版本中,有一個工具可以將您的操作系統和文件轉換成.img文件,然後您可以將其放置在USB或您的PC。

  2. 將SD卡插入Windows PC,然後啟動Win32 Disk Imager(如果尚未安裝,請在此處安裝此處。)

    在(1)中,為圖像文件鍵入文件名&位置。在(2)中,選擇SD卡的驅動器號。然後按3。這與選項1相同。

  3. 將USB隨身碟插入Pi,並複制所有重要文件。

  4. ol>
Mike Redrobe
2017-01-24 17:42:08 UTC
view on stackexchange narkive permalink

此android應用會將SD卡讀入.img文件,並同時將其壓縮: https://play.google.com/store/apps/details?id=com.redrobe。 raspicardimager

Audstanley
2018-06-15 00:15:44 UTC
view on stackexchange narkive permalink

我創建了一個實用程序來備份樹莓派(如果您是Linux)。這也會縮小樹莓派的圖像,因此您可以將.iso放在較小的SD卡上: RaspberryPiShrink

這將運行一個python腳本,它將引導您完成操作過程。只需將microSD卡插入Ubuntu,Linux Mint或Debain計算機,然後按照終端中的說明進行操作即可。

Milliways
2020-08-27 05:35:24 UTC
view on stackexchange narkive permalink

這個問題有很多出色的答案,儘管可能有些過時了。

Rpi3 Stretch SD卡的定期備份是對可用方法的簡要概述,並提供了解決方案的鏈接。 / p>

Craig
2012-10-06 02:41:57 UTC
view on stackexchange narkive permalink

我一直在Windows上使用usbit。這是我發現的唯一工具,可讓您從較大的SD卡更換為較小的SD卡。我所做的就是在選項頁面上打勾以下內容; 忽略大小檢查截斷超大圖像

這使我可以從16 GB交換 OpenELEC和Xbian圖像4級SD卡轉換為8 GB 10級卡。

比調整分區表的大小等要容易得多。

您曾經驗證過文件嗎?我的意思是`find -type f -exec md5sum {} \; > filelist.txt`?
由於存儲在磁盤後半部分的數據已刪除,因此不能保證該方法能正常工作。此外,分區表已損壞。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...