我已经为Raspberry Pi(运行Raspbian)编写程序了几个星期,并希望确保我保护自己所做的工作。

如何备份已创建的文件?

我可以简单地将SD卡插入Windows(XP或7)PC并将其复制到硬盘驱动器或另一个SD卡吗?

评论

我的PC同时运行Ubuntu和Windows(XP和7),但是我希望大多数人对Windows答案感兴趣。我将编辑问题以使其清楚。

从Raspi同步到您的PC?

对于代码,您可能还需要考虑使用git或hg之类的分布式版本控制软件,这样,您不仅可以在多个位置拥有代码副本,而且还具有有关代码更改方式的完整历史记录。
@MarkBooth如果我们只是考虑以后可以检索代码,我不明白为什么在VCS上需要DVCS。哎呀,因为您使用修订号而不提交哈希来标识特定状态,所以这甚至更加容易。学习像Subversion这样的CVCS并不是很多时间上的投资(我记得……虽然很久很久以前)。是的,当时切换到Git有点令人不安,但我从未回头。

在@StevenLu进行此类讨论时,评论不是一个好地方,我们应该将其带到Raspberry Pi Chat。

#1 楼

如果要保留所有数据,则可能必须创建一个磁盘映像。此外,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的设备是哪个磁盘,也可能需要扎根为此,请键入sudo -s并在出现提示时输入密码。刷新SD卡时使用。

您可以使用Win32 Disk Imager,这是用于刷新Foundation SD卡的首选工具。只需输入文件名(要保存的备份映像文件的位置和名称),选择设备(SD卡)并按以下命令即可:



当然,您也可以使用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所述),您绝对应该使用DVCS

– Tobias Kienzler
2012年12月13日在16:54



如果我的SD卡损坏了,该如何将映像安装到新的SD卡上?

–拖鞋
13年2月3日在8:57

没有指向Win32 Disk Imager的链接,没有下载可用。我认为它与sourceforge.net/projects/win32diskimager相同吗?

– Yamikuronue
13年2月14日在1:03

哦,天哪,我无法区分该图片中的“读取”是指“读取图像文件”还是“读取分区并将其写入图像文件” ....与“写入”相同... gui需要进行消毒。类似于“图片->设备”和“设备->图片”(或更好的替代方法)

–奥利维尔·杜拉克(Olivier Dulac)
2013年12月5日18:43



Win32DiskImager似乎只能处理Windows识别的分区。我几乎没有运气来克隆Noobs / Raspbian SD卡。找到了这个免费软件程序:hddguru.com/software/HDD-Raw-Copy-Tool。无论分区方案和内容如何,​​在Windows中对SD卡进行逐字节克隆(我将其与Win7 64位一起使用)都像是一种魅力。

–techie007
2015年2月3日在16:37



#2 楼

如果您正在运行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-今天我已经备份了一些桌面分区,而20Gb分区已保存在8.9Gb中。

–亚历克斯·张伯伦
2012年7月4日15:48

bzip2应该可以更好地压缩,并且在所有Linux系统上都可用。在较新的Linux系统上,xz的压缩效果更好,它们的解压缩器分别为bunzip2和unxz。

– Arne
13年5月29日在12:10

@Arne我不希望有如此大的不同!尽管如此,这似乎仍远远超出我的担忧。 (顺便说一句,当您回复将近1年的评论时,这很酷,并且您会在2分钟内得到回复:))

–吗?
2014年3月24日10:00

不要犯错(像我刚才那样),将bs = 1M或一些类似的参数排除在外。默认的512字节块大小会破坏复制性能。

–陆even
2014年4月13日在3:57

@Arne我现在尝试使用bzip2,如果从我的Class 4 SD卡备份,也许会比较合适,但是在此Class 10 UHS 1 SanDisk 8GB卡(上周为12美元)上,它使Ivy Bridge容量最大化CPU线程,并将卡的读取速度限制为6MB / s(使用Ctrl + T的dd报告为4.2MB / s)。这不是理想的,因为我可以将此gzip与该卡一起使用,并以更快的速度读取它(dd报告为18MB / s)。当然,如果磁盘的大部分是可用空间,那么在这些空的拉伸期间读取将加快速度。但是,我必须查看生成的文件大小有何不同。

–陆even
2014年4月20日在3:40



#3 楼

在Mac上,您不想使用/dev/diskn。您应该改用/dev/rdiskn,其中n是操作系统用来标识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/disk1dd,不如使用/dev/rdisk1,就像这样:文件)和if(输出文件)参数:

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


或者使用of节省大量空间:

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


然后,将映像复制回SD:

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


有关更多信息,请参见此Wiki页面。

评论


