我有以下情况:
- 对于 1-2 TB 大小的数据集,需要存储 1 个原件 + 1 个副本
- 需要使用消费级 SATA 硬盘,1 个为原件,1 个为副本
- 需要存储50+个这样的数据集
- 数据集很少被访问/更改,因此驱动器大部分会离线存储在盒子中
- 当需要访问/更改数据集时,其驱动器将使用热插拔 SATA 硬盘架连接到服务器(例如)
- 服务器需要通过网络共享文件夹、CIFS/SMB 公开驱动器,并且最好运行 Windows
问题:如何以最可靠和最方便的方式维护两个驱动器之间的镜像?
对我来说不起作用的是:
- 没有硬件 RAID1。控制器中存在单点故障是不可接受的,而且我怀疑任何 RAID 控制器都无法无缝支持我的使用模式。
- 没有软件 RAID1。据我所知,热插拔是软件 RAID 的一个问题。
答案1
由于“Windows”部分不是必需的,我敢建议使用 ZFS。
它将在 Linux(即使性能还不够出色……)或 FreeBSD 或 IllumOS 上运行
我在家里处理原始照片的工作流程非常相似,我用的是 USB3 记忆棒,但想法是一样的
1)创建镜像zpool
#sudo zpool status zmirrusb
pool: zmirrusb
state: ONLINE
scan: resilvered 18.4M in 8h1m with 0 errors on Sun Jul 28 23:55:06 2013
config:
NAME STATE READ WRITE CKSUM
zmirrusb ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
usb-SanDisk_Cruzer_Fit_4C532000060405101492-0:0 ONLINE 0 0 0
usb-SanDisk_Cruzer_Fit_4C532000000405100343-0:0 ONLINE 0 0 0
2)将您的数据复制到其中
3)导出池
# zpool export zmirrusb
4)断开存储并将其存储在安全的地方
5)当您需要访问数据时,重新连接存储
6)导入池并挂载文件系统
# zpool import zmirrusb
# zfs mount -a
现在您可以按照自己喜欢的方式导出卷。
Zfs 支持通过 Samba (CIFS) 导出,我自己从未尝试过,但类似这样的内容可以让您了解
7)通过 samba 导出
#zfs list zmirrusb
NAME USED AVAIL REFER MOUNTPOINT
zmirrusb 19.1G 10.2G 5.84G /zmirrusb
zmirrusb/stuff 68.2M 10.2G 1.13M /zmirrusb/stuff
#zfs set sharesmb=on zmirrusb/stuff
8)浏览网络。
请注意,根据您需要的 SMB 共享功能,您可能必须编辑 samba 配置本身,zfs 只会使特定的文件系统可用,但不会处理诸如身份验证和授权等其他事项。
您的要求似乎非常严格,我想您正试图将预算保持在尽可能低的水平,但您是否考虑过使用不需要太多手动工作的不同类型的存储?
对于这种归档目的,基于对象的存储服务似乎是完美的选择,以下是几个示例:
集群文件系统- HA 网络存储,具有开箱即用通过 SMB/NFS 导出的功能。
迅速- 类似 Openstack S3 的服务,可通过 HTTP API 访问(以及数百万个基于 fuse 的项目使其像 FS 一样工作)
或者,如果你真的可以预测数据的使用模式,尝试看看AWS Glacier这非常便宜,但不能让您在需要时立即访问数据,并且需要您在需要访问时重新下载数据。
答案2
通常,热插拔硬盘支架用于偶然维护目的,并不适用于日常使用。
我的建议是使用外部 USB 驱动器。这样可以为磁盘提供额外的保护,并且连接器专为反复拔出和插入而设计。此外,它不依赖于“奇特”的硬件,从而使您的解决方案更具前瞻性。
使用 USB-3,限制因素将是实际磁盘的读写性能,而不是 USB 链接,您应该获得与热插拔 SATA 端口类似的性能。
无论如何,保持两个数据集同步的可靠方法是rsync
。将一个磁盘暴露给网络,并将其同步到其备份。