前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用树莓派和 Plex 架设照片和备份服务

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

作者头像
四火
发布2022-07-19 14:53:30
1.2K0
发布2022-07-19 14:53:30
举报
文章被收录于专栏:四火的唠叨四火的唠叨

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

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

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

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

配置树莓派

安装树莓派

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

配置 SSH

打开 SSH:

代码语言:javascript
复制
sudo raspi-config

在 Interfacing Options 选项中打开 SSH。

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

代码语言:javascript
复制
IPQoS cs0 cs0

之后重启一下 ssh 服务:

代码语言:javascript
复制
sudo service ssh restart

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

关闭自动休眠

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

代码语言:javascript
复制
sudo apt-get install vim
sudo vim /etc/lightdm/lightdm.conf

添加如下:

代码语言:javascript
复制
xserver-command=X -s 0 -dpms

重启:

代码语言:javascript
复制
sudo reboot

设置静态 IP

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

安装 Plex

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
sudo apt-get install plexmediaserver

配置额外的存储

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

代码语言:javascript
复制
sudo mkfs.ext4 /dev/sda1

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

代码语言:javascript
复制
 sudo mount -t ext4 /dev/sda1 /media/backup

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

代码语言:javascript
复制
/dev/sda1 /media/backup ext4 defaults,noatime 0 0

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

代码语言:javascript
复制
sudo chown pi:pi -R /media/backup/...

配置 Windows

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

配置同步工具

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

一种方法是使用 Cygwin + rsync:

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

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

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

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

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

代码语言:javascript
复制
sudo du -s * | sort -nr | head

配置 Mac

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

配置同步工具

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

代码语言:javascript
复制
brew install rsync

修改 ~/.zshrc,添加:

代码语言:javascript
复制
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 卡格式损坏

代码语言:txt
复制
[更新于 2020/8/14] 今天忽然发现 ssh 不上去,于是接上显示器,发现启动失败,显示了下面的提示:   
代码语言:javascript
复制
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,在该行(是同一行,不是新一行)的最后增加一句:

代码语言:javascript
复制
init=/bin/sh

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

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

代码语言:javascript
复制
mount -o remount,rw /dev/sda1 /media/backup

失败。执行:

代码语言:javascript
复制
 mount -a

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

代码语言:javascript
复制
exec /sbin/init

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

代码语言:javascript
复制
sudo fsck.ext4 -y /dev/sda1

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置树莓派
    • 安装树莓派
      • 配置 SSH
        • 关闭自动休眠
          • 设置静态 IP
            • 安装 Plex
              • 配置额外的存储
              • 配置 Windows
                • 配置同步工具
                • 配置 Mac
                  • 配置同步工具
                  • 大功告成
                  • 问题遭遇和解决
                    • SD 卡格式损坏
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档