旅行时通过树莓派和 iPad Pro 备份图片

旅行中备份图片 - 组件

介绍

我在很长的时间内一直在寻找一个旅行中备份图片的理想方法,把 SD 卡放进你的相机包会让你暴露在太多的风险之中:SD 卡可能丢失或者被盗,数据可能损坏或者在传输过程中失败。比较好的一个选择是复制到另外一个介质中,即使它也是个 SD 卡,并且将它放到一个比较安全的地方去,备份到远端也是一个可行的办法,但是如果去了一个没有网络的地方就不太可行了。

我理想的备份步骤需要下面的工具:

  1. 用一台 iPad pro 而不是一台笔记本。我喜欢轻装旅行,我的大部分旅程都是商务相关的(而不是拍摄休闲的),我痛恨带着个人笔记本的时候还得带着商务本。而我的 iPad 却一直带着,这就是我为什么选择它的原因。
  2. 用尽可能少的硬件设备。
  3. 设备之间的连接需要很安全。我需要在旅馆和机场使用这套设备,所以设备之间的连接需要是封闭而加密的。
  4. 整个过程应该是可靠稳定的,我还用过其他的路由器/组合设备,但是效果不太理想

设备

我配置了一套满足上面条件并且在未来可以扩充的设备,它包含下面这些部件的使用:

  1. 9.7 英寸的 iPad Pro,这是本文写作时最强大、轻薄的 iOS 设备,苹果笔不是必需的,但是作为零件之一,当我在路上可以做一些编辑工作,所有的重活由树莓派做 ,其他设备只能通过 SSH 连接就行。
  2. 安装了 Raspbian 操作系统树莓派 3(LCTT 译注:Raspbian 是基于 Debian 的树莓派操作系统)。
  3. 树莓派的 Mini SD卡 和 盒子/外壳
  4. 128G 的优盘,对于我是够用了,你可以买个更大的。你也可以买个像这样的移动硬盘,但是树莓派没法通过 USB 给移动硬盘提供足够的电量,这意味你需要额外准备一个供电的 USB hub 以及电缆,这就破坏了我们让设备轻薄的初衷。
  5. SD 读卡器
  6. 另外的 SD 卡,我会使用几个 SD 卡,在用满之前就会立即换一个,这样就会让我在一次旅途当中的照片散布在不同的 SD 卡上。

下图展示了这些设备之间如何相互连接。

旅行时照片的备份-流程图

树莓派会作为一个安全的热点。它会创建一个自己的 WPA2 加密的 WIFI 网络,iPad Pro 会连入其中。虽然有很多在线教程教你如何创建 Ad Hoc 网络(计算机到计算机的单对单网络),还更简单一些,但是它的连接是不加密的,而且附件的设备很容易就能连接进去。因此我选择创建 WIFI 网络。

相机的 SD 卡通过 SD 读卡器插到树莓派 USB 端口之一,128G 的大容量优盘一直插在树莓派的另外一个 USB 端口上,我选择了一款闪迪的,因为体积比较小。主要的思路就是通过 Python 脚本把 SD 卡的照片备份到优盘上,备份过程是增量备份,每次脚本运行时都只有变化的(比如新拍摄的照片)部分会添加到备份文件夹中,所以这个过程特别快。如果你有很多的照片或者拍摄了很多 RAW 格式的照片,在就是个巨大的优势。iPad 将用来运行 Python 脚本,而且用来浏览 SD 卡和优盘的文件。

作为额外的好处,如果给树莓派连上一根能上网的网线(比如通过以太网口),那么它就可以共享互联网连接给那些通过 WIFI 连入的设备。

1. 树莓派的设置

这部分需要你卷起袖子亲自动手了,我们要用到 Raspbian 的命令行模式,我会尽可能详细的介绍,方便大家进行下去。

安装和配置 Raspbian

给树莓派连接鼠标、键盘和 LCD 显示器,将 SD 卡插到树莓派上,按照树莓派官网的步骤安装 Raspbian。

安装完后,打开 Raspbian 的终端,执行下面的命令:


  1. sudo apt-get update
  2. sudo apt-get upgrade

这将升级机器上所有的软件到最新,我将树莓派连接到本地网络,而且为了安全更改了默认的密码。

Raspbian 默认开启了 SSH,这样所有的设置可以在一个远程的设备上完成。我也设置了 RSA 验证,但这是可选的功能,可以在这里查看更多信息。

