Mac*_*wic 5 raid zfs lvm mdadm
我有一个带有 2 个 3TB 驱动器的家庭媒体服务器。它目前使用 mdraid (1)、LVM 和 EXT4 进行设置。设置是使用 ncurses Ubuntu Server 安装程序完成的。
目标
将设置转换为使用 ZFS (RAIDZ) 并添加第三个 3TB 驱动器。我想启用即时压缩和重复数据删除。转换不需要重新安装 Ubuntu 和所有软件包。应该没有数据丢失(当然除非磁盘在此过程中崩溃)。
我该怎么做呢?
额外的问题,使用 btrfs 这样做是否更好,因为据我所知,我可以用一个磁盘初始化阵列,复制数据,然后用 btrfs 添加第二个磁盘,而不是用 zfs?
我的/proc/mdstat:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md4 : active raid1 sdb2[1] sda2[0]
2930070069 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
我的 pvs -v
Scanning for physical volume names
PV VG Fmt Attr PSize PFree DevSize PV UUID
/dev/md4 Data lvm2 a- 2,73t 0 2,73t MlZlTJ-UWGx-lNes-FJap-eEJh-MNIP-XekvvS
Run Code Online (Sandbox Code Playgroud)
我的 lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
Data Data -wi-ao 2,68t /dev/md4(13850)
Swap Data -wi-ao 7,54g /dev/md4(11920)
Ubuntu Data -wi-ao 46,56g /dev/md4(0)
Run Code Online (Sandbox Code Playgroud)
短的:
我认为 ext4 没有就地转换为 ZFS。
对于媒体服务器,我建议使用SnapRAID
编辑:
在深入讨论之前: 请记住将 ECC RAM 与 ZFS 一起使用。 SnapRAID 的要求并不高,因为它在现有文件系统之上的用户空间中运行,因此损坏的 RAM 应该只会影响奇偶校验驱动器,而不会影响其他现有数据。
OTOH 我的大多数 ZFS 机器都没有 ECC RAM。
- **在这种情况下启用 Linux 内核 RAM 检查!
- Debian:
GRUB_CMDLINE_LINUX_DEFAULT="memtest=17"
或类似的/etc/default/grub
- 到目前为止,我还没有遇到过不好的经历,即使有时 NonECC-RAM 会出现故障。
- 具有非 ECC 的 ZFS 非常危险,因为 ZFS 是CoW,因此如果错误的 RAM 区域被击中,它可能会杀死 ZFS 顶级结构,包括其冗余,而不会被注意到,然后 ZFS 上的所有数据都会立即损坏。
更长:
ZFS使用了非常独特、非常特殊的内部结构,与ext4的结构不太契合。(阅读:也许有人可以在某些 ext4 之上创建一些人工 ZFS 结构,但我怀疑这种转换是否快速、可靠且易于使用。)
然而,SnapRAID 不需要您转换任何内容。只需将它与(几乎)任何现有文件系统一起使用,即可为那里的文件创建冗余,以便您可以在出现驱动器故障或(静默)损坏时检查和恢复文件。
优点缺点:
如果 SnapRAID 必须为许多小文件创建冗余,则效率很低,因为每个文件都会在奇偶校验中产生一定的开销(填充)。
SnapRAID 本身不提供压缩。
在媒体服务器上,您通常不需要压缩,因为媒体通常已经被压缩(MP4、JPG、PDF)。
如果您碰巧使用某些允许压缩的文件系统,则可以使用它。但仅限于设备级别,而不是整个池(如 ZFS 那样)。
SnapRAID 不提供块级别的重复数据删除。
在媒体服务器上,该snapraid dup
功能通常就足够了,因为媒体文件通常不会共享大量重复块。(例外:youtube-dl
如果您以相同的质量下载两次视频,则其差异仅在于几个字节。并非总是如此。但很常见。只需在文件名中保留 Youtube 视频 ID 即可识别两个相似的文件。)
ZFS 重复数据删除需要大量内存。每 1 TiB 数据规划 1 GiB RAM,更好!
如果没有足够的 RAM,您需要添加一些超快速 SSD 缓存设备。ZFS 需要为写入的每个去重块查找 1 个随机扇区,因此 SSD 上“仅”40 kIOP/s,您将有效写入速度限制为大约 100 MB/s。(通常 ZFS 能够利用所有设备的并行带宽,因此您现在可以轻松地在消费类硬件上达到 1 GB/s 和更高的写入速度,但如果您启用了重复数据删除且没有大量 RAM,则情况并非如此。)
请注意,我从未遇到过需要 SnapRAID 来恢复数据的问题。所以我不能发誓,SnapRAID 真的能够恢复数据。
编辑: 我这边已经有足够多的麻烦了,SnapRAID 总是按预期工作。例如,前段时间一个驱动器坏了,我能够恢复数据。AFAICS 恢复已完成(根据最新的 SNAP 记录)。但这样的恢复过程可能需要很长时间(数周),而且在我看来,它并不像 ZFS 那样直接,特别是如果恢复过程必须中断并稍后重新启动(使用 SnapRAID,您应该确切地知道自己在做什么)正在做)。
在 ZFS 上,您必须提前计划。在开始使用 ZFS 之前,您需要提前了解并规划 ZFS 驱动器整个生命周期的各个方面。
如果你能做到这一点,没有比 ZFS 更好的解决方案了,相信我!
但如果你忘记了未来意外发生的事情,你就注定失败。然后,您需要使用 ZFS 从头开始重新启动:
创建一个新的第二个全新且独立的 ZFS 池并将所有数据传输到那里。
ZFS 支持您这样做。但你无法逃避暂时复制数据。就像您引入 ZFS 时所需要的那样。
管理 ZFS 轻而易举。你唯一需要定期做的事情就是:
zpool scrub
仅此而已。然后zpool status
告诉你如何解决你的问题。
(ZFS 已经有 10 多年的历史了。在 Linux 上。简单地说:ZFS 是一个救星。)
OTOH 在 SnapRAID 上,您不需要任何规划。就去做吧。当需要出现时,随时改变你的结构。
因此,您无需复制数据即可开始使用 SnapRAID。只需添加奇偶校验驱动器、配置即可。
但如果您遇到麻烦,SnapRAID 的管理要困难得多。您
必须学习如何使用snapraid sync
、、snapraid scrub
和snapraid check
。大多数时候是有帮助的,但您常常会感到困惑,修复某些问题的正确方法可能是什么,因为没有明显的单一最佳方法(SnapRAID 就像瑞士军刀,但您需要了解自己,如何正确地解决问题)正确处理)。snapraid fix
snapraid status
请注意,在 Linux 上,您对 ZFS 有两种不同的选择:
编辑:
SnapRAID 是 GPLv3,完全是用户空间上的插件。
一般来说,媒体服务器具有长期保留旧数据的特性并且不断增长。这正是 SnapRAID 的设计目的。
SnapRAID 允许稍后添加新驱动器甚至新奇偶校验。
您可以在所有驱动器上混合使用不同的文件系统。SnapRAID 只是添加冗余。
SnapRAID 并不意味着备份。
对于媒体档案,您通常根本不需要备份。
ZFS RAIDZ 也不意味着作为备份。
然而zfs send
,结合zfs snapshot
提供一些非常易于使用的 24/7 即时备份和恢复功能。
ZFS 适用于文件系统,其中至关重要的是它们永远不会停机。几乎所有事情都可以即时修复,无需任何停机时间。
仅当 ZFS 的冗余/自我修复不再能够修复损坏时,才会发生停机。但即便如此,ZFS 也非常有帮助,它会列出所有丢失的数据。通常。
OTOH SnapRAID 可以恢复数据,但这是以离线方式完成的。
因此,在恢复之前,数据不可用。
找出丢失的数据也很有帮助。但这比 ZFS 更困难。
SnapRAID 的最佳实践建议(ZFS 超出了这个答案):
/
。如何配置和管理 SnapRAID 超出了本答案的范围。
为什么使用 ZFS 进行奇偶校验:
好吧,当数据驱动器坏了(不可读扇区)时,您可以复制可读文件。通过这种方式可以轻松找到不可读的文件。然后您就可以恢复它。
复制仍然可读的数据可以显着加快恢复过程。
然而,SnapRAID奇偶校验只是一个大文件。如果您复制此文件,您需要确保它没有静默损坏。ZFS 独立于 SnapRAID 确保这一点。如果出现损坏,ZFS 会告诉您,以便您知道必须检查奇偶校验文件。
检查整个文件以防某些有缺陷的扇区需要很长时间,因为所有驱动器的所有数据都必须完整读取。
很可能有一种方法可以只检查奇偶校验文件中损坏的部分。不过我不确定,因为我还不需要。
为什么不是 BTRFS?
编辑:为什么要加密?
另请参阅我使用 LUKS 的方式
加密只是一种能够更换驱动器而不必担心其上的数据的方法。如果从系统中删除加密的驱动器,所有数据都会自动变得不可读(只要加密不能被破坏),因为密钥对于计算机来说是唯一的。
同一台计算机上的所有设备都拥有相同的密钥,该密钥驻留在 USB 拇指驱动器或其他旧的暂存介质(您可以完全销毁的东西)中。备份打印在纸上。
如今,对于 SSD,我通常有一个专用的“小型”(128 GB 至 256 GB)系统 SSD,它未加密并携带(未加密)密钥以及(未加密)完整基础系统。
使用 EVO 型 Micro-SD(如 Samsung Endurance),您甚至可以从 Micro-SD 启动整个系统,如 Raspberry-PI(只要您不需要高交换吞吐量即可工作)。
如果系统 SSD 从系统中移除,它就会被毁坏。没有更换,没有保修。
/etc/crypttab
通常看起来只有这样:
# <target name> <source device> <key file> <options>
swap /dev/vg_system/lv_swap /dev/urandom swap,cipher=aes-xts-plain,size=256
Run Code Online (Sandbox Code Playgroud)
所有加密驱动器 (LUKS) 均由脚本激活。这样做的优点是 ZFS(或其他东西)不会在启动时激活数据驱动器。因此,一切(系统除外)都处于完全(可能是手动)控制之下。
如果某些东西应该在启动时自动出现,则可以通过一些(精心编写的)脚本来完成,这些脚本由cron
.
这些脚本首先测试所有驱动器的完美健康状态(在我这边有超过 40 个),然后才开始使它们变得高效,这样,只有在断电或重新启动后,一切都会出现,如果一切真的很好,但自然允许在所有其他情况下进行手动干预(这是最常见的情况,因为通常服务器只会在出现一些非常严重的问题时崩溃或重新启动,对吧?)。