我发现这是最有效的答案,并对此表示投票,谢谢@Alex Coplan。

–博世
16-09-25在10:11



但是,我一直在寻找适用于MacOS的万无一失的GUI工具(就像Windows用户一样),并且没有dd风险,因此我从“两个独木舟”中找到了“ SD Clone”(我是WinClone的用户,因此可以信任它)。它是非常新的-2016-且价格昂贵(100美元,为期2周的试用期),但似乎是针对RasPi的,所以我现在就尝试一下,并在新评论中告知您。

–博世
16-09-25在10:25

返回时,如果出现以下消息,请卸载SD卡:“资源繁忙”

–Paul Spiesberger
17年4月4日在5:55

#4 楼

除了这些块级备份之外,还有两种常见的方法来处理源:将其连续存档(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


评论


值得一提的是,人们可以在网络上的其他计算机上设置裸仓库,然后将其从Raspberry Pi推送到那里,而不必设置github帐户,ssh密钥等然后推送到那里。

– Mark Booth
2014年4月13日在12:06

这是真正答案的一个好的开始。如果要维护代码,则需要在版本控制下对其进行管理。版本控制可跟踪更改,了解更改历史,管理不同分支(例如稳定版与开发版)并在它们之间合并。但这本身不是备份。但是,只需要备份存储库(例如Git的.git文件夹)。查看Linux / Unix论坛,Wiki,stackexchanges等,以了解在Linux下备份文件夹的方法。注意:我不认为github是备份。而且您不想将所有内容发布到github!

–惠更斯
15年2月28日在20:27

#5 楼

您可以在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'

–cupakob
2012年11月25日14:35



并且作为无密码登录的参考,raspberrypi.stackexchange.com / a / 1687/22603

–保罗
15年1月3日,10:47

我还发现增加块大小很有用,并且可以使用pv检查进度。 ssh root @ raspberry dd if = / dev / mmcblk0 bs = 1M | pv | gzip -c> img.gz

–保罗
15年1月3日,14:08

如果您不想卸载SD卡,那么这是一个很好的答案,它也适用于macOS。这是我使用的命令行:ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4>sd.img.xz。不需要以此方式生成SSH密钥。可以按Ctrl-T查看进度。

–了解OpenGL ES
16 Dec 9'在19:36



为什么gzip比dd命令更可取?

– IgorGanapolsky
17年1月25日在14:19

#6 楼

如果使用Windows,请下载Win32 Disk Imager。
创建要用于保存映像的文件路径。 (我使用C:\ RasPi_Bkp)
运行Win32 Disk Imager
浏览到备份文件路径位置,并键入文件名。




单击“读取”
等待。


评论


谢谢-只是工作。 (奇怪的是,当我将SD卡插入主PC时,Windows 7进入了BSOD!幸运的是,它在另一台计算机上正常运行。

–乔恩·埃格顿(Jon Egerton)
2012年7月5日上午10:01

对于像我一样在Win32 Disk Imager上遇到问题的任何人,请尝试Rufus。

–DaveTheMinion
16 Dec 26'0:26

#7 楼

如果您的程序全部在pi用户ID中,则实际上没有理由像建议的那样备份整个文件系统。我要做的就是备份单个ID。我从pi的主目录运行命令:

tar -czf pi.tgz *


,该目录创建pi.tgz文件,其中包含其中包含的所有文件和目录(不包括隐藏文件)。然后,我将该文件压缩到另一台linux计算机上,但是您可以通过ftp或通过电子邮件将其发送到某处以进行安全保存……将其保存到另一台计算机上的任何内容。供您备份。

您担心在安装过程中安装的所有其他软件包吗?创建一个脚本,该脚本将在您需要重新创建SD卡并将其保存在pi的主目录中的某个位置时,再次为您执行这些安装。 (我有一个〜/ bin目录用于此类操作)。具有安装所需的所有命令,以使您回到想要的位置。它记录您的更改,并允许您快速构建新的SD卡。它会包含以下形式的命令:开始添加软件包之前,系统也已升级到当前级别。

由于这将在pi.tgz文件中,因此在需要时将具有它。

评论


请注意,对于Raspbmc衍生产品,apt-get升级显然会引起问题。它对我有用,显然这是一个已知问题。

–克里斯蒂安·迪亚科内斯库(Cristian Diaconescu)
13年5月6日在16:11



这也可以远程完成,即:ssh pi@raspberrypi.local“ sudo tar -cvp〜/ *” | xz -9 -e --threads = 4> raspbian.home.tar.xz

–了解OpenGL ES
16 Dec 9'在20:06

#8 楼

我运行Raspbian,并使用dd和cron将SD卡自动备份到外部USB驱动器。

这是一个非常简单的解决方案。它每周一在凌晨2点运行一次,并制作SD卡的映像。在备份中间写入存储卡时,它会调用dd,然后在备份完成后再次开始服务。 ://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

评论


如果您不能拔下卡,这可能是一个合理的解决方案。但是,放置SD?装有分区的设备听起来不太安全。

–吗?
2014年3月24日在9:58

您可能是对的,但我没有遇到任何问题。

–马丁·奥汉隆(Martin O'Hanlon)
2014年3月24日13:57

#9 楼

对于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-会花费一段时间吗?

–乔恩·埃格顿(Jon Egerton)
2012年7月5日在10:38

是的,但在以下问题中是必需的:“我想要SD卡的完整图像。”

– Forkrul Assail
2012年7月5日在10:39

为什么要制作dd文件的.tar.gz文件?直接在dd文件上运行gzip或bzip2会更好吗?

–安德斯
2012年7月25日在21:11

/ dev / sdd是什么意思?我列出了/ dev / mmcblk0p1和/ dev / mmcblk0p2 ...

– IgorGanapolsky
17年1月25日在14:20

#10 楼

幸运的是,Raspberry Pi可以创建自己的备份,该备份独立于用于访问Raspberry的主要操作系统(Windows,Linux,Mac)。
dd,tar和rsync是在Linux上创建备份的不同工具。所有这些类型的备份都可以由运行中的Pi创建,前提是它在创建备份之前停止了所有繁忙的任务,例如mysql,smb,dlna,owncloud,seafile,apache等。还有一个不同的问题,在这里将详细解释该方法,并在此处解释一种可能的解决方案

#11 楼

如果您的Raspberry Pi已连接到网络,并且需要自动即时备份,则最简单的方法可能是Bittorent Sync-非常容易安装,并且可以在Pi和许多其他平台上平稳稳定地运行。

评论


我只想广告同步和备份是两件事

– Pitto
16年7月7日在15:43

#12 楼

不再有可怕的dd,sync,tar,...,对初学者友好的SD卡复印机

Raspbian的新版本称为Stretch,它具有一个非常初学者友好的应用程序,称为SD Card Copier。您不需要使用dd等Linux工具。它甚至可以将大卡复制为小卡。

操作方法

从GUI开始在左上角的RPi应用程序菜单图标,转到“附件”,然后单击“ SD卡复印机”。

制作备份SD卡后,可以使用Windows磁盘管理器将卡的映像读取到Windows文件,并将其存储在任何Windows目录中。这样,您只需要一个物理SD卡,即可在Windows PC中存储许多版本的图像。成为您的主卡,并将其锁定在安全的地方。

#13 楼

在搜索创建自定义SD卡的图像时,我发现了此信息。最好的答案是讨论SD卡的成像,但是我一直在寻找缩小文件系统以缩小图像的方法。我最终创建了自己的工具来执行此操作,并在以下位置概述了该过程:https://raspberrypi.stackexchange.com/a/37899/32585

#14 楼

这是3个选项:


在最新版本的Raspbian中,有一个工具可以将操作系统和文件转换为.img文件,然后可以将其放置到USB或USB电脑

将SD卡插入Windows PC,然后启动Win32 Disk Imager(如果尚未安装,请在此处安装。)



在(1)中,输入图像文件的文件名和位置。在(2)中,选择SD卡的驱动器号。然后按3。这与选项1相同。

将USB闪存盘插入Pi,然后复制所有重要文件。


#15 楼

此android应用会将SD卡读入.img文件,并同时将其压缩:
https://play.google.com/store/apps/details?id=com.redrobe.raspicardimager

#16 楼

我创建了一个实用程序来备份树莓派(如果您是Linux)。这也会缩小树莓派的图像,因此您可以将.iso放在较小的SD卡上: 。只需将microSD卡插入Ubuntu,Linux Mint或Debain计算机,然后按照终端中的说明进行操作即可。

#17 楼

这个问题有许多出色的答案,尽管可能有些过时了。

#18 楼

我一直在Windows上使用usbit。这是我发现的唯一工具,可让您从较大的SD卡交换到较小的SD卡。我所做的只是在选项页面上打勾。忽略大小检查并截断超大图像。

这使我可以将OpenELEC和Xbian图像从16 GB的4类SD卡交换为8 GB的10类卡。这比调整分区表的大小等要容易得多。

评论


您是否曾经验证过文件?我的意思是用find -type f -exec md5sum {} \; > filelist.txt?

– Avio
2012年10月5日在22:16

由于磁盘后半部分上存储的数据已删除,因此不能保证此功能有效。此外,分区表已损坏。

–亚历克斯·张伯伦
2012年10月6日,9:22