这是一个在 Mac 上在 iTerm 里建立 SSH 连接到树莓派上的截图14。(LCTT 译注:原文图丢失。)

建立 WPA2 加密的 WIFI AP

安装过程基于这篇文章,根据我的情况进行了调整。

1. 安装软件包

我们需要安装下面的软件包:


  1. sudo apt-get install hostapd
  2. sudo apt-get install dnsmasq

hostapd 用来使用内置的 WiFi 来创建 AP,dnsmasp 是一个组合的 DHCP 和 DNS 服务其,很容易设置。

2. 编辑 dhcpcd.conf

通过以太网连接树莓派,树莓派上的网络接口配置由 dhcpd 控制,因此我们首先忽略这一点,将 wlan0 设置为一个静态的 IP。

用 sudo nano /etc/dhcpcd.conf 命令打开 dhcpcd 的配置文件,在最后一行添加上如下内容:


  1. denyinterfaces wlan0

注意:它必须放在如果已经有的其它接口行之上。

3. 编辑接口

现在设置静态 IP,使用 sudo nano /etc/network/interfaces 打开接口配置文件,按照如下信息编辑wlan0部分:


  1. allow-hotplug wlan0
  2. iface wlan0 inet static
  3. address 192.168.1.1
  4. netmask 255.255.255.0
  5. network 192.168.1.0
  6. broadcast 192.168.1.255
  7. # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

同样,然后 wlan1 编辑如下:


  1. #allow-hotplug wlan1
  2. #iface wlan1 inet manual
  3. # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

重要: 使用 sudo service dhcpcd restart 命令重启 dhcpd服务,然后用 sudo ifdown eth0; sudo ifup wlan0 命令来重载wlan0的配置。

4. 配置 Hostapd

接下来,我们需要配置 hostapd,使用 sudo nano /etc/hostapd/hostapd.conf 命令创建一个新的配置文件,内容如下:


  1. interface=wlan0
  2. # Use the nl80211 driver with the brcmfmac driver
  3. driver=nl80211
  4. # This is the name of the network
  5. ssid=YOUR_NETWORK_NAME_HERE
  6. # Use the 2.4GHz band
  7. hw_mode=g
  8. # Use channel 6
  9. channel=6
  10. # Enable 802.11n
  11. ieee80211n=1
  12. # Enable QoS Support
  13. wmm_enabled=1
  14. # Enable 40MHz channels with 20ns guard interval
  15. ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
  16. # Accept all MAC addresses
  17. macaddr_acl=0
  18. # Use WPA authentication
  19. auth_algs=1
  20. # Require clients to know the network name
  21. ignore_broadcast_ssid=0
  22. # Use WPA2
  23. wpa=2
  24. # Use a pre-shared key
  25. wpa_key_mgmt=WPA-PSK
  26. # The network passphrase
  27. wpa_passphrase=YOUR_NEW_WIFI_PASSWORD_HERE
  28. # Use AES, instead of TKIP
  29. rsn_pairwise=CCMP

配置完成后,我们需要告诉dhcpcd 在系统启动运行时到哪里寻找配置文件。 使用 sudo nano /etc/default/hostapd 命令打开默认配置文件,然后找到#DAEMON_CONF="" 替换成DAEMON_CONF="/etc/hostapd/hostapd.conf"

5. 配置 Dnsmasq

自带的 dnsmasp 配置文件包含很多信息方便你使用它,但是我们不需要那么多选项,我建议把它移动到别的地方(而不要删除它),然后自己创建一个新文件:


  1. sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
  2. sudo nano /etc/dnsmasq.conf

粘贴下面的信息到新文件中:


  1. interface=wlan0 # Use interface wlan0
  2. listen-address=192.168.1.1 # Explicitly specify the address to listen on
  3. bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
  4. server=8.8.8.8 # Forward DNS requests to Google DNS
  5. domain-needed # Don't forward short names
  6. bogus-priv # Never forward addresses in the non-routed address spaces.
  7. dhcp-range=192.168.1.50,192.168.1.100,12h # Assign IP addresses in that range with a 12 hour lease time

6. 设置 IPv4 转发

最后我们需要做的事就是配置包转发,用 sudo nano /etc/sysctl.conf 命令打开 sysctl.conf 文件,将包含 net.ipv4.ip_forward=1的那一行之前的#号删除,它将在下次重启时生效。

