NAS 磁盘文件系统如何设计

69 天前
ZGeek  ZGeek

现状

  1. 4 块 4TB HDD 硬盘
  2. 1 块 512GB SSD 硬盘
  3. 64GB 内存(没有 ECC )

目的

  1. 能够实现快照
  2. 能够自动检测文件错误并修复
  3. 能够使用 SSD 作为缓存,加速读写

前两条为强需求

场景

  1. 家庭用户,资料数据、照片数据不期望损坏,期望不丢失
  2. 电影随意,可以随时丢失
  3. 读写频次并不高
  4. 可以接收因为缓存损坏导致的 1-3 天数据丢失(近期数据或照片都在电脑或手机上有备份,不怕丢失近期数据)

方案

方案 1

raid1->bcache->btrfs

  1. 2 块 HDD 组 raid1(使用 mdadm) -> md0
  2. 1 块 SSD 和 md0 结合使用 bacache 创建缓存后的块设备 -> bcache0
  3. 把 bcache0 格式化为 btrfs

缺点:

  1. 数据损坏的时候不知道哪一块上的数据是好的,而且因为 raid1 处于底层,brtfs 也无法进行数据修复

  2. bcache 设备损坏不清楚会不会导致整个 btrfs 磁盘损坏

方案 2

bcache->btrfs+raid1

  1. 1 块 HDD 和 1/2 块 SSD 组缓存后的块设备 -> bcache0
  2. 1 块 HDD 和 1/2 块 SSD 组缓存后的块设备 -> bcache1
  3. bcache0 和 bcache1 使用 brtfs 组成 raid1

缺点:

  1. bcache 设备损坏不清楚会不会导致整个 btrfs 磁盘损坏
  2. 缓存盘浪费,写入的是一样的数据,但是却缓存了两份

方案 3

raid5(mdadm) -> bcache -> btrfs

大家经常说 raid5 重建很痛苦,而且不一定成功,有些害怕

方案 4

ZFS

缺点:资源消耗大,磁盘性能下降严重(听说的,不清楚实际情况)

方案 5

LVM ,因为其缓存也是工作在块设备这一层的,和方案 1 和 2 类似,就不考虑了

问题:

各位朋友什么建议?大家一般怎么规划自己的文件系统?

