抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Syncthing+Smaba的简易树莓派 NAS 方案

将近凌晨,决定写下来,因为相比较之前想象的美好了很多,不复杂,因为那些复杂的方案都被我否定了。

Nextcloud 以及 FileFun

对于 Nextcloud,一个字,慢。不要说去优化 PHP。PHP 的参数加完或许也就刚刚够用,此外其插件应用中心也是比较费心的一件事。

主要的问题是会存在添加外部存储后无法显示目录的问题,文件被其他应用修改后,需要手动执行下面的命令扫描。

sudo -u www-data php occ files:scan --all

此外其与 syncthing 的文件权限问题是非常恶心人的。不想弄太复杂,而且其在线播放能力,其他格式文件的支持都不是那么的尽人意。

在这过程中还将我 ext4的移动硬盘弄出了损坏的 point,我是使用以下命令修正的:

#sda1 移动硬盘分区
fsck.ext4 /dev/sda1

此外还有一些命令可能用得着:

#硬盘信息
blkid /dev/sda1
#磁盘吞吐
iostat -d -x -k 1 10
#磁盘读写情况与进程
iotop

参考:挂载磁盘报错“Structure needs cleaning”

关于 FileFun,可以说更不接地气,首先安装时会出现空白问题,这个空白问题的解决就是,不要使用 docker volume,自己去创建那两个文件夹。

FileFun也是 PHP 而且和 Nextcloud 关系不简单,使用的 Google材料设计风格,总体上看上去没问题,但是大文件的视频,mkv 和 nextcloud 一样,吃力。

文件浏览整体性能上不如 nextcloud,因为 nextcloud 使用了数据库记录,而 FileFun 纯粹每次都要扫。如果真拿来用,半斤八两。

Syncthing

dcoker : https://hub.docker.com/r/linuxserver/syncthing

不得不说,这可能是地球上数一数二的免费的好用的文件同步软件,去中心化的点对点的传输很有意思,听上去这不就是区块链吗?不,这真只是个多终端的文件同步。

在我好几次的实践下,我决定用起来,因为文件校验,它是认真的,我在移动端使用其他软件删除文件后,另一端也能很敏捷的执行相关动作,此外并不会像 nextcloud 那样把一些已经存在的重复覆盖,这是一个专业的文件同步工具,特别是它还提供的版本控制。

这样也就不怕偶尔删错了(模式还有很多种),棒。

yml 文件:

version: "3"
services:
   syncthing:
    container_name: syncthing
    image: linuxserver/syncthing
    # network_mode: "host"
    restart: unless-stopped
    privileged: true
    environment:
     - PUID=1000
     - PGID=1000
     - TZ=Europe/London
     - UMASK_SET=022
    ports:
     - "8384:8384" #后台界面
     - "22000:22000" #文件传输
     - "21027:21027/udp" #设备发现
volumes:
    - /home/docker_data/syncthing/config:/config
    - /home/docker_data/syncthing/data1:/data1
    - /home/docker_data/syncthing/data2:/data2
    - /mnt/WD:/mnt/WD #你的盘或者文件夹
#创建命令
#docker-compose -p file -f "syncthing.yml" up -d --build

一些基础的就不赘述了。关于设备连接慢的问题,尽量不要使用自动搜索,自己固定链接。最好可以使用路由表或者 DNS 重写去给一个域名(静态 IP)来替代。

好用,只能说,谁用谁知道。

syncthing 的文件权限问题

测试版本:v1.6.1, Linux (AArch64)

登录 syncthing 容器,执行以下命令:

chown -R abc:users /mnt/your_path
chmod -R 755 /mnt/your_path

解释下:官方容器创建时指定文件权限755,一般存储权限也是755,syncthing 中文件默认用户为 abc,所在组 users,执行完,应该可解一切同步权限问题。目前我是没问题,也不影响 samba等

Smaba

docker:https://hub.docker.com/r/dperson/samba/

为什么会想到 Smaba 呢,主要是我在 nextcloud 和 filefun 上得到了极差的大文件解析体验,也就是我看3个 g 的 mkv 是毫无办法,而且导致硬盘一直异响,我很怕会坏盘,所以我选择尝试只使用这种简单协议看是否是硬盘本身问题,后来验证,并不是硬盘问题,使用 smaba 协议可以很好的解决。大概、可能是得益于Mac 的时间机器使用的就是 SMB 协议。

yml 文件:

version: '3'
services:
  samba:
   image: dperson/samba
   container_name: samba
   ports:
      - "139:139"
      - "445:445"
   environment:
     USER: '用户名;密码'
     SHARE: '磁盘名1;/mount/路径/;yes;no;no;all;none,all,none;'
     SHARE1: '磁盘名2;/mount/;yes;no;no;用户名;none,用户名,none;'
   restart: always
   volumes:
     - /mnt/WD:/mount/

#docker-compose -p file -f "samba.yml" up -d --build

上面 SHARE 环境变量的解释下,分享了两个文件夹,对应下面volume 的挂载。一个专门给时间机器用来备份,另一个是整个磁盘内容,官方文档:https://github.com/dperson/samba

实测,在 Finde 中直接打开流媒体文件,和硬盘插磁盘上打开文件基本无异。

至于 Nextcloud、Filefun、OMV 这些花花瓶子,对于个人用户来说,没有那个硬件环境,装上也用不出感觉来,不用浪费时间,我觉得对于一个真正的文件服务器来说,文件的访问速度以及可靠性强过一切(我硬盘都已经是 ext4了,还让我坏文件,就有点不合理了)。

关于Mac时间机器的备份

最后我备份单独用这个了:https://hub.docker.com/r/mbentley/timemachine

备份我用的 arm 分支,需要注意的是,不要设置VOLUME_SIZE_LIMIT,请单独分一个区,最新的 macos 貌似不支持他那项模拟技术。

version: "3"
services:
timemachine:
   image: mbentley/timemachine:smb-armv7l
   restart: always
   container_name: timemachine
   network_mode: "host"
   environment:
     CUSTOM_SMB_CONF: "false"
     CUSTOM_USER: "false"
     DEBUG_LEVEL: "1"
     MIMIC_MODEL: "TimeCapsule8,119"
     EXTERNAL_CONF: ""
     HIDE_SHARES: "no"
     TM_USERNAME: "timemachine"
     TM_GROUPNAME: "timemachine"
     TM_UID: "1000"
     TM_GID: "1000"
     PASSWORD: "timemachine"
     SET_PERMISSIONS: "false"
     SHARE_NAME: "TimeMachine"
     SMB_PORT: "445"
     VOLUME_SIZE_LIMIT: "0"
     WORKGROUP: "WORKGROUP"
   volumes:
     - /mnt/BACKUP:/opt/timemachine
     - timemachine-var-lib-samba:/var/lib/samba
     - timemachine-var-cache-samba:/var/cache/samba
     - timemachine-run-samba:/run/samba

volumes:
     timemachine-var-lib-samba:
     timemachine-var-cache-samba:
     timemachine-run-samba:

#docker-compose -p file -f "samba_time.yml" up -d --build

创建完成后会自动显示在 finder 侧栏,时间机器选中即可,默认密码账号都是 timemachine 其他看文档。从此,每当我连上局域网 时间机器就会开始帮我备份,简直无法再爽了,也不用怕捅坏雷电口了。这里有一份官方的设置信息,或许会有用:在 Mac 上使用时间机器备份至共享文件夹

PS:如果需要和 samba 服务共存,我试过的最好的方式,也就是我现在的方式是:将 timemachine 的容器使用macvlan网络隔离,使其看上去像一台单独的主机,这样445端口便不会冲突。同时路由将这样显示:

以上,只是我的尝试结果,技术、精力都十分有限,试错是一件耗时且无太大意义的事。已很好的满足了我自己的需求。

important!!!因为 WordPress 的区块编辑器无法连同格式粘贴,yml 文件可能存在空格对应问题,有问题请留言。


0条评论

发表评论