我们还需要给连接到树莓派的设备通过 WIFI 分享互联网连接,做一个 wlan0和 eth0 之间的 NAT。我们可以参照下面的脚本来实现。


  1. sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  2. sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  3. sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

我命名这个脚本名为 hotspot-boot.sh,然后让它可以执行:


  1. sudo chmod 755 hotspot-boot.sh

该脚本应该在树莓派启动的时候运行。有很多方法实现,下面是我实现的方式:

  1. 把文件放到/home/pi/scripts目录下。
  2. 输入sudo nano /etc/rc.local命令编辑 rc.local 文件,将运行该脚本的命令放到 exit 0之前。(更多信息参照这里)。

编辑后rc.local看起来像这样:


  1. #!/bin/sh -e
  2. #
  3. # rc.local
  4. #
  5. # This script is executed at the end of each multiuser runlevel.
  6. # Make sure that the script will "exit 0" on success or any other
  7. # value on error.
  8. #
  9. # In order to enable or disable this script just change the execution
  10. # bits.
  11. #
  12. # By default this script does nothing.
  13. # Print the IP address
  14. _IP=$(hostname -I) || true
  15. if [ "$_IP" ]; then
  16. printf "My IP address is %s\n" "$_IP"
  17. fi
  18. sudo /home/pi/scripts/hotspot-boot.sh &
  19. exit 0

安装 Samba 服务和 NTFS 兼容驱动

我们要安装下面几个软件来启用 samba 协议,使文件浏览器能够访问树莓派分享的文件夹,ntfs-3g 可以使我们能够访问移动硬盘中 ntfs 文件系统的文件。


  1. sudo apt-get install ntfs-3g
  2. sudo apt-get install samba samba-common-bin

你可以参照这些文档来配置 Samba。

重要提示:参考的文档介绍的是挂载外置硬盘到树莓派上,我们不这样做,是因为在这篇文章写作的时候,树莓派在启动时的 auto-mounts 功能同时将 SD 卡和优盘挂载到/media/pi/上,该文章有一些多余的功能我们也不会采用。

2. Python 脚本

树莓派配置好后,我们需要开发脚本来实际拷贝和备份照片。注意,这个脚本只是提供了特定的自动化备份进程,如果你有基本的 Linux/树莓派命令行操作的技能,你可以 ssh 进树莓派,然后创建需要的文件夹,使用cprsync命令拷贝你自己的照片从一个设备到另外一个设备上。在脚本里我们用rsync命令,这个命令比较可靠而且支持增量备份。

这个过程依赖两个文件,脚本文件自身和backup_photos.conf这个配置文件,后者只有几行包含被挂载的目的驱动器(优盘)和应该挂载到哪个目录,它看起来是这样的:


  1. mount folder=/media/pi/
  2. destination folder=PDRIVE128GB

重要提示:在这个符号=前后不要添加多余的空格,否则脚本会失效。

下面是这个 Python 脚本,我把它命名为backup_photos.py,把它放到了/home/pi/scripts/目录下,我在每行都做了注释可以方便的查看各行的功能。


  1. #!/usr/bin/python3
  2. import os
  3. import sys
  4. from sh import rsync
  5. '''
  6. 脚本将挂载到 /media/pi 的 SD 卡上的内容复制到目的磁盘的同名目录下,目的磁盘的名字在 .conf文件里定义好了。
  7. Argument: label/name of the mounted SD Card.
  8. '''
  9. CONFIG_FILE = '/home/pi/scripts/backup_photos.conf'
  10. ORIGIN_DEV = sys.argv[1]
  11. def create_folder(path):
  12. print ('attempting to create destination folder: ',path)
  13. if not os.path.exists(path):
  14. try:
  15. os.mkdir(path)
  16. print ('Folder created.')
  17. except:
  18. print ('Folder could not be created. Stopping.')
  19. return
  20. else:
  21. print ('Folder already in path. Using that instead.')
  22. confFile = open(CONFIG_FILE,'rU')
  23. #重要:: rU 选项将以统一换行模式打开文件,
  24. #所以 \n 和/或 \r 都被识别为一个新行。
  25. confList = confFile.readlines()
  26. confFile.close()
  27. for line in confList:
  28. line = line.strip('\n')
  29. try:
  30. name , value = line.split('=')
  31. if name == 'mount folder':
  32. mountFolder = value
  33. elif name == 'destination folder':
  34. destDevice = value
  35. except ValueError:
  36. print ('Incorrect line format. Passing.')
  37. pass
  38. destFolder = mountFolder+destDevice+'/'+ORIGIN_DEV
  39. create_folder(destFolder)
  40. print ('Copying files...')
  41. # 取消这行备注将删除不在源处的文件
  42. # rsync("-av", "--delete", mountFolder+ORIGIN_DEV, destFolder)
  43. rsync("-av", mountFolder+ORIGIN_DEV+'/', destFolder)
  44. print ('Done.')