3631 次点击
所在节点   NAS  NAS
51 条回复
kiracyan
kiracyan
69 天前
SSD 缓存 2 块 HDD 做普通数据盘 2 块 HDD 做 raid 1 普通盘可以定期备份到 raid1 里
waifu2x
waifu2x
69 天前
目前手持 zfs-raidz1 4X8T, 性能下降还行, 快照很爽, 数据损坏暂时未遇到
其他硬盘也基本 all in zfs 了, zfs 性能下降是大文件会被切成块, 然后碎片又无法整理, 不在乎大文件高速顺序写, 问题不大
dalaoshu25
dalaoshu25
69 天前
4 块 4T 硬盘,重建一次 raid5 ,我用时从 12 小时到 22 小时。重点是要用功率余量大性能可靠的电源。很多山寨和自己组装存储服务器的玩家都不舍得在电源上多花点儿钱。
stort
stort
69 天前
既然考虑了 raid5 不如试试 zfs 的 raidz ,用着很舒服,不开 dedup 消耗也没那么大,快照和擦洗很方便,也可以添加 vdev 当缓存(虽然单 ssd 做缓存加速读写可能不稳
yulgang
yulgang
69 天前
没带缓存的阵列卡就别用 raid5 了,性能会很差

u 盘里塞个 freenas ,zfs 就可以
Paulownia
69 天前
我是 3 块 2t 盘做的 zfs raidz1 ,外加一 480 的 ssd 走了缓存,所有都是默认配置,然后发现一个奇怪的现象就是通过 dd 测试但块硬盘的速率大概是 200M 左右,然后 zfs 只有 100M 以下,甚至偶尔 50-60M ,结果运行了一段时间之后,发现 zfs 的 dd 测试速率达到了 200M 。。。也不知道是为啥。。。反正用做挂 pt ,smb 共享电影,倒也没啥特别影响体验的,就再也没怎么关注速率了。
yolyzhu
69 天前
ZFS 组镜像条带就完事了,SSD 缓存都不需要。
msg7086
69 天前
zfs 就完事了,资源消耗?磁盘性能?没听说过。
YsHaNg
69 天前
群晖的 btrfs+md+lvm 倒是可以互相引用冗余和 checksum 修复错误
ashong
69 天前
A 日常存储
B+C+D snapraid, 定时同步
yolyzhu
69 天前
@msg7086 搞个 ZFS 用用,听说有个屁用。
ntedshen
69 天前
哥们,你这强需求基本就把范围锁死了,还能怎么选。。。

你在 v2 上问这个问题那就在 v2 搜
site:v2ex.com/t btrfs
前五行两个丢数据一个建议观望,这你真敢用?

虽然我不用 zfs 而且我对 zfs 的刻板印象停留在某些知名油管主被搞炸自己主存储的阶段。。。
但是你没得选了。。。
MoonLin
69 天前
都用 bcache 了为什么不直接用 bcachefs 直接组建?
kaedeair
69 天前
snapraid+云盘同步?
ZGeek
69 天前
@YsHaNg #9 并不行,我的数据最初是放在群晖里的,raid1+brtfs ,结果有张照片坏了
shihira
69 天前
我已经实现好并正在用的方案,可参考一下:

nvme0: SSD ext4
zpool: 4xHDD zfs
mergerfs: 2xHDD mergerfs over ext4

tier0: (nvme0) 临时文件,通常是 Cache 、BT 下载途中的文件
tier1: (nvme0/zpool) 需要经常快速读写的重要文件,比如代码和配置文件,定期备份到 zpool
tier2: (zpool) 收集起来不太容易的资源文件、比较喜欢的音乐电影、日剧录像
tier3: (zpool/mergerfs) 重要但不太需要经常读写的大文件,比如照片录像,定期备份到 mergerfs
tier4: (mergerfs) 非常容易重新下载的东西,大热门电影电视剧

- zpool 每个季度要做 scrub
- 大热门影视真的没必要做冗余,留个种放在 tier1 就好了
- 存在 mergerfs 里,任何一个盘坏了都不会损失全部数据,只会损失坏掉哪个盘的数据。
mapleincode
69 天前
我发现你们都研究的好深....
先说明我认为,一旦数据损坏,大概率可能无法被发现,这里前提,损坏是指文件被修改。也就是你在复制或者移动文件时,文件本身已经被损坏了,这个我认为是软级别(系统)的问题而不是硬级别(盘格式)的问题。

我有两个常用的 nas ,一个是基于 raid5 。一个则全部是 basic ,对,也就是啥也不干,裸奔。basic 常年开机,用于日常数据,而 raid5 的 nas 单纯用于备份,备份之后关机。
我定期会对同步的照片进行备份,随我心情,可能是几周或者半年。而为了解决,在备份过程中,文件已经损坏的情况,无论是在 copy 前还是 copy 后的损坏。于是我买了几百块钱的光盘,打好压缩包,定期把图片备份到光盘。
对,我认为解决文件损坏的办法,只有备份,而且还不能是基于文件变动检测的实时备份,因为你被污染的源数据也会同步污染备份数据。

当然我的方案也可能存在我一起床,发现数据都没了的惨状,所以还得辅佐其他类型的实时备份或者数据校验什么的。
多备份到多个介质才是最安全的做法。
YsHaNg
69 天前
ragnaroks
69 天前
各种 raid 、fs 都使用过最少半年,最终直接挂上去,比如下载就挂 /dev/sda => /volume/downloads ,然后用 timeshift 定时备份重要数据到网盘(大部分数据都可以重建或重新下载),目前除了一次地震的时候坏了 1 块盘暂未出现其它问题
ladypxy
69 天前
首先,肯定要可以支持快照
其次,要软 Raid 而不是硬件 Raid

那么,剩下的选择就只有 ZFS 和 btrfs
个人的话会选择 ZFS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1105508

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX