Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

使用树莓派和 Plex 架设照片和备份服务

Posted on 06/02/202010/08/2024 by 四火

我用手机拍了很多照片,平时都保存在一台 Windows 台式机上,这台机器硬盘空间大,主要干两个事情,一个是我打游戏,一个就是存放多媒体数据(主要是照片,也有很多文档)。有时候我需要它提供照片服务,以方便家人使用各种媒体终端(手机、电视盒子等)阅览,有时候则需要往上面拷贝数据以作备份只用,于是我使用 Plex 折腾了一下,但是由于台式机噪音等等的关系,不适合长期开机,因此当时那个方案还是残缺的。

现在打算彻底解决这个问题。大致总结一下,以下是我的主要的几个需求:

  • 照片服务要能够长期保持在线,私用可以方便地查看照片。开机不能有明显的噪音和功耗问题。
  • 我的照片经常是在 Windows 下进行处理的,因此需要很方便地同步到照片服务器。
  • 我办公和文档处理都是在 Mac 上进行的,因此需要很方便地同步文档到服务器。
  • 私用,不愿意上传公有云。

最近树莓派比较火,因此我花了几十刀买了个第四代,想用它来满足上面的需求。

  • 1 配置树莓派
    • 1.1 安装树莓派
    • 1.2 配置 SSH
    • 1.3 关闭自动休眠
    • 1.4 设置静态 IP
    • 1.5 安装 Plex
    • 1.6 配置额外的存储
  • 2 配置 Windows
    • 2.1 配置同步工具
  • 3 配置 Mac
    • 3.1 配置同步工具
  • 4 大功告成
  • 5 问题遭遇和解决
    • 5.1 SD 卡格式损坏

配置树莓派

安装树莓派

这一步没有什么特别的,从 4 代开始,风扇显得更为重要,但是接针脚的时候,选择 1-6,而不是 4-6,因为 1 号针脚是 3V3,电压低一些,散热能力是弱一些,但风扇噪音也小一些,适合长期开机。考虑到我们的实际需求,这个够用了。

配置 SSH

打开 SSH:

sudo raspi-config

在 Interfacing Options 选项中打开 SSH。

但这样还不够,需要修改 /etc/ssh/sshd_config 添加:

IPQoS cs0 cs0

之后重启一下 ssh 服务:

sudo service ssh restart

还可以按照我在这篇文章中介绍的办法配置密钥访问,不过是局域网内私用,必要性不那么强。

关闭自动休眠

既然用作服务器,肯定不能自动休眠。

sudo apt-get install vim
sudo vim /etc/lightdm/lightdm.conf

添加如下:

xserver-command=X -s 0 -dpms

重启:

sudo reboot

设置静态 IP

静态 IP 可以在树莓派上面配置,不过一旦配错了就没法 ssh 进去改正了;也可以在路由器上面配置,我是在路由器上配置的,操作起来比较方便。我用的路由器是 NETGEAR 的,静态 IP 的配置在 ADVANCED > Setup > LAN Setup 下面。

安装 Plex

这一篇 PiMyLifeUp 上的教程很不错,我基本是照着做的。准备工作:

sudo apt-get install apt-transport-https
curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
sudo apt-get update

安装 Plex:

sudo apt-get install plexmediaserver

配置额外的存储

自带的 Mini-SD 卡容量太小了,我又买了一张大的,配合 USB 读卡器插上。我一开始使用了卡的默认格式 exFAT,结果同步工具支持得不好,因此没办法,我把它格式化成 Ext4:

sudo mkfs.ext4 /dev/sda1

在/media 下面建立了 backup 目录,之后就可以 mount 了:

 sudo mount -t ext4 /dev/sda1 /media/backup

虽然搞定了,但是机器一重启,又要重新 mount。因此需要配置为自动 mount,修改/etc/fstab:

/dev/sda1 /media/backup ext4 defaults,noatime 0 0

其中的 noatime 是为了不更新最近访问时间,提高性能。在建立文件夹以后,所属用户和群组全部设置成和同步用 ssh 登录的用户一致,避免一些可能的权限的问题:

sudo chown pi:pi -R /media/backup/...

配置 Windows

配置 Windows 的主要目的是方便地同步照片到树莓派服务器。

配置同步工具

Windows 机是我的一部分媒体文件的数据源,因此需要经常从 Windows 机同步数据到树莓派服务器。

一种方法是使用 Cygwin + rsync:

安装 Cygwin,这是一个可以在 Windows 下使用常见 Linux 命令的工具。基本上,默认选项即可,但是 rsync 一定要安装:

安装完成以后,Windows 下的磁盘全部被列在/cygdrive 下面。

但是我研究到一半的时候,发现了一个更好用的工具——Acrosync:

