我有一个新的 USB 外置 2TB 硬盘,想将其用作我的家庭服务器的备份。
我的愿望是:
- 全盘加密(磁盘将存储在异地)
- 预防比特腐烂
目前,我正在使用一个较旧的 320GB 外部磁盘,该磁盘具有 TrueCrypt 分区级加密功能。但由于这不提供位腐烂保护,而且 TrueCrypt 已被弃用,所以我想尝试其他方法。
我的服务器运行 Ubuntu Server 14.04.3 LTS,并具有 ECC 内存和 RAID 1 中的 2x 3TB 磁盘。
对于加密部分,使用 LUKS 可能是最好的选择,对吗?
但是,当涉及到处理位衰减时,事情就变得有点复杂了。至少对于单磁盘配置来说是这样。一种选择是创建 2 个相同的分区并创建 RAID 1 并定期进行清理。但是这种解决方案在同一个驱动器上看起来有点奇怪。
btrfs 是一个选项吗?是否可以为单驱动器配置添加冗余?
我不介意牺牲一半的存储空间来实现冗余。性能损失对我来说也不是问题。
答案1
鉴于您已具备所有基本先决条件,尤其是 ECC RAM,我认为 ZFS(通过Linux 上的 ZFS实施)可能是一个可用的选项。
与借鉴了 ZFS 大量设计理念的 btrfs 不同,ZFS 是一个久经考验的(卷管理器和)文件系统。当然,Linux 端口有一些粗糙之处,这些缺陷会随着时间的推移逐渐得到解决,但代码和设计已经在相当多的真实故障场景中经过了测试。
您可以将 ZFS 与镜像配置中的两个独立分区一起使用,也copies=2
可以与池的根文件系统上的一个分区和设置一起使用。它们的磁盘空间和 I/O 性能开销相似。随着您的需求随时间变化,这两种方式都允许您迁移到更大的磁盘或多磁盘配置。您可以使用 raidz vdev(具有不同级别的冗余:一个、两个或三个磁盘),但如果您想要更改冗余级别,这会带来问题。
我建议认真考虑在 LUKS 上运行 ZFS。
相反的做法(在 ZFS 上运行 LUKS)也是可行的,但要复杂得多。您还可以在未加密的 ZFS 上运行类似 ecryptfs 的东西,但这可能会泄露大量文件系统元数据。
换句话说,创建 LUKS 容器(每个驱动器或分区一个),然后使用这些容器创建 ZFS 池。在大多数情况下,在 LUKS 上运行 ZFS 应该足以防止离线攻击者,尽管这对在线攻击者来说不会造成太大的阻碍。这是否是一个问题取决于您的威胁模型,但对于异地备份,离线访问通常是更重要的考虑方面。
将两个单独的分区作为不同的 LUKS 容器运行应该有助于防止 LUKS 标头损坏导致两个副本都无法访问,但其他方法也可以做到这一点(例如,安全存储的 LUKS 标头备份)。为每个驱动器运行单个分区 LUKS 容器将允许 ZFS 决定将文件系统元数据存储在不同的冗余位置。
如果选择copies=2
,请确保在创建池时立即设置。换句话说,您需要类似以下内容的内容:
cryptsetup luksFormat /dev/sdx
cryptsetup luksOpen /dev/sdx sdx-crypt
zpool create -O copies=2 tank /dev/mapper/sdx-crypt
并不是
cryptsetup luksFormat /dev/sdx
cryptsetup luksOpen /dev/sdx sdx-crypt
zpool create tank /dev/mapper/sdx-crypt
zfs set copies=2 tank
因为后者直到元数据被重写时才会完全复制根文件系统元数据。
请注意,与任何写时复制文件系统一样,当磁盘利用率保持在 75-80% 以下时,ZFS 表现最佳,并且随着时间的推移,您应该会发现碎片化现象。对于备份来说,这应该不是主要问题。
答案2
Par2 是一款制作奇偶校验文件的成熟软件选项。您可以将其配置为允许并设置文件丢失但仍可恢复的百分比。[1][2] 例如,30% 冗余:
par2 c -r30 file-to-protect
LUKS 需要良好的配置以确保安全。aes-xts-plain64:sha256 或稍好一些的 PBKDF2-sha512 加上高质量的随机 256/512 位密钥是标准推荐 [3]
[1]https://en.wikipedia.org/wiki/Parchive
[2]https://github.com/Parchive/par2cmdline
[3]https://security.stackexchange.com/questions/40208/recommended-options-for-luks-cryptsetup
[4] Ubuntu 默认的全盘加密有多安全?
https://security.stackexchange.com/questions/39306/how-secure-is-ubuntus-default-full-disk-encryption
PS SUN 为企业数据设计的加密 ZFS 非常棒,但它只适用于 Solaris。Linux 上的 ZFS 仅支持 ZFS + LUKS,不支持原生加密。ZFS Scrub 检查 bitrot,通常每天为消费级驱动器配置。您甚至可以执行 ZFS 三向镜像以实现极高的数据安全性。 https://help.ubuntu.com/community/encryptedZfs