我已经为Raspberry Pi(运行Raspbian)编写程序了几个星期,并希望确保我保护已完成的工作。
如何备份已创建的文件?
我可以简单地将SD卡插入Windows(XP或7)PC并将其复制到硬盘驱动器或另一个SD卡吗?
我已经为Raspberry Pi(运行Raspbian)编写程序了几个星期,并希望确保我保护已完成的工作。
如何备份已创建的文件?
我可以简单地将SD卡插入Windows(XP或7)PC并将其复制到硬盘驱动器或另一个SD卡吗?
Answers:
如果要保留所有数据,则可能必须创建一个磁盘映像。此外,Windows无法识别典型的Linux文件系统,因此,当您插入SD卡时,您甚至可能看不到您的文件。
创建磁盘映像不仅可以保留文件,还可以保留文件系统结构,并且当您决定刷新新的SD卡时,只需将其插入即可使用。
在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
并在出现提示时输入密码。
选项1
在Windows上,可以使用与刷新SD卡时相同的过程。
您可以使用Win32 Disk Imager,这是用于刷新Foundation SD卡的首选工具。只需输入文件名(要保存的备份映像文件的位置和名称),选择设备(SD卡),然后按读取:
当然,您也可以使用RawWrite,dd
对于Windows或类似工具,过程非常相似。
选项2
如果您不想备份整个系统,而只备份特定文件,建议您通过SFTP连接到Raspberry Pi,然后将文件复制到本地计算机(可以使用WinScp客户端)。如果启用了SSH,则SFTP通常不需要在Raspberry Pi端进行任何特殊配置。
另一个选择是使用rsync将文件复制到远程系统。
您还可以安装特殊的驱动程序,以便Windows可以读取ext
文件系统(从而可以读取整个SD卡),例如,ext2fsd
但这可能不值得。
由于图像的大小将与SD卡相同,因此您可能需要对其进行压缩。只需使用您喜欢的压缩工具,如gzip
7zip,WinZip,WinRar ...
如果您正在运行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
:)
)
bs=1M
或类似的参数。默认的块大小为512字节会破坏复制性能。
除了这些块级备份之外,还有两种常见的方法来处理源:将其连续存档(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
在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/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
有关更多信息,请参见此Wiki页面。
您可以从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
ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
如果您使用的是Windows:
下载Win32 Disk Imager。
创建您要用于保存图像的文件路径。(我使用C:\ RasPi_Bkp)
运行Win32 Disk Imager
浏览到备份文件路径位置,然后输入文件名。
点击保存
确保文件路径右侧下拉列表中显示的设备是您要备份的设备。
点击“阅读”
等待。
如果您的程序全部在pi用户ID中,则实际上没有理由像建议的那样备份整个文件系统。我要做的就是备份单个ID。我运行命令:
tar -czf pi.tgz *
从pi的主目录创建文件pi.tgz,其中包含其中的所有文件和目录(不包括隐藏文件)。然后,我将此文件scp到另一台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文件中,因此您将在需要时使用它。
我运行Raspbian,并使用dd和cron将SD卡自动备份到外部USB驱动器。
这是一个非常简单的解决方案。它每周一次在星期一早上2点运行一次,并制作SD卡的映像。
我编写了一个脚本,该脚本关闭了lighttpd和cron之类的服务,以最大程度地减少在备份过程中将SD卡写入SD卡的风险,然后该脚本将调用dd,然后在备份完成后再次启动服务。
我已经将脚本和一些说明放到了我的博客http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html上
dd
的sd?
设备听起来不太安全。
对于Debian,您可以使用dd和tar。这将完整复制SD卡,并需要外部(至SD卡)存储,可能是已安装的USB或网络驱动器。
dd if=/dev/sdd of=yourbackupfilenamehere.dd
tar zcvf yourbackupfilenamehere.dd.tar.gz
/ dev / sdd是SD卡的位置,of
是输出文件名。
.tar.gz
dd文件的文件?直接运行gzip
或bzip2
直接在dd文件上运行会更好吗?
/dev/mmcblk0p1
和/dev/mmcblk0p2
上市...
Raspbian的新版本称为Stretch,具有一个非常适合初学者的应用程序,称为SD Card Copier。您不需要使用dd等Linux工具。它甚至可以将大卡复制到小卡上。
首先从左上角的GUI RPi应用程序菜单图标开始,转到“附件”,然后单击“ SD卡复印机”。
您只需要在GUI中单击几下即可!
制作备份SD卡后,可以使用Windows磁盘管理器将卡的映像读取到Windows文件,并将其存储在任何Windows目录中。这样,您只需要一个物理SD卡,即可在Windows PC中存储许多版本的图像。
当然,您可以仅将备份卡用作工作副本,以替换原来的卡(现在已成为您的主卡)并将其锁定在安全的地方。
在搜索创建自定义SD卡的图像时,我发现了此信息。最好的答案是讨论SD卡的成像,但是我一直在寻找缩小文件系统以缩小图像的方法。我最终创建了自己的工具来执行此操作,并在以下位置概述了该过程:https : //raspberrypi.stackexchange.com/a/37899/32585
这个Android应用程式会将SD卡读入.img档案,并同时将其压缩:https: //play.google.com/store/apps/details?id = com.redrobe.raspicardimager
我创建了一个实用程序来备份树莓派(如果您是Linux)。这也会缩小树莓派的图像,因此您可以将.iso放在较小的SD卡上: RaspberryPiShrink
这将运行一个python脚本,它将引导您完成该过程。只需将microSD卡插入Ubuntu,Linux Mint或Debain计算机,然后按照终端中的说明进行操作即可。
我一直在Windows上使用usbit。这是我发现的唯一工具,可让您从较大的SD卡交换到较小的SD卡。我所做的就是在选项页面上打勾。忽略大小检查并截断超大图像。
这使我可以将OpenELEC和Xbian映像从16 GB的4级SD卡交换为8 GB的10级卡。
这比调整分区表的大小等要容易得多。
find -type f -exec md5sum {} \; > filelist.txt
?