第一次可以压缩并使用 scp 来传输文件,因为这样效率会更高,但以后就要通过上面的工具来同步了。

值得一提的是,如果空间不够,可以使用 du 这样的命令来查看罪魁祸首,不过我使用的参数因为 Linux 版本的关系,和我以往熟悉的比起来有点不同:

sudo du -s * | sort -nr | head
[Updated on 3/5/2023] Acrosync 是收费的,而且也不便宜,FreeFileSync 是一个我能找得到的最好的开源同步工具,不过,对于远程的 SSH 传输,我是把它先变成(挂载成)一个本地可访问的磁盘再来配置同步的。

如果是使用用户名密码就能 ssh 登录的情况,Windows 自己就能搞定,资源管理器地址栏输入:

\\sshfs\username@host

能访问以后,右键可以把指定路径映射成为一个本地磁盘:

多说一句,其实 Windows 把远程资源挂载为本地磁盘的功能挺强大的,除了 ssh,其它常见的,比如 Samba (SMB) 资源也可以。

如果 ssh 需要使用 public key 文件的,替代方案可以考虑 win-sshfs + Dokan 的组合,但是这个方案需要使用如上链接的特定版本才能配套工作:

它可以把 ssh 资源挂载为一个本地磁盘,之后就可以使用 FreeFileSync 了。

相较而言,这个方案同步的速度要比 Acrosync 慢一些。

[Updated 1/13/2024] 在处理类似 ssh 同步问题的时候,发现上面的工具 win-sshfs + Dokan 组合也不好用了,遂找到了一个很方便的替代品 SFTP Drive 2022:

配置 Mac

配置 Mac 的主要目的是方便地同步文档到树莓派服务器。

配置同步工具

Mac 下面同步工具用 rsync 就可以,不需要什么额外的工具。不过,Mac 自带的 rsync 对中文的显示有点问题,因此需要使用 brew 安装一下 rsync。

brew install rsync

修改 ~/.zshrc,添加:

alias sync-to-raspberry="rsync -ar -e 'ssh -o PubkeyAuthentication=no' --exclude '.DS_Store' --delete --force --progress ~/Desktop/doc pi@raspberry:~/Documents/doc/"

注意第一个 doc 路径后面的斜杠 “/” 不能省略,否则会把服务端的整个 xxx 文件拷贝到 Mac 的 doc 目录里面。另外,里面的主机名 raspberry,是因为我修改了/etc/hosts 文件。

大功告成

在树莓派机器上安装 Plex 完毕后,在 Windows 下运行 Acrosync,或者是在 Mac 下执行 sync-to-raspberry 就可以完成同步了,而在浏览器中访问 http://192.168.0.28:32400/web 就能看到 Plex 界面了。

之后,在各种终端上安装 Plex 应用,就可以很舒服地浏览照片了。

问题遭遇和解决

SD 卡格式损坏

[更新于 2020/8/14] 今天忽然发现 ssh 不上去,于是接上显示器,发现启动失败,显示了下面的提示:
You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to try again to boot into default mode.

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press enter to continue.

不过,如果按照提示点击回车,上面的提示会继续来一遍。所以,“continue” 是没用的。

研究了一下,把系统 sd 卡取了出来,然后装到我的 mac 上,编辑里面的 cmdline.txt,在该行(是同一行,不是新一行)的最后增加一句:

init=/bin/sh

这样,在重启以后,就可以自动以 root 身份进入命令行了。

接着检查/etc/fstab,显示的几个挂载的存储,发现那张新 sd 卡没有正常挂载(目录进不去)。尝试重新挂载:

mount -o remount,rw /dev/sda1 /media/backup

失败。执行:

 mount -a

发现一些错误,于是干脆编辑 fstab,注释掉该行。接着执行:

exec /sbin/init

终于可以进入系统了。执行:

sudo fsck.ext4 -y /dev/sda1

修复了错误,再重新恢复挂载的 fstab 配置,并还原/boot/cmdline.txt。搞定。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. 寻找 Mac 平台上 Windows Live Writer 的替代品
  2. 折腾的快乐
  3. 笔记:线程的同步和互斥
  4. java.util.concurrent 并发包诸类概览
  5. 常见分布式应用系统设计图解(八):文件同步分享系统

3 thoughts on “使用树莓派和 Plex 架设照片和备份服务”

  1. zzz says:
    07/24/2020 at 7:35 PM

    emmmm

    Reply
  2. vv says:
    06/17/2020 at 12:24 AM

    大佬你好,请问这是什么主题,可以下载吗?

    Reply
  3. Anonymous says:
    06/05/2020 at 11:19 PM

    我是直接上了一台群晖,感觉很不错

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme