Normal view
- NYT | Top Stories
- Dropped From Spending Bill, Cancer Research and D.C. Stadium Measures Revived by Senate
分享一下我用 hyper-v 做的 nas 服务器,非常稳定省心,模块化,懒人福音
这里提供方向理念和思路,至于实现(安装,设置 等等具体步骤),网上教程已经非常多,在这里就不表了。
我在我的 diynas 安装 windows server 2019 ,只开 hyper-v ,不安装第三方软件,尽量在 host 保持软件纯粹。
在 hyper-v 里,我开了 2 个 vm:
一个 vm 是用来管理硬盘的 nas 系统,作用只有一个,就是提供访问接口(比如 SMB ),给其他电脑,vm ,其他设备等存取硬盘的内容。在 host ,我把所有硬盘都脱机,然后都安排给这个 vm ,硬盘直通,让这个装了 nas 系统的 vm 直接管理它们。这个 nas 系统,可以装 windows server ,可以装 omv ,可以装 truenas ,什么都可以。我自己为了方便让硬盘用 ntfs ,就装 windows server 2019 。因为 ntfs 的兼容性非常棒,随时把硬盘拔出来插到电脑上直接读取。如果想要更详尽的硬盘管理,比如硬盘休眠,可以装 truenas 。由于我会定时整机关机,所以我不需要由 nas 系统来提供硬盘休眠。这个 vm 尽量不要折腾它,改变它,让它持续稳定运行,没有折腾它的必要。
另一个 vm 是下载机,用作下载和文件同步的系统,以 smb 的方式连接装了 nas 系统那个 vm ,装的 os 是 windows 10 ltsc 2019 ,里面装了各种下载软件,百度云,bt ,pt 软件,btsync ,goodsync 等,非常繁杂,这是我这套 nas 服务器提供各种花样服务的 vm 。这个 vm 是经常被折腾的,很容易出问题,但这个 vm 出问题,也不会影响到其他设备访问硬盘里面的内容。,喜欢折腾的可以装黑群,但我不喜欢无意义的折腾,而且不够稳定,所以我装 windows 。黑群的软件,在 windows 上面很容易找到代替品,没必要迷信黑群。windows 的兼容性是无与伦比的。
使用 hyper-v 的好处是,可以更方便管理这些干活的系统:
0.windows 系的极高硬件兼容性,省心!
1.比如定期快照,vm 出问题崩溃了,1 秒恢复。
2.还有把功能模块化,一个 vm 专门做管理硬盘,不安装任何第三方软件。一个 vm 专门提供功能,安装各种软件,非常繁杂,这个 vm 特别容易出现问题,比如出现软件冲突等,即使这个 vm 炸了,也不影响旁边专职管理硬盘的 vm ,对其他设备访问硬盘毫无影响。
3.host 关机,可以自动保存 vm 的运行状态。host 开机就可以自动恢复这些 vm 的运行状态,在 vm 的角度,就像从来没有关机过那样。非常方便。为了延长硬盘寿命,我在 host 设置了每天半夜定时关机,白天定时开机,整机停机。
4.最重要的是,使用 hyper-v 这种 type1 虚拟机对性能的损耗非常低!既有 type1 虚拟机的高性能,又有图形界面的方便管理。
备份文件方面:
在手机上,我在手机上安装 btsync ,在下载机 vm 里也安装一个 btsync ,手机文件会自动经过做下载机的 vm 里面的 btsync ,以同步方式存储到隔壁 nas 系统的 vm 的硬盘里面。
在 pc 上,我用 goodsync ,直接往第一个 nas 系统的 vm 提供的存储接口(就是 SMB )备份 pc 的文件进去。整个过程,管理硬盘的第一个 vm ,从来不需要安装任何第三方软件,只需要提供访问硬盘的接口,其他系统会自己用各自的软件通过这个接口往 nas 系统提供的硬盘存取东西。这才是 nas 的最基本基本功用:管理硬盘,提供访问接口。
我的理念就是:
不重复造轮子,尽量依赖现成的成熟软件( windows server ,btsync ,goodsync )。模块化管理,vm 可随时替换,复原,保存运行。非常稳定省心。
平时管理这台 nas 服务器,我都用 RDP 连上去 host 和 vm 。使用 RDP ,比群晖那个 web 界面管理,强多了,最纯粹直接的桌面体验。
人到中年,折腾 NAS
这么多年来也还算稳定运行,从不主动关机。我的需求也简单:挂 PT 下载电影,用 DS file 备份手机相册。
人到中年,最近在 B 站刷到几个 NAS 的视频,开始想起来折腾 NAS 。因为需求简单就只是单纯想体验一下新的 NAS 系统,所以本着最低成本原则折腾:
一、原来这台 NAS 可升级的地方不多,换上两条 4G 的内存条,系统一下流畅了不少。本来想着升级到 DSM7.2 ,但怎么都装不成功,可能硬件太老了,不折腾,就老老实实用 5.2 吧,当个下载机来用。
二、翻出家里吃灰的笔记本(联想昭阳 E42 ,i3-6006 ,4G 内存,500G 机械硬盘,千兆有线网卡),装上了飞牛 OS 。准备用来挂载黑群的 SMB 电影文件夹,利用飞牛的 APP 来补上黑群的 APP 不足。
后面就以飞牛 OS 为主,慢慢玩吧。
尝鲜 Bcachefs 的注意事项
如果有人要用 bcachefs 的话,我这一个月折腾了好久,总结了一些坑,可以参考一下
-
一定保证存储的 bcachefs 上的数据有存储在其他文件系统的完整备份
-
bcachefs format 默认会使用硬盘逻辑 blocksize 作为文件系统的 blocksize ,这和文档中的记录不符,最好格式化时手动设置 blocksize 到 4096
-
千万别开透明压缩,除非你完全不 care 性能,它是 zstd 实现是单线程的,且性能只有正常的单线程 zstd 的约 1/10 (原因未知),q64t1 bs=1M 能跑出 28MB/s 的惊世骇俗的成绩
此外它的压缩是基于 extents 进行压缩的(而不是 block ),因此 extents 的大小直接决定压缩率和速度,开启压缩时你可能可以得到 q64t1 bs=4K 性能比 q64t1 bs=1M 好,好很多
-
要保证一个组里没有性能差距过大的硬盘,不然因为数据的多个 replica 的写入不是异步的而导致性能更好的硬盘降级到最差硬盘的水平,目前没法指定 replica 的拓扑
-
写入会进 foreground_target 并在对应组的所有硬盘之间条带化,而不是同时在 foreground_target 和 background_target 之间条带化
由于上一条建议,因此不推荐这么做(你可以通过不设置 foreground_target/background_target 来实现在全部硬盘间条带化)
-
如果设置了两个 replicas ,但是却有偶数个硬盘,则多出来的硬盘完全不提供性能提升 例如你在 foreground_target 的组中有三块硬盘,background 组中有两块硬盘,那么写入只会同时写到 foreground_target 中的其中两块硬盘
-
如果你用 systemd-mount 挂载硬盘,默认会在一个比较短的时间内超时,如果 bcachefs 更新数据结构,mount 时 fsck 需要非常长的时间,可以通过设置 x-systemd.mount-timeout=3600s 来防止 fsck 到一半 systemd 跳出
-
添加硬盘后可以用
bcachefs data job migrate /mnt
来重新 balance ,尤其是可以强制让 btree 节点移动到新的 metadata_target/foreground_target
-
如果 metadata_target=none (默认)那么 metadata 就会写到 foreground_target
-
background_compression=none 时会继承 compression 的值,默认情况下格式化时只指定 compression 那么 background_compression 就会是 none
-
bcachefs 不会在检查到磁盘支持 discard 就自动开启,务必手动给 ssd 开启 discard
-
通过设置 durability=0 可以得到 writethrough cache ,设置 promote_target 而不设置 foreground_target 可以得到 writearound cache
假如你有一些性能较差/与其他硬盘不一致的 ssd ,并且你只想让它作为读缓存来提高覆盖率,那么可以加入到 foreground_target 的组中并设置 durability ,roadmap 中,未来还可能支持更复杂的 tiering 配置来覆盖同组中速率不一致时的种种情况
-
metadata_replicas_required 和 data_replicas_required 决定的是 mount 时有多少副本才认为数据完全,而不是写入多少个 replica 就算写入完成/提供 fsync 保证
-
暂时最好别用 online fsck ,有一些问题,可以去 bcachefs 的 github mirror 的 issue 区看
-
如果你想尝试 master 分支,请一定先去 irc 里看看是不是已经 ready 了,也可以去看看 ci 的 state
目前 6.12 用下来没遇到什么大问题,但是 6.11 有非常多已知问题
求购性能强进的 arm 小主机
有什么好的 arm 小主机做服务器( NAS )的可以推荐的吗? 需求:
- 支持内存扩展,能扩展到 64GB 内存最好
- 支持 m.2 插孔的硬盘(nvme 或 sata 协议都可以)
- CPU 最好能够比较强劲
- 功耗当然越低越好啦
- 支持 USB3.0 ,想挂外界硬盘架(不清楚这个是不是最好的方案)
- 想做软路由,网口需要 3+,速率最好是 2.5G
- 价格不是问题,但是最好裸机在 2K 以内(不带内存条,不带硬盘)
- 希望主机能比较小巧
主要作用是有一堆服务,跑在 exsi 上,但是现在的机器性能太孱弱了(3865U)
最近迷上了 PT,感觉这东西挺上头的,最后有可能变成「充值完游戏,一下变空虚」
顺便想求个 web 更新快的站点,可能是人人人?还是憨憨?还是我宝?
通过硬链接方式来衔接 PT 下载文件和 Jellyfin 库
请注意,硬链接有一些限制:
- 不能对目录创建硬链接,只能对文件创建。
- 硬链接必须在同一文件系统中创建。
- 当您删除源文件时,硬链接仍然保持对文件内容的访问,因为硬链接和源文件本质上是文件系统中相同文件内容的不同入口点。
我们可以通过 find
+ ln
来批量创建硬链接。要结合使用 find
和 ln
命令来为给定目录中的每个文件在另一个目录中创建硬链接,可以通过管道(pipe)将 find
命令的输出传递给 xargs
命令,然后使用 ln
创建硬链接。这种方法可以高效地处理大量文件和复杂的文件名。
以下是具体的步骤和命令示例:
使用
find
查找文件:首先,使用find
命令来查找您想要链接的所有文件。确保只选取文件,不包括目录。将
find
的输出传递给ln
命令:通过xargs
将find
命令的输出作为ln
命令的输入。
这是一个具体的命令示例:
1 | find /path/to/source-directory -type f -exec ln {} /path/to/destination-directory/ \; |
这个命令解释如下:
find /path/to/source-directory
:在/path/to/source-directory
目录下查找文件。-type f
:确保只选取文件(file),不包括目录。-exec ln {} /path/to/destination-directory/ \;
:对于find
命令找到的每个文件,执行ln
命令创建硬链接。其中{}
是一个占位符,代表find
命令找到的每个文件的路径。
这个命令会在 /path/to/destination-directory/
目录下为源目录中的每个文件创建一个硬链接。请确保目标目录已经存在,因为 ln
命令不会自动创建目录。同时,由于硬链接的限制,源文件和目标目录必须位于同一文件系统内。
使用群晖 Chat 实现多平台内容传递
手机和电脑之间经常要传递文件或者文字,很多人都是用微信或者 QQ 之类的软件,大部分软件体验过后发现群晖 Chat 十分好用!
我使用的是 iPhone,电脑有 Windows 和 Mac OS X,还有备用机是 Android,所以我基本是常规平台都要用,如果要在设备之间传输内容就是个烦恼。
然后呢…我有黑群晖啊,直接用 Chat 在各个平台传输内容,几乎全部平台都有 Chat 客户端,而且就算用不了客户端也可以用网页版,我还有 Yubico,就算在陌生设备也能无密码的登录。
使用的前提是,有群晖 NAS,黑白都可以。然后安装好 Synology Chat Server 套件。手机也要安装好。详情参考我另一篇文章。
iOS 上直接通过分享菜单就有 Chat 选项,我一般都是直接分享到『我的空间』就可以。
现在没有什么软件比这个好用了。
通过群晖 Chat 推送通知到 iPhone
如果你有这样需求,将 Android 短信和来电甚至应用消息推送到 iPhone 上,可以尝试以下使用群晖的 Chat 套件。
设备设置
准备
- 群晖 NAS 或者洗白过的黑群晖
- 设置好群晖的 QuickConnect ID!这项是必须的!
- 短信转发器 SmsForwarder
- Chat App(iOS,Android)- 中国区 AppStore 没有!
安装套件
1.先要在国际版的群晖网站下载中心找到你NAS型号的 Synology Chat Server 套件,下载保存好套件文件。
2.打开你 NAS 的页面,然后在桌面打开套件中心。
3.选择手动安装。
4.弹出的窗口找到刚才下载的套件文件选择下一步。
设置机器人
1.打开安装好的 Sunology Chat。
2.在右上角你的头像点击,然后选择『整合』。
3.弹出的菜单选择『机器人』。
4.弹出的窗口点击『+创建』。
5.填写机器人名称和设置以下照片,记得复制好 『传入 URL』。注意:你还没添加机器人之前不要勾选『在聊天机器人列表隐藏』!
6.退出到 Chat 界面,在左边的栏目中『机器人』一栏的右边加号点击并找到刚才新建的机器人点击。这样就成功添加机器人了。
推送内容
推送到机器人的内容可以参照群晖知识中心关于整合的说明
下面我们以文字内容为例,格式是 json
。
payload={"text": "这里是送内容的文字部分"}
使用 POST
方式推送到建立机器人时候的『传入 URL』。
iPhone 设置
在 AppStore 上搜索 Sunology Chat 并安装,如果国区找不到的话只能用其他区账号安装了。
安装后输入 NAS 地址和端口号或者用 QuickConnect 连接。
Android 手机设置
通过短信转发器 SmsForwarder 推送手机上的消息到 Chat。
先下载好 SmsForwarder 并在 Android 手机上安装,然后打开 App,在发送通道的界面点击右上角加号选择 Webhook
。
选择 POST
,在Webhook Server
填入机器人频道的 URL, 消息模板中填入 payload={"text":"{msg}"}
然后保存。
在转发规则的短信页面右上角加号添加一项,发送通道下拉选择刚添加的通道,然后保存就好了。你也可以点『测试』来测试是否成功。
映泰J4125 自建 NAS
终于要自己买硬件来装 NAS 了!选择低功耗平台,6盘位机箱。
硬件清单 2022-09
硬件 | 价格 |
全汉 FSP Flex-350G 额定350W电源 | ¥459.00 |
西部数据红盘Plus 8TB(WD80EFZZ) | ¥1,225.00 |
映泰J4125NHU主板 | ¥565.00 |
金士顿 FURY 8GB DDR4 3200 Beast内存 | ¥185.00 |
梵隆 6 盘位热插拔机箱 | ¥448.00 |
佳翼5盘SATA阵列卡m.2 nvme to sata | ¥199.00 |
闪迪USB 32G USB3.1 U盘CZ74 | ¥43.90 |
合计 | ¥3,124.90 |
系统
现在市面上各个能安装的 NAS 系统都折腾一遍了,综合起来只有 DSM 最好使,主要是手机 APP 最健全,设计也最直观,然后就是想办法安装了。
网上搜了好久都没有针对我这块主板的引导,只能自己编译了,然后在搜索编译 DSM 引导的,发现一篇直观简单的编译教程,照着一顿操作,OK!完美引导,M.2 转接卡也能识别使用,没问题。还是直接在线安装系统的。安装完之后没有任何问题,直接使用。
数据迁移
群晖的 DSM 数据迁移十分简单,就是在新的机器安装一个 Migration Assistant,打开之后选择旧的机器,然后输入旧机器的管理员账号密码,选择迁移那些东西,然后等完成就好了,我选择所有组件都迁移,1.3T 数据用了4个多小时才完成,因为是千兆局域网。
Docker 也完美迁移!
迁移后旧机器会停用所有组件,再登陆上去像是新机器一样,因为迁移到新机器了,所以要停用旧机器的组件才不会和新机器上的冲突。看一眼旧机器的磁盘,数据没删的!好评!
现在是一个 8T 硬盘,过几个月再买多个 8T 组 Raid1,这样就错开硬盘的批次了。其实可以买一个希捷的或者买个红盘Pro,也算是错开了,奈何…穷啊。
NAS 功能使用和玩法
我现在 NAS 主要是做数据备份,然后就是文件分享,平时出去装电脑,本地单位的电脑很多时候都要安装一些特定的软件,我就是用家里 NAS 作为分享服务器,需要时候直接从 NAS 下载。
列一份清单吧
套件
套件 | 说明 |
Plex | 影视媒体中心,目前功能最完善,其他都不少问题。 |
Photos | 群晖的照片应用,功能也是目前相关应用最完善的。 |
Chat | 自建聊天软件,配合群晖的免密登陆在模式电脑需要传文件什么的很舒服 |
Note Station | 笔记应用,不是很好用,但是找不到其他满意的自建笔记就将就用 |
WebDAV | 在手机电脑外网直连 NAS 文件最方便了 |
Contacts | 通讯录,手机基本都支持连接,可以方便设置手机通讯录都存 NAS。 |
Office | 这个是群晖 Office 套件,需要 Drive 套件支持,但是格式不能直接打开微软 Office 格式,需要转换格式,但是还是能用的。 |
Active Backup for Business | 备份服务器到 NAS,支持整个分区备份,不错,服务器就 10G,就算备份几个版本都可以。 |
Cloud Sync | 网盘同步工具,挺满意的,都能同步。 |
Hyper Backup | 备份 NAS 文件或者设置等到远端服务器,我把笔记,密码库等文件加密备份到 TeraCLOUD 和 OneDrive 上做一个备份。 |
Docker
项目 | 说明 |
finab/bark-server | 推送消息到 iOS Bark |
homeassistant/home-assistant | 智能家庭中心,暂时只用 Docker 版,但是功能不全,要换其他版本才行 |
jeessy/ddns-go | DDNS,目前最顺手了 |
meosmemo/memos | 轻笔记,一个不错的随手记 |
p3terx/aria2-pro | 下载工具 |
vaultwarden/server | BitWarden 的自建服务,我所有密码都用这个保存。 |
zerotier/zerotier-synology | 异地组网 |
硬件选择
电源
选择台达这电源算是没得选,因为之前想要台达1U 额定 350W 电源,但是到处都没货,然后发现加点儿就买到个全模组的,然后就选择了京东买全汉的 Flex-350G 了。全模组好处是方便,要的线接上,不要的就不接,省点儿空间,毕竟机箱小。但是的 4Pin 接口没防呆,全部都是 CPU 4Pin 接口,我还插错过…
硬盘
看过希捷和西数,发现希捷寿命相对没西数好而且一直装机都用西数就选西数,红盘要 CMR 就只有红盘 Plus 和 Pro,Plus 便宜一点。就先买个红盘 Plus先。后来我又买多了一个红盘 Plus,组的 Raid1。
主板
之前看的时候映泰还是只有 J4105,然后最近出了 J4125,那就用 J4125 咯。这块主板有坑的,主要就是没有前置 USB 3.0 接口,主板上的风扇接口是3针不能调速,内存最高支持 8G,插两条 8G 能识别,不过我后来买多条 16G 内存接上去,完全可以识别24G。还有就是,主板说明上说到,当 M.2 接口接有 SATA 协议的时候会禁用一个 SATA 口…也就是说,我加了 M.2 转 SATA 之后主板的 SATA 口只能用一个…
内存
内存呢,就没什么的,平时装机用带马甲的都是这条,就用这条咯。先是买了条8G,后来加一条 16G。
机箱
机箱最开始我是想要买个 3U 或者 2U 的热插拔机柜机箱的,毕竟布局起来方便,能塞进家里的 6U 机柜。后来看到拓普龙的机箱,又想用这类 NAS 机箱,不过拓普龙的机箱硬盘笼背板不好,机箱风扇也不行,买回来还要自己改,然后在 B 站逛就发现又款梵隆的机箱,做工可以,背板也不错。不过外观真的难看…但是这价格没得选,就用吧。这机箱有一个很大的优点点,支持全高 PCI-E。
我心目中最好的 NAS 机箱是宝藏盒。所有我想要的设计,宝藏盒都实现了!不过就是价格太贵了。
SATA 扩展卡
因为映泰J4125只有两个 SATA 接口,这肯定是不够用的,所以必须想办法扩展,而主板只有一个 PCI-E 槽,所以就要用 M.2 转 SATA,看了几款,这个时间段只有看到佳翼的这款 M.2 转 SATA 转接卡不错,有外壳,看评论兼容性都不错。这个扩展卡在黑群晖下顺序是反过来的,就是5号口是1,1号口是5…
U盘
随便一个质量好的 U 盘都可以,这个一直用开就直接用这个了。
结语
2022年 618 在京东上群晖的 DS920+ 曾经 3000+ 就能买到,硬件也一样,但是还是贵,我现在加上硬盘都比白裙便宜。心心念念的独立 NAS 现在终于完成了!家庭数据中心完成建立,手机照片直接备份上去,不用愁。
自建 NAS(理论篇)
现在用一个 3865u 的工控机做 All in one 主机,装了 PVE 然后 OpenWRT 和黑群晖,一个 128G 固态,2T 机械盘,8G 内存。但是我还是得分开来,准备另外组一台低功耗 NAS。
主板
主板现在(2022年1月)只能找到映泰 J4105的ITX主板是有牌子的主板,2022年5月出了 映泰J4125,N5095 和 J4125 是很多电子厂自己出的板。
映泰J4105是比较『正规』的主板,两条台式机 DDR4 内存槽,一个 PCI-E 槽,一个 M.2 接口(不是 NVME),两个 SATA 接口,一个千兆网口。但是没有前置 USB 3 接口,看评论风扇是 3pin 的。如果做 NAS 则需要用 M.2 转 SATA。
N5095 主板找到一个电子厂出的,内存槽是单个笔记本内存槽,一个 M.2 NVME,一个 M.2 网卡槽,单网卡口,单 SATA 口,4个 USB3.0 接口。没有 PCI-E 槽,就是没法扩展万兆网卡了,虽然很长时间都不会用到。
机箱
NAS 机箱一定要支持热插拔硬盘的!这个必须的,就算更换硬盘的机会不会太多,但是当你需要更换硬盘的时候,热插拔的话就不需要关机,不需要拆机箱,这是很重要的事情!
我家里有个 6U 机柜,多以我是可以选择一个 2U 或者 3U 的短款机柜机箱的,也就是深度不能超过40cm。
2U 6位热插拔的机箱也找到。前面板还有两个 USB 2.0 两个 USB 3.0 的接口,支持 ATX 电源。这个很重要,因为小电源的风扇的噪音很大!半夜的时候会影响睡眠。我的机柜是装在二楼楼梯间的,我妈房价门口就在那,现在一个机柜风扇多多少少还是有噪音的,所以不能再增加噪音。
如果不是放机柜,怎要买个 NAS 机箱,凯晶的机箱还不错。
2022年还有一个梵隆推出的 NAS 机箱。
多盘位热插拔,但是只支持小电源,担心噪音
硬盘
NAS 的硬盘我是想要用 8T 两个的,而且最好不要同一时间买同一品牌和同一型号的硬盘,因为同一批次的硬盘同时出现问题的几率还是有的,一不小心两个硬盘同时坏,就算组 RAID1 也没用。还有就是不能买 SMR 堆叠硬盘!这种硬盘不适合 NAS 这种长时间运行的机器使用!数据一不小心出错就惨了!
我打算买一个希捷ST8000VN004,一个西部数据WD80EFBX。这样同时出问题的几率就没那么大了。
内存
内存其实没什么,价格差不多的情况下就看主板支持多少频率了。笔记本内存槽的话没多少选择,金士顿 FURY 8G。如果是台式机内存,我现在电脑用的是海盗船的内存,用着OK就继续买这个。我还是不要贪便宜了,老老实实选。我很想上 16G 内存,问题是害怕主板不支持,毕竟主板写着最高 8G。
电源
机箱可以的情况下,我选择振华全模组铜牌 450W 电源。毕竟电源很重要!选择一个质量有保证而且价格合理的电源。
成品 NAS
群晖 NAS 一直都是我最想入手的,但是价格实在是难以接受, DS920+ 在打折时候也三千多接近4千,性能只能算过得去而已。
凯晶也有成品 NAS,价格比自组稍微低一点点,但是也不是太喜欢。不过如果不想太折腾的话还是不错的选择的。
另类方案
现在有不少小主机也是用低功耗 CPU 的,可以自己用小主机和硬盘架魔改 NAS 的。或者有旧的低功耗CPU笔记本的话也可以
小主机
我看到有Beelink11代N5095迷你主机,M.2 接口在顶部,这样可以在顶部开孔接上 M.2 转 SATA,外接一个热插拔硬盘笼,但是这个硬盘笼就要你买个电源给硬盘笼供电。找到的电源还不知道稳不稳定…这才是重点。
总结
想要组一台 NAS 最好是买群晖,自己组的话,主板是最难找的,毕竟低功耗 CPU 都是焊在主板的,大厂不怎么出,能找到都是小厂自己出的。再有就是可以选择一些圈里口碑比较好的厂来买,有几个视频博主有买相关硬盘的,口碑还算可以,也可以选择。
其实我还是想等等看 12 代的英特尔有什么低功耗方案。之前想要 4700U 的主板,但是现在都没见有工厂出。
全自动化观影之 MoviePilot 安装与使用
根据作者意愿,请勿将本文转载至任何中国社交媒体与平台,包括但不限于小红书、Bilibili、微博、简书、什么值得买等。
相信绝大多数搭建了 NAS 的人都有着一个比较重要的使用途径,即使用 Emby、Plex、Jellyfin 或 Infuse 来搭建专属于自己的家庭影院。在此之前,我一直使用 NasTools 与 Plex 来完成我的家庭影院搭建,可以很好的完成自动化的观影需求,在 NasTools 内订阅某个剧集或者某部电影,便不再关心资源下载等内容,等待 NasTools 自动完成即可,如下图所示。
后续因为一些众所周知的因素,NasTools 的作者不得不停止更新并将 Github Repo 进行了 Archive 处理,尽管最后的版本对我而言仍旧可以保持日常需求,但是有的时候也不得不面对一些问题,比如在搜索资源时耗时越来越长等。但是有一个好消息,NasTools 的原作者最近开了新坑,基于 NasTools 的代码精简化需求,开发了新的影视管理工具 MoviePilot ,看到其他人的描述说新版本的软件运行速度有了相当多的提升。
话不多说,那便开始部署,我也在这里记录下我的安装过程,我在这里使用 Synology 的 Container Manager(原 Docker Manager),以下内容也可稍作修改应用到其他支持 Docker 的平台,就凭各位自行发挥了。
Synology Nas 准备工作
安装 Container Manager
打开 Synology 套件中心搜寻 Container Manager 并进行安装,安装过程根据相应提示即可。
设置 Docker 工作目录
打开 Synology 控制面板,选择共享文件夹,创建新的共享文件夹,文件夹名称根据需求自行选择,我这里就叫做 docker。
接下来,进入 Synology File Station,鼠标右键选择刚刚穿件的目录,进入 属性
菜单,选择 权限
菜单中的 新增
,用户与组选项选择 EveryOne
,应用于全部文件夹,给予 读取与写入
权限,如下图:
点击应用后再选择 应用到这个文件夹,子文件夹及文件
,如下图,点击保存后即可。
设置项目运行目录开始创建项目
在 File Station 内进入上一步设置的目录,新建文件夹,根据个人喜好选择命名即可,我这里将命名为 theater
。
设置完成后打开 Container Manager,点击左侧 项目
,再选择 新增
,根据自己喜好命名,路径选择为上一步设置的目录,来源选择 创建 docker compose
,内容留空进入下一步即可,设置完成后如下图所示:
完成后点进 theater
进入项目,选择 YAML
配置,我们的准备工作便已完成。
我这里就继续沿用之前 NasTools 的配置文件了。
MoviePilot 依赖项目准备
CookieCloud 安装
根据 MoviePilot 项目描述,CookieCloud 为本项目的必须依赖,原文如下:
站点信息需要通过 CookieCloud 同步获取,因此需要安装 CookieCloud 插件,将浏览器中的站点 Cookie 数据同步到云端后再同步到 MoviePilot 使用。
服务端 Docker 安装
尽管 MoviePilot 项目中已经包含了公共 CookieCloud 服务器,但是本着能自建即自建的原则,我们也会在这里自行搭建 CookieCloud 服务器,docker compose
代码如下:
version: "3"
services:
cookie-cloud:
image: easychen/cookiecloud:latest
restart: always
network_mode: bridge
hostname: cookie-cloud
ports:
- 8088:8088
将上面的代码复制粘贴进入 Container Manager,点击保存后选择启动,会看到 Container Manager 正在拉取镜像,如下图:
等这里的代码结束运行后,在浏览器输入 http://${Synology IP}:8088
,如果看到如下界面,则表示部署成功:
浏览器插件安装
进入 CookieCloud Release 下载最新的浏览器插件,并进行解压保存。进入 Chrome 插件设置:chrome://extensions/
,打开开发者模式,选择 加载已解压的扩展程序
,选择刚刚的解压目录,点击选择进行安装,如下图所示:
安装完成后,我们可以打开 CookieCloud 插件进行配置,具体的教程可以移步 官方教程 ,下面以我的配置进行示例:
设置完成后点击下方 保存
与 测试
确保这里配置正确。到此为止,CookieCloud 配置完成。
下载服务器安装(以 QBitTorrent 为例)
根据 MoviePilot 项目文档,其支持 QBitTorrent
与 Transsisson
,大家可以根据个人喜好自行选择,我这里便以 QBitTorrent 为例,Transsisson 大家可以自行搜寻相关内容进行安装。
服务端 Docker 安装
第一步我们需要在之前设置的 MovePilot 项目的运行目录内新建一个名为 qbittorrent
的目录,这里的目的是将 QBitTorrent 的部分文件映射出来,以便我们进行后续操作,如忘记密码的修改或者 docker 迁移。如下图所示:
同时,我们需要新建 QBitTorrent 的下载目录,以我个人的设置为例,如下:
我这里设置为 media/movies(seriese)/raw
存储下载的原始媒体文件,media/movies(seriese)/clean
存储经过刮削的媒体文件,downloads
目录存储其他的下载内容。
以上内容准备后,我们便可以开始部署,docker compose
文件如下,你可以根据你的需求进行修改,以下仅为示例:
version: "3"
services:
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: host # 可以更改为 bridge,我这里选择 host 仅为方便设置 ipv6
restart: always
volumes:
- ./qbittorrent:/config # 冒号左边请修改为你想保存配置的路径
- /volume1/media:/media # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
- /volume1/downloads:/downloads
environment:
- PUID=1026
- PGID=100
- WEBUI_PORT=8999
- TZ=Asia/Shanghai # 时区
我们再次进入 Container Manager,选择 停止
项目,并将上文的代码复制粘贴,随后再次点击启动,如下图:
等待弹出窗口内代码运行完成后,浏览器内输入 http:${Synology IP}:8999
便可进入 QBitTorrent WEBUI,如下图:
QBitTorrent WEBUI 配置
上一步后我们需要输入用户名(默认 admin)与密码(默认 adminadmin),便可以进入界面,点击设置图标便可以进入设置,各位根据自己的需求自行调参,可以参考 qBittorrent 参数详细设置教程。
媒体服务器安装(以 Plex 为例)
MovilePilot 支持 Emby、Plex 与 JsllyFin,大家可以根据个人需求选择相应的媒体服务器,我个人的体验结论是:
- Emby 提供了较好的多人分享体验,也提供了多种客户端,如 Android、iOS、macOS、Apple TV等多平台,但其在 Apple TV 端的 APP 体验截止本文书写日期仍旧比较糟糕,如需 Apple TV 使用,一般需要搭配 Infuse 使用。
- Plex 更加注重个人观影,也提供多平台客户端,Apple TV 客户端较为完善,达到了一般流媒体平台的流畅度与观影体验。
- JellyFin 没有过多体验,但是可以把它理解为免费开源版的 Emby,手头紧张的朋友可以选择。
服务端 Docker 安装
在上一步中我们新建了媒体目录,在这一步便可以开始应用。同时,我们也需要新建一个目录用于存储 Plex 的配置,与上文中 QBitTorrent 相同,便不再赘述。这里的 docker-compose
文件如下,各位可以根据自己的需求进行修改:
version: "3"
services:
plex:
image: linuxserver/plex:latest
container_name: plex
network_mode: host
restart: always
environment:
- PUID=1026
- PGID=100
- VERSION=docker
- TZ=Asia/Shanghai # 时区
volumes:
- ./plex:/config
- /volume1/media:/media
这里步骤如上文相同,复制粘贴重新构建项目即可,这里不再赘述。
Plex WEBUI 配置
经过上文配置,这时便可以打开浏览器输入 http:${Synology IP}:32400
,按照文字说明进行配置,可以参考 如何在 FreeNAS 上安装 Plex 媒体服务器,跳过前文的安装,直接从网页配置看起即可。
正文开始之 MoviePilot 安装
建议开始之前首先熟读 MoviePilot 配置文档,熟悉每一项环境变量的命名与含义。
服务端 Docker 安装
基础配置
与上一步相同的,我们需要新建一个目录用于存储 MoviePilot 配置,如图所示:
然后我们便要开始稍显繁琐的 Docker 配置,我们跟随官方文档,开始一步步的编写 docker compose
文件,首先开头还是老几样:
version: "3"
services:
moviepilot:
image: jxxghp/moviepilot:latest
volumes:
- ./movie-pilot:/moviepilot # 冒号左边请修改为你想保存配置的路径
- ./movie-pilot/config:/config# 冒号左边请修改为你想保存配置的路径
- /volume1/media:/media # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
- ./qbittorrent/qBittorrent/BT_backup:/BT_backup #qb 种子目录,转移和辅钟需要
- ./nastools/config:/nas-tools/config # nt数据库,用于转移历史记录,如果之前没有安装过 NasTools 的可以忽略删除这一行
restart: always
network_mode: bridge
ports:
- 3003:3000
hostname: movie-pilot
以上这一部分为基础配置,接下来才是重头戏。
环境变量设置
要在 compose
文件中设置环境变量,其关键词为 environment
,只需要在上文中的代码中继续加入即可,接下来我们来一个个的填入 需要配置的环境变量。
Docker 运行权限管理
首先我们要获取 Synology 用户的 uid
与 gid
,这里可以通过 ssh 到 Synology 输入命令来获取,第一步需要打开 Synology 的 ssh 权限,如图所示:
接下来我们可以使用如下命令获取相关内容:
ssh ${username}@${Synology IP}
# 根据提示信任 Host 以及输入密码进行验证
username@SynologyNas:~$ id
uid=1026(username) gid=100(users) groups=100(users),101(administrators)
获取到上述内容之后,我们便可以设置以下内容,关于这里为什么不设置默认值,因为默认值为 0 的话即表明该程序可以获得我们 Synology 的 root 权限,这是不大安全的,具体的大家可以自行搜寻相关资料进行了解,这里不再赘述,这一步我们需要添加的环境变量如下:
environment:
- PUID=1026 # 运行程序用户的 uid,默认 0
- PGID=100 # 运行程序用户的 gid,默认 0
- UMASK=022 # 掩码权限,默认 000,可以考虑设置为 022
- MOVIEPILOT_AUTO_UPDATE=true #重启更新,true/false,默认 true
Docker 网络以及用户管理
environment:
- MOVIEPILOT_CN_UPDATE=false #重启更新是否使用国内加速,true/false,默认false
- NGINX_PORT=3000 #WEB服务端口,默认3000,可自行修改,但不能为3001
- SUPERUSER=admin #超级管理员用户名,默认admin,安装后使用该用户登录后台管理界面
- SUPERUSER_PASSWORD=password # 超级管理员初始密码,默认password,建议修改为复杂密码
- API_TOKEN=moviepilot #API密钥,默认 moviepilot,在媒体服务器 Webhook、微信回调等地址配置中需要加上 ?token= 该值,建议修改为复杂字符串
- PROXY_HOST=http(s)://ip:port #网络代理(可选),访问 themovied b需要使用代理访问,格式为 http(s)://ip:port
- TMDB_API_DOMAIN=api.themoviedb.org # TMDB API地址,默认 api.themoviedb.org,也可配置为 api.tmdb.org 或其它中转代理服务地址,能连通即可
MoviePilot 文件下载路径管理
DOWNLOAD_PATH: 下载保存目录,注意:需要将 moviepilot 及下载器的映射路径保持一致,否则会导致下载文件无法转移
这里的这一句话看起来有些绕,但是我们解决的方式其实很简单,我们只需要保持 MoviePilot 与 QBitTorrent 的 Docker 下载目录映射名称一致即可,我们在之前已经将其均设置为 media
,所以这里无需过多考虑。
environment:
- DOWNLOAD_PATH=/media #下载保存目录,注意:需要将moviepilot及下载器的映射路径保持一致,否则会导致下载文件无法转移 - 仅供参考
- DOWNLOAD_MOVIE_PATH=/media/movies/raw #电影下载保存目录,必须是DOWNLOAD_PATH的下级路径,不设置则下载到 DOWNLOAD_PATH
- DOWNLOAD_TV_PATH=/media/series/raw #电视剧下载保存目录,必须是DOWNLOAD_PATH的下级路径,不设置则下载到 DOWNLOAD_PATH
- DOWNLOAD_CATEGORY=false #下载二级分类开关,true/false,默认 false,开启后会根据配置 category.yaml 自动在下载目录下建立二级目录分类,因为我不需要这里进行更加详细的分类,电影与剧集两个分类即可,所以可以保持 false,各位可以根据自身需求进行更改
- DOWNLOAD_SUBTITLE=true #下载站点字幕,true/false,默认true
- REFRESH_MEDIASERVER=true #入库刷新媒体库,true/false,默认true
- SCRAP_METADATA=true #刮削入库的媒体文件,true/false,默认true
- TORRENT_TAG=MOVIEPILOT #种子标签,默认为 MOVIEPILOT,设置后只有 MoviePilot 添加的下载才会处理,留空所有下载器中的任务均会处理
MoviePilot 媒体库文件设置
这里的路径与上文相同,我们只需要保持 MoviePilot 与 Plex 的 Docker 媒体库目录映射名称一致即可。
environment:
- LIBRARY_PATH=/media #媒体库目录,多个目录使用,分隔 - 仅供参考
- LIBRARY_MOVIE_NAME=movies/clean #电影媒体库目录名,默认电影
- LIBRARY_TV_NAME=series/clean #电视剧媒体库目录名,默认电视剧
- LIBRARY_CATEGORY=false # 媒体库二级分类开关,true/false,默认 false,开启后会根据配置 category.yaml 自动在媒体库目录下建立二级目录分类,可以根据自身需求进行更改
# 转移方式,支持link/copy/move/softlink
- TRANSFER_TYPE=link
CookieCloud 配置
environment:
- COOKIECLOUD_HOST=http://10.0.0.6:8088 # CookieCloud服务器地址,格式:http://${Synology IP}:port,必须配置,否则无法添加站点
- COOKIECLOUD_KEY=从 CookieCloud 插件复制
- COOKIECLOUD_PASSWORD=从 CookieCloud 插件复制
- COOKIECLOUD_INTERVAL=180 # CookieCloud同步间隔(分钟)
# CookieCloud对应的浏览器UA
- USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 #CookieCloud 对应的浏览器 UA,可选,设置后可增加连接站点的成功率,同步站点后可以在管理界面中修改
通知器设置
暂时跳过。
下载器配置
以 QBitTorrent 为例,其他的请自行探索。
environment:
- DOWNLOADER=qbittorrent #下载器,支持qbittorrent/transmission,QB 版本号要求>= 4.3.9,TR 版本号要求 >= 3.0,同时还需要配置对应渠道的环境变量,非对应渠道的变量可删除,推荐使用 qbittorrent
#qbittorrent设置项
- QB_HOST=http://10.0.0.6:8999 #qbittorrent地址,格式:http://${Synology IP}:port,https需要添加 https:// 前缀
- QB_USER=username #qbittorrent用户名
- QB_PASSWORD=passport #qbittorrent密码
- DOWNLOADER_MONITOR=true #下载器监控,true/false,默认为true,开启后下载完成时才会自动整理入库
媒体服务器设置
以 Plex 为例,首先我们需要获取 X-Plex-Token
,在浏览器中登陆 Plex,F12
进入开发者模式,选择 Network
,搜索栏输入关键词进行搜寻,如下图所示:
获取后进行复制粘贴即可。
environment:
- MEDIASERVER=plex #媒体服务器,支持emby/jellyfin/plex,同时还需要配置对应媒体服务器的环境变量,非对应媒体服务器的变量可删除,推荐使用emby
- PLEX_HOST=http://10.0.0.6:32400 # Plex 服务器地址,格式:http://${Synology IP}:port,https 需要添加 https:// 前缀
- PLEX_TOKEN= # Plex 网页 Url 中的 X-Plex-Token ,通过浏览器F12->网络从请求URL中获取
- MEDIASERVER_SYNC_INTERVAL=1 #媒体服务器同步间隔(小时),默认 6,留空则不同步
认证站点设置
因为某些原因,MoviePilot 首先需要你时某一些 PT 站点的会员,才可进行使用,尽管这样提高了本项目的使用门槛,但这样可以使得本项目更加长久。详细内容可以参考 Movie Pilot 用户认证。
这里以 Audiences
进行举例,我们首先需要获取 uid
与 passkey
,登陆网站后,点击控制面板,即可获得,如下图所示:
获取后进行复制粘贴即可。
environment:
- AUTH_SITE=audiences # 认证站点,支持hhclub/audiences/hddolby/zmpt/freefarm/hdfans/wintersakura/leaves/1ptba/icc2022/iyuu
- AUDIENCES_UID=uid
- AUDIENCES_PASSKEY=passkey
部署 MoviePilot
与上文相同的,将最后的完成版复制粘贴加入 Container Manager,重新构建项目即可。
WEBUI 配置
打开 http://${Synology IP}:3003
,如果出现登录界面,即表明安装成功,如下图所示:
输入上文中设置的账号密码登录后,即可进入主界面,如下图所示:
接下来便可以由你来进行探索这里的设定了,更加详细的关于 WEBUI 内的配置也会在日后在本文内进行更新。
给群晖加一个UPS
UPS——不间断电源,就是一个大型的充电宝,能在停电后给你的机器提供几分钟的供电时间,让你有时间思考一下是不是得换个小区住了。
——五花肉肉。
在一个月时间内家里连续停电两次,都是发生在夜间,停电后又恢复。第一次由于没有给群晖NAS设置停电后来电重启,导致我到了公司却连不上家里的NAS,耽误了些事。那次就决定买一个UPS不间断电源了,结果双十二忘记了,第二次发生在前天,起床后蹲马桶上就下了一单。
我知道现在的UPS都无法在停电后提供很长时间的供电,我想要的是停电后能自动关机,确保数据不会因为自动断电而损坏就行了,在这个基础上UPS的体积越小越好。
首先在群晖官网的兼容性列表里查我的918+兼容的UPS型号,大概考虑购买渠道、价钱、体积、外观几个因素后选定了Santak的TG-BOX 600,到底是不是最适合我的那些条件的,我也不知道,毕竟马桶不能蹲太久。
别废话,先看东西。
包装很简单,附送一条USB数据线和一张说明书就完了。说实话虽然选的最小号的UPS,但实物之大还是超乎我的想象,比我的脚大多了。需要注意的是左侧这一排是不间断电源,而右侧这一排则是普通防雷电源。
电源的顶部开关,保险,两个USB充电口(都说是个充电宝了嘛),还有一个USB通讯口,可以和NAS连接。背部还可以拆卸电池,如果内置电池寿命到了可以自行更换。
连接NAS
电源接入家里的电源插座,NAS电源插入UPS”不间断电源“这一排插座,附赠的USB数据线连接UPS的通讯口和NAS的USB接口就行了。
NAS设置
在群晖系统设置-电源-不断电系统里勾选“启用UPS支持”,应用即可。因为我购买的是群晖兼容性列表里提供的UPS型号,所以没什么其它设置了,如果不是的话可能还要选择UPS的型号。
”Diskstation进入安全模式之前的等待时间”选项是说当停电时不会马上关机,而是达到你设置的时间或者电池用完后才关机。
“设备信息”则可以查看UPS的状况。如下图
另外还要在电源-常规里勾选“电力故障排除后自动重启启动”,这样来电后就会自动开机了。
祝大家玩得开心。
基于[对象存储]的低成本全功能私有云搭建
好久不见啦,上一次更新博文还是 18 年底,算起来竟然有足足一年半都没有写东西了。
写博文就是一个习惯,而环境一发生改变,往往就会让人改变一些习惯,同时也会产生一些新的习惯或者是爱好。对我来说,说着也奇怪,自从研究生以来就突然没有写博客的冲动了,当然,这并不是一件坏事,不过是改变了的习惯而已。这一年来我写写论文,做做工程,闲时用 Python 还做了好几个颇为得意的小开发,Github 和豆瓣都有在活跃,只是期间的一些心得体会(屁,其实就是展示成果)没有发布在我的中原驿站~
之前见到的一些特别优秀的博客却没了更新,现在都能理解了,不过如此~
碎碎念结束!而今天,一种巨想写博客的冲动又涌向心头,因为我 以云存储的成本价搭建了一个全功能的私有云:
- 上传下载不限速,数据中心多地任选
- 能实现文件分享功能,同样不限速
- 能自动创建文件历史备份,方便回溯办公文件
- 支持各平台用客户端管理文件,电脑端甚至还可直接将网盘挂载为一个虚拟磁盘
- 价格按用量计费(存储量、下行流量),我一个月大约花费 6 元,属于是云存储的成本价
相比百度网盘等公有云,本方案在实现同等功能的前提下,每月开销更低,并且数据可靠性更高(不会被百度替换成你懂的,同时数据中心用的也是冗余存储,不会丢数据)
当人们步入互联网时代以来,便早已不在是 1 人 1PC 了,每个人都有不止一台智能设备(工作电脑、笔记本、手机、平板等等)。可贵的并不是这些设备,而是我们的数据,毕竟在云时代,我们依赖的都是云服务,智能设备只是云服务的展示终端而已。
而这时,各个终端上数据的共享就是一个难题。大概谁都有在自己的电脑和手机之间互传文件的经历,或是将工作台式机中的办公文件复制到笔记本上继续办公(之后可能又需要拷回去)。而如果我们的数据在云端统一存放,那上述的一切问题都将很自然地解决。
你可以在手机上一键将 10 分钟前电脑上编辑完的文档发送给老板,再打开平板,惬意地回顾一下 2 年前的今天用手机拍摄的照片。每个人都有不少的私有数据需要整齐地存储,并且随时方便地查阅,这便是云存储带给我们的好处。
如果网盘提供额外的功能,那再好不过,那便是额外的福利:
如果网盘支持挂载到电脑磁盘,那网盘就像是电脑的一个本地磁盘一般,可以直接双击打开某个文件,修改后保存,或者拖拽复制新文件进去。非常方便。
除了本方案外,据我所知坚果云和 OneDrive 支持这种玩法。
同步盘和挂载盘不同,同步盘支持选择本地一个文件夹,与网盘中的一个文件夹保持双向同步的关系。这要求电脑本地有一份云文件的备份,但有的场景下这比挂载盘更好用。
大部分网盘都有此功能,百度云同步盘功能需要开通会员(使用 bypy 工具可以免会员实现)
文件历史版本功能可以在你的文件修改或删除后,自动创建历史备份,在需要的时候查看,并恢复至任意历史版本。办公神器。
离线下载功能可以让帮你挂机下载文件至网盘。一般情况下,要么秒传下载成功,要么便无法离线下载。
视频在线播放功能可以直接在线播放网盘中的视频文件,配合离线下载还是很方便实用的。
这些功能各大网盘基本都是需要付费才能用的。
云存储解决方案
安利完了云存储的好处,再来说说云存储的实现方法。首先百度云这种公有云就算是免费版,其实对大多数人是够用的,对于我来说,至少需要付费的百度云才能满足需求,但一方面除了不想花那笔钱外,用着也不够满意。
简单罗列一下现有网盘的优缺点:
优点 | 缺点 | |
百度云等国内网盘 | 容量大 | 害怕丢数据;免费用户限速且功能缺失 |
OneDrive 等国外网盘 | 数据安全相对更可靠,功能齐全 | 容量小,扩容费用很贵;不限速但速度一般 |
自建 NAS | 可满足一切要求 | 电费设备费花钱也不少;需要公共 IP,否则外网体验很差 |
上表仅仅是简单罗列优缺点,想表达的意思是,云存储想要在 功能、稳定性、成本 上三者平衡,是一个不可能三角。本文基于对象存储的方案,则是在满足功能和稳定性上,最大地压缩了成本。
对象存储能干啥
所以,啥是对象存储?现在最著名最早的对象存储服务 Amazon S3 已经承载了很多很多全球知名的服务,S3 主要用户是应用程序开发商而非终端用户。网上大多数关于对象存储的用法都是给站长用作静态资源分发,而没有人把它当作云盘使用。
S3 的功能:S3 就是一个无限大的存储桶,通过 API 让用户上传和下载文件。下载文件时也可以无需 API,通过 CDN 以 https 的方式在各类终端中进行读取文件。同时,存储桶内的数据可以进行一些自动化处理,比如图片视频转码,以及我们需要的 自动版本控制 功能。
由于提供了 API 用于上传下载,便有开发者开发出了 S3FS,能将 Amazon S3 作为虚拟磁盘挂载在电脑中。最难能可贵的是,由于 S3 已成为事实标准,各家的对象存储基本都兼容 S3 API,也能使用这一套工具。
价格怎样
价格方面,以七牛对象存储为例(应该是国内最便宜的一家),每月 60GB 存储空间的预估费用为¥4.73, 相比花费¥15 充值百度云会员,仅花这 5 块钱我的使用体验甚至还更好。
各家都提供了三种对象的存储级别:标准存储、低频存储、归档存储。数据的安全性都一样高,但存储空间费用依次递减,数据访问费用依次递增。其中低频存储的建议使用场景即为网盘。
推荐腾讯云 COS
提供对象存储的服务商很多,并且都兼容 S3 API,但我强烈推荐大家使用腾讯云 COS: https://cloud.tencent.com/product/cos
当时我选择时,为了网速快,主要考虑中国境内的提供商,七牛云基本是最便宜的提供商。但如果需要支持 文件版本控制 功能,则仅剩下四家:AWS 国内版、阿里云、华为云、腾讯云。我选择了相对最便宜的腾讯云,后来证明这是个正确的选择。
因为腾讯云除了提供 API 外,还为各平台都提供了对应的客户端(Win、iOS、安卓、Mac),完成度相当可以,非常方便,开箱即用!
购买时可以选择最近的数据中心,我家与腾讯云重庆数据中心直线仅 145.8km,所以选择了他们的重庆机房。图中也可以看到,上传速度为每秒 π MB,下载速度为每秒 10.24MB,还是挺满意的。(这俩数字也是绝了)
基于对象存储的私有云搭建
其实介绍完对象存储是什么之后,如何把他当作私有云来使用,那便是很自然的事情了:使用 API 或者 App,或者网页上传文件,再在合适的时候使用同样的方式下载你需要的文件。
唯一还需要介绍一下的是对存储桶的一些额外配置,以及挂载为本地磁盘的方法。
存储桶配置
腾讯云对象存储默认未开启 文件版本控制 功能,需要我们手动开通。
除此之外,我还按照下图设置了一个简单的文件规则:
挂载为本地磁盘
在 Linux/Mac 上挂载网盘可以使用腾讯云 COSFS 工具,其他家也都会有提供类似的官方工具,或者使用来自 Amazon S3 的 S3FS。
而如果在 Windows 上挂载硬盘,可以使用针对 S3 开发的 Rclone,完美兼容腾讯云 COS,同时该工具还可以将 SFTP、OneDrive、WebDAV 等等各种网盘挂载为本地盘,很厉害。使用该工具前还需要安装 WinFsp。
我的挂载命令为:rclone.exe mount cos:f-1251515384/ O: --vfs-cache-mode full --attr-timeout 1m
,即可将网盘挂载为本地的 O 盘:
然后有一个很关键的设置如图,如果不这么设置,在图片多的文件夹内 Windows 会自动加载缩略图,在音乐多的文件夹内,会自动读取音乐的 meta 标签,瞬间耗费很多网盘流量,还会造成电脑卡顿。
关于进程保活
Rclone 在前台终端运行之后,我们需要保活,以及在重启之后自动运行。
NSSM 可以便捷地创建一个 Windows 服务,保证该进程在后台运行。不过我用的是 PM2,PM2 在 Windows 上运行会有一些坑,这里就不展开叙述了。
总结
介绍了云存储对普通人的意义,然后提出了使用对象存储这个廉价、简单,且扩展性优秀的私人云方案。可能对于极客而言,这将是自己搭建 NAS 之外的另一条可选的道路。
2 个月后的补充
我的存储量为 22GB,正常使用 2 个月后总开销 7.52 元,确实便宜。速度和稳定性也很满意。
但是,用于 Windows 上挂载网盘的工具 RClone 却是一个大坑:
- 文件名中不支持 ‘:’ 等几个特定的中文字符。
- 挂载盘中使用 Office 系列软件会发生异常,保存时必定会丢文件。用 Chrome 直接下载文件到挂载盘时,也丢失过文件。
问题 1 不算严重,重命名就可以了。而问题 2 令人难受,初步判断是 Office 本身的不兼容导致。但是我发现,使用 webdav 方式挂载的网盘并不存在此问题。
于是,我使用了 Python 包 mar10/wsgidav 将本地挂载好的 Rclone 挂载盘转换为 webdav 协议,监听在 localhost:8080。再使用 Windows 连接本地的 webdav 服务器(这里需要修改一下注册表,否则只支持 HTTPS),wsgidav 号称专门优化并支持了 Office 在线编辑,事实确实如此,Office 工作正常了。
多套了一层协议转换,可能不太优雅。 这里分享一下我最近发现的一个好项目:Cloudreve( 支持多家云存储的云盘系统 ),可以将对象存储作为存储源,提供 Web 访问界面和 WebDaV 接口。并且由 go 语言开发,运行在服务器上既是自己的私有云,运行在本地即充当 S3->webdav 的客户端(代替上面的 rclone+wsgidav 方案),甚至还可以运行在 Android 手机上。
评论区有人留言 rclone serve webdav
可以直接挂载为 webdav,然后再在文件管理器中直接添加该 webdav 服务地址即可,完美解决该问题。