明确需求
- 无公网
IPv4
,仅公网IPv6
,需求外网拜访 - 现在存储需求不强,且预算有限,硬盘组合是
10t 4t 4t 2t
,需求在确保冗余的同时供给灵活的扩展性 - 缓存加快,首要针对机械硬盘的小文件读写优化
- 手机文件同步,首要针对手机体系备份和录音
- 相册同步
- 需求具备根本的网络安全保障
- 按需扩展影音功用
解决方案
每条对应于上一节的需求:
- 运用
DDNS
,外网运用域名拜访即可 - 存储上拆分
10t
的硬盘,4t 6t
组合作为校验盘,考虑到snapraid
的1
拖4
,可暂时先只用6t
做校验盘,4t
校验盘当数据盘运用,此时的数据盘为4t 4t 4t 2t
,其中一个4t
是10t
分出来的,本人情况是2t
的盘检测有错误,随时挂掉。这个分出来的4t
虽然有冗余可是和校验盘是同一个物理盘,冗余功用是无法确保的,禁止存放重要数据 - 缓存加快运用
bcache
,随意加了一块120G
的固态作为缓存盘 - 手机文件同步运用
nextcloud
,不必seafile
是由于后者免费版没有查找功用至于阉割这种功用吗?这么抠搜 - 相册同步运用
immich
,现在运用开发活泼,更新较快,主张锁死版别运用 - 运用拜访层面运用防火墙过滤拜访源,体系的
ssh
运用key
登录 - 影音功用首要为
jellyfin
或许挑选emby
上述除了bcache
和snapraid
是体系层面的运用需求直接装置,其他运用悉数运用docker
装置
存储装备
-
磁盘装备
-
LVM
拆分10t
硬盘(sdh)# 创立 pv,必须在创立 vg 前 sudo pvcreate /dev/sdh # 运用已有的 pv 创立 vg sudo vgcreate nas-vg /dev/sdh # 在 vg 中 创立 lv,巨细为 40%,即 4t sudo lvcreate -n sp1 -l 40%FREE nas-vg # 在 vg 中 创立 lv,运用悉数的剩余空间,即 6t sudo lvcreate -n sp2 -l 100%FREE nas-vg
操作完成后磁盘存储便是
6t 4t 4t 4t 2t
-
-
bcache
-
装备
bcache
# 装置 bcache sudo apt install bcache-tools # 铲除原有磁盘,包含缓存盘和后端盘 sudo wipefs -a /dev/sdb # 缓存盘 sudo wipefs -a /dev/sdc # 后端盘 4t sudo wipefs -a /dev/sdd # 后端盘 4t sudo wipefs -a /dev/sde # 后端盘 2t sudo wipefs -a /dev/mapper/nas--vg-sp1 # 后端盘 4t # 创立关联 sudo make-bcache -C /dev/sdb -B /dev/sdc /dev/sdd /dev/sde /dev/mapper/nas-vg--sp1
上述操作履行完成后能够运用
sudo bcache-super-show /dev/sdc
查看各个盘,每个后端盘的cset.uuid
项都是/dev/sdb
的cset.uuid
即表明成功 -
磁盘分区
fdisk
无法对大于2t
的磁盘分区,因而一致运用parted
分区sudo parted /dev/mapper/nas--vg-sp2 # print 查看分区 mklabel gpt mkpart # start? 1M, end? 100%
分区后树立文件体系
sudo mkfs.xfs /dev/mapper/nas--vg-sp2
其他做了缓存加快的盘直接对
/dev/bcache{0}
树立文件体系即可 -
优化
bcache
bcache{0}
替换为实践的设备,能够运用lsblk
查看,cset.uuid
运用sudo bcache-super-show /dev/sdb
得到# 回写战略 sudo bash -c 'echo writeback > /sys/block/bcache{0}/bcache/cache_mode' # Let bcache completely sync with the hard drive,同步战略 sudo bash -c "echo 0 > /sys/block/bcache{0}/bcache/writeback_percent" # Don't let sequential IO bypass the cache,即所有读写都过缓存盘 # 能够更改为其他数值,默许4M,留意,只能传数字,单位是Byte,4M便是4194304 sudo bash -c "echo 0 > /sys/block/bcache{0}/bcache/sequential_cutoff" # 封闭拥塞控制,指定缓存盘的 cset.uuid,这个是检测读写推迟,大于该值就旁路缓存盘直写 sudo bash -c "echo 0 > /sys/fs/bcache/{cset.uuid}/congested_read_threshold_us" sudo bash -c "echo 0 > /sys/fs/bcache/{cset.uuid}/congested_write_threshold_us"
-
验证
bcache
# 先装置 fio sudo apt install fio # 随机读写 # 第一次履行时没有区别,由于没有缓存,第一次今后的成果才是有缓存加快后的速率 # 机械盘的4k随机读写大概在 300KB/s 左右,4k次序读写大概 1MB/s 左右 # bcache 加快后,读写依据固态功用不同有差异, # 在废物固态上 4k 随机将近 5MB/s,4k 次序大概 6MB/s # 4k 随机读写 sudo fio -filename=/dev/bcache3 -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=4k -size=5G -numjobs=30 -runtime=8 -group_reporting -allow_mounted_write=1 -name=mytest # 4k 次序读写 sudo fio -filename=/dev/bcache3 -direct=1 -iodepth 1 -thread -rw=rw -ioengine=psync -bs=4k -size=5G -numjobs=30 -runtime=8 -group_reporting -allow_mounted_write=1 -name=mytest # 4M 随机读写,参阅含义不大,默许的bcache在这个巨细就旁路了,除非封闭了 sequential_cutoff sudo fio -filename=/dev/bcache3 -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=4m -size=5G -numjobs=30 -runtime=8 -group_reporting -allow_mounted_write=1 -name=mytest # 4k 次序读写,参阅含义不大,默许的bcache在这个巨细就旁路了,除非封闭了 sequential_cutoff sudo fio -filename=/dev/bcache3 -direct=1 -iodepth 1 -thread -rw=rw -ioengine=psync -bs=4m -size=5G -numjobs=30 -runtime=8 -group_reporting -allow_mounted_write=1 -name=mytest
-
-
snapraid
由于bcache
的装备需求铲除分区,假如snapraid
在bcache
的基层,则每次增加磁盘后都需求铲除分区,与预期不符,因而snapraid
只能在bcache
上层装备。- 装置
# ubuntu 20.04 apt 没法直接装置,ppa 源又连不上,只能手动装置 sudo apt install -y g make wget https://mirror.ghproxy.com/github.com/amadvance/snapraid/releases/download/v12.2/snapraid-12.2.tar.gz tar xf snapraid-12.2.tar.gz cd snapraid-12.2 ./configure make make check sudo make install
-
snapraid
装备# 修改装备文件 # sudo touch /etc/snapraid.conf # sync过程主动保存Parity,单位是GB,感觉没什么必要 autosave 0 exclude *.unrecoverable exclude lost found/ exclude aquota.user exclude aquota.group exclude /tmp/ exclude .content exclude *.bak exclude /snapraid.conf* exclude thumbs/ # 以实践挂载途径为准,这儿运用DISK{A,B,C,D,E}指代 parity DISKA/snapraid.parity content DISKB/snapraid.content content DISKC/snapraid.content content DISKD/snapraid.content content DISKE/snapraid.content data d1 DISKB data d2 DISKC data d3 DISKD data d4 DISKE
装备完成后履行
sudo snapraid sync
即可开端第一次同步校验
- 装置
-
mergerfs
装备完成后一致挂载途径,方便文件和途径的管理。# 装置 mergerfs sudo apt install mergerfs # 磁盘挂载点,现已挂载的磁盘可不做处理,但主张途径有规则性 sudo mkdir /ponit2mountpoint/bcache{0,1,2,3} sudo mkdir /MFS # 修改挂载装备文件,实现开机主动挂载 # sudo nano /etc/fstab # 留意:以下内容要在 /swap.img 所在的行之后 # ---fstab--start--- # <file systems> <dir> <type> <options> <dump> <pass> # 要挂载设备 方位 类型 默许即可 备份 fsk查看 /dev/bcache0 /srv/bcache0 xfs defaults /dev/bcache1 /srv/bcache1 xfs defaults /dev/bcache2 /srv/bcache2 xfs defaults /dev/bcache3 /srv/bcache3 xfs defaults # 分开挂载无效 /srv/bcache* /data fuse.mergerfs defaults,allow_other,minfreespace=10G,fsname=mergerfs,ignorepponrename=true 0 0 # ---fstab--end--- sudo mount -a # 更新挂载 df -TH # 查看成果 # defaults:敞开以下 FUSE 参数以提升功用:atomic_o_trunc, auto_cache, big_writes, default_permissions, splice_move, splice_read, splice_write # allow_other:答应挂载者以外的用户拜访 FUSE。你可能需求修改 /etc/fuse.conf来答应这一选项 # use_ino:运用 mergerfs 而不是 libfuse 供给的 inode,使硬链接的文件 inode 一致 # minfreespace=10G:挑选往哪个基层文件体系写文件时,越过剩余空间低于 10G 的文件体系 # fsname=mergerfs:设置文件体系的名称为 mergerfs,也能够自定义其他名字如mount,df等 # ignorepponrename=true:重命名文件时,不再遵守途径保存准则,保持本来的存储途径
与
snapraid
一起运用时,多个盘有同名文件snapraid.content
,测试发现同名文件的战略为:-
mergerfs
途径的文件以磁盘加载次序为准,显现的是第一个加载磁盘的文件,修改其他盘的同名文件,不会产生影响 -
mergerfs
显现第一个加载磁盘的文件,在原始盘上删去该文件后,mergergs
中的文件列表不会更新,依然为删去的文件内容 - 经过上面的删去文件操作,打开
mergerfs
途径下的文件,修改并保存,内容会覆盖到位于次序加载的下一个磁盘上的同名文件上
-
运用装备
运用悉数运用docker
,主打一个方便省心
-
docker
装置curl -fsSL https://get.docker.com -o install.sh sed -i 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' install.sh sudo bash install.sh
免
root
装备sudo chown root:docker /var/run/docker.sock sudo groupadd docker # 增加docker用户组,装置docker后一般都现已存在 sudo gpasswd -a $USER docker # 将登陆用户加入到docker用户组中 newgrp docker # 更新用户组 docker ps # 测试docker指令是否能够正常运用
-
docker-compose
装置
版别不能太旧,否则后续假如需求nvidia
硬解环境时会无法启动sudo curl -L "https://mirror.ghproxy.com/github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose sudo chmod x /usr/bin/docker-compose
-
docker
装备
修改/etc/docker/daemon.json
文件,没有则新建{ "experimental": true, "ip6tables": true, "log-opts": { "max-size": "2m" }, "registry-mirrors": [ "https://docker.nju.edu.cn/" ] }
日志约束
2M
巨细,敞开IPv6
,镜像拉取运用南京大学镜像站加快,装备完后sudo systemctl restart docker
重启服务。敞开IPv6
,首要是后期假如运用磁力相关的镜像下载东西时能够运用。 -
DDNS
实现外网域名拜访
镜像:newfuture/ddns
docker-compose
装备:version: "3.7" services: ddns: image: newfuture/ddns@sha256:ac3a3942023ccc4f0d16df89ca945161caeec10ab3fd0291481119170ac7a6ea container_name: ddns restart: always volumes: - ${DDNS_CONFIG}:/config.json environment: Ali_Key: ${Ali_Key} Ali_Secret: ${Ali_Secret} network_mode: host
在
docker-compose.yml
目录下新建.env
文件,增加变量# 指向一个装备文件,该装备文件被newfuture/ddns镜像需求 DDNS_CONFIG=path/to/config.json
config.json
装备概况:{ "$schema": "https://ddns.newfuture.cc/schema/v2.8.json", "id": "********", "token": "********", "dns": "alidns", "ipv4": [], "ipv6": ["www.example.com","example.com"], "index4": 0, "index6": "default", "ttl": null, "proxy": null, "debug": false }
上述文件依据实践情况填写,且
id
和token
较敏感,需求当心保存。更多装备概况能够参阅官方说明。
准备完成后在docker-compose.yml
目录下履行docker-compose up -d
即可。
拜访验证:- 首要
docker logs ddns
查看日志,查看是否现已成功完成dns
解析,同时查看域名供给商比方阿里云中dns
是否现已有对应的dns
记载 - 在服务器不由
ping
的前提下,在外网ping
域名,ping
通即可,由于各个dns
服务器之间数据改写有推迟,dns
解析记载不是当即生效,需求稍等片刻。
- 首要
安全装备
每个人对安全的需求不同,这儿安全装备仅供参阅。
-
ssh
安全touch ~/.ssh/authorized_keys # 修改ssh装备 # sudo vi /etc/ssh/sshd_config PubKeyAuthentication yes // 撤销注释,假如没有则新加 AuthorizedKeysFile .ssh/authorized_keys // 撤销注释,假如没有则新加 PasswordAuthentication no // 撤销注释,假如没有则新加 # 修改文件权限,重要 chmod 700 -R ~/.ssh/ chmod 600 ~/.ssh/authorized_keys # 重启ssh systemctl restart sshd
将需求连接的主机公钥增加至
authorized_keys
即可 - 运用安全
由于是纯IPv6
环境,约束拜访源即可,IPv6
的拜访源有必定规则,这儿供给部分地址特征电信大众宽带 240e:300::/24、240e:b00::/24 电信LTE网络 240e:400::/24 联通大众宽带 2408:8200::/23 联通LTE网络 2408:8400::/24 移动大众宽带 2409:8a00::/24 移动LTE网络 2409:8900::/24
在防火墙上仅放行上述
ip
的tcp
协议即可,icmp
按需放行。
假如是ip6tables
,以下指令仅供参阅:sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo ip6tables -A INPUT -s 240e:300::/24,240e:b00::/24 -j ACCEPT -m comment --comment "电信宽带" sudo ip6tables -A INPUT -s 240e:400::/24 -j ACCEPT -m comment --comment "电信LTE" sudo ip6tables -A INPUT -s 2408:8200::/24 -j ACCEPT -m comment --comment "联通宽带" sudo ip6tables -A INPUT -s 2408:8400::/24 -j ACCEPT -m comment --comment "联通LTE" sudo ip6tables -A INPUT -s 2409:8a00::/24 -j ACCEPT -m comment --comment "移动宽带" sudo ip6tables -A INPUT -s 2409:8900::/24 -j ACCEPT -m comment --comment "移动LTE" sudo ip6tables -A INPUT -j DROP
完工
第1期装备到此结束,磁盘装备、缓存装备、挂载装备、运用装备和安全装备都在本期完成装备。NAS
的根底现已搭建完成,后续会持续添砖加瓦,将NAS
该有的功用都增加进去。本期的内容后续假如发现有遗失,会持续补充。下一期开端根本便是运用的装备了,包含需求的4.5.7点。本期由于需求先将根底功用做好,因而这几点需求的装备分到下一期。