3. iPad Pro 的配置

因为重活都由树莓派干了,文件不通过 iPad Pro 传输,这比我之前尝试的一种方案有巨大的优势。我们在 iPad 上只需要安装上 Prompt2 来通过 SSH 连接树莓派就行了,这样你既可以运行 Python 脚本也可以手动复制文件了。

iPad 用 Prompt2 通过 SSH 连接树莓派

因为我们安装了 Samba,我们可以以更图形化的方式访问连接到树莓派的 USB 设备,你可以看视频,在不同的设备之间复制和移动文件,文件浏览器对于这种用途非常完美。(LCTT 译注:原文视频丢失。)

4. 将它们结合在一起

我们假设SD32GB-03是连接到树莓派 USB 端口之一的 SD 卡的卷标,PDRIVE128GB是那个优盘的卷标,也连接到设备上,并在上面指出的配置文件中定义好。如果我们想要备份 SD 卡上的图片,我们需要这么做:

  1. 给树莓派加电打开,将驱动器自动挂载好。
  2. 连接树莓派配置好的 WIFI 网络。
  3. 用 Prompt2 这个 app 通过 SSH 连接到树莓派。
  4. 连接好后输入下面的命令:python3 backup_photos.py SD32GB-03

首次备份需要一些时间,这依赖于你的 SD 卡使用了多少容量。这意味着你需要一直保持树莓派和 iPad 设备连接不断,你可以在脚本运行之前通过 nohup 命令解决:


  1. nohup python3 backup_photos.py SD32GB-03 &

运行完成的脚本如图所示

原文发布时间为:2016-09-18

本文来自合作伙伴“Linux中国”

时间: 2024-08-03 06:36:39

旅行时通过树莓派和 iPad Pro 备份图片的相关文章

旅行时,如何通过树莓派和iPad Pro备份图片

介绍 我在很长的时间内一直在寻找一个旅行中备份图片的理想方法,把 SD 卡放进你的相机包会让你暴露在太多的风险之中:SD 卡可能丢失或者被盗,数据可能损坏或者在传输过程中失败.比较好的一个选择是复制到另外一个介质中,即使它也是个 SD 卡,并且将它放到一个比较安全的地方去,备份到远端也是一个可行的办法,但是如果去了一个没有网络的地方就不太可行了. 我理想的备份步骤需要下面的工具: 用一台 iPad pro 而不是一台笔记本.我喜欢轻装旅行,我的大部分旅程都是商务相关的(而不是拍摄休闲的),我痛恨

库克开始为推出iPad Pro做铺垫

据说苹果正在开发一款12英寸的iPad,某些人一直将这款产品称作"iPad Pro".预计这款产品将配备12英寸的显示屏,或许还会配备一只触控笔. 这听起来有些像微软的Surface Pro 3,后者也配备了触控笔和12英寸的显示屏. 此举发生在苹果身上不免令人感到有些诧异,因为苹果首席执行官蒂姆库克(Tim Cook)一直在说平板电脑不应该与笔记本电脑竞争.实际上,Surface Pro就是打算那么做. 他甚至说,很多PC厂商在生产设备时将平板电脑和笔记本电脑的元素结合在一起,这种做

六大猜测分析iPad Air Plus/iPad Pro是什么

  除了曝光了Apple Watch的更多细节特性和新Macbook外,我们并未看到多家媒体在发布会前传闻的iPad Pro,这多少让一直期盼看到iPad新品的果粉感到一丝失望.不过,不确切的消息称苹果已将iPad Pro的发布时间推迟到了今年9月份.可是苹果既然推出新12英寸MacBook,那么iPad Pro/.iPad Air真的还会有吗? 苹果iPad Pro的传闻由来已久,按照之前的说法,这款iPad Pro配备2K屏,厚度仅为7mm,电池容量达iPad Air 2的1.5倍, 容量达

iPad Pro无法唤醒怎么办

  刚刚上市不久的苹果iPad Pro最近也有部分网友反映出现了不小的问题,有不少iPad Pro的用户在苹果官方社区.Reddit上反馈,iPad Pro出现无法唤醒.假死的问题,且非常严重.那么iPad Pro遇到无法唤醒的情况我们改怎么办呢?下面小编就给大家带来相关解决办法. 从用户的描述看,问题基本上是,iPad Pro在使用过程中莫名其妙的出现无法唤醒现象,其实这个问题,之前就在iPhone 6S和iPhone 6S Plus上出现过.据悉,目前运行iOS 9.1的iPad Pro都可

消息称苹果明年停售iPad mini 推大尺寸iPad Pro

消息称苹果明年停售iPad mini 推大尺寸iPad Pro凤凰科技讯 北京时间11月4日消息,科技博客AppleInsider援引台湾媒体的报道称,由于销量下降和消费者对大屏设备愈加青睐,苹果计划逐步停产iPadmini,转而支持12英寸机型.供应链消息称,当平板电脑生产线在明年更新后,苹果将停售iPadmini,集中生产12英寸的iPad Pro.iPad Pro将由富士康代工,内部配置和设计均沿袭了iPad Air 2机型.苹果此次对平板电脑战略的调整据称是为了回应智能机市场的变化.越来

iPad Pro SmartKeyboard快捷键的使用教程

首先,Command 按键非常重要,许多快捷键组合都需要使用到它.在 iOS 应用中,点击并按住它就可以看到所有的快捷按键.在不同的应用里,快捷键的使用方式也不同. 需要说明的是,并不是所有的第三方键盘都能实现快捷键,有时候你按下第三方键盘的 Command 按键,你会看到一片空白. 或许最常用的快捷按键就是这个 Command Tab:同时按下这两个按键即可看见全部打开了的 iOS 应用.重复按它可以更换应用. 书写操作: Option 左(右)箭头:将光标向前或向后一个单词移动 Comman

传苹果12.9英寸iPad Pro明年第二季度发布

摘要: 传苹果12.9英寸iPad Pro明年第二季度发布 凯基证券分析师郭明池发布报告称,苹果12.9英寸iPad Pro将无法赶在明年第一季度发布.由于配件生产和产品组装时间紧迫,iPad Pro将推迟到第二季 传苹果12.9英寸iPad Pro明年第二季度发布 凯基证券分析师郭明池发布报告称,苹果12.9英寸iPad Pro将无法赶在明年第一季度发布.由于配件生产和产品组装时间紧迫,iPad Pro将推迟到第二季度.郭明池称,苹果为其大尺寸iPad高分辨率显示屏选择了氧化物LCD技术,具备

iPad Pro可以插扩展卡吗?

  iPad Pro可以插扩展卡吗?iPad Pro不可以插扩展卡. iPad Pro厚度为6.9毫米,比去年iPad Air 2厚了的0.8毫米,重量也比iPad Air 2重一些,感觉略显笨重.但是iPad Pro的尺寸和蓄电能力都有所增加.iPad Pro提供10小时续航能力,显示屏面积也要比其它iPad大出将近10%. iPad Pro最值得推崇的是,它配备了纤维材质的智能键盘,手感非常棒,对于小编这样喜欢键盘打字人来说非常实用. iPad Pro内存多大?iPad Pro机身内存32G

华为Matebook和iPad Pro区别都在哪里

  虽然现在平板电脑和智能手机非常强大,能够完成许多以前不能完成的工作.就数据上来看,PC市场的萎缩人人有目共睹.可是,不可否认的是,就工作而言,我们还是得需要一台台式电脑和笔记本. 另外,华为近年来在智能手机市场顺风顺水,2015年,华为智能手机发货量突破一亿台,这是继苹果.三星之后全球第三个年智能手机销量过亿的厂商, 然而,在笔记本领域,华为属于一片空白,如果华为想要更加完整的布局,那么它就需要推出一款笔记本,于是,Matebook就这么来了. Matebook昨天晚上亮相的时候,第一眼见到