我已经在多个设备上使用 btrfs 大约两年了。
我计划在具有不可靠扇区的 HDD(单盘)上测试一些 btrfs 配置。硬盘上的十几个扇区有时无法读取。
这些设置中的数据完整性和整体读写速度是否有任何差异:
1 TB HDD
-1 TB btrfs partition created with `mkfs.btrfs -d dup -m dup /dev/sda1`
1 TB HDD
-500 GB partition
-500 GB partition
--500 GB btrfs Raid 1 `mkfs.btrfs -m raid1 -d raid1 /dev/sda1 /dev/sda2`
答案1
我建议使用该变体,而dup
不是在同一设备上放置多个分区并突袭它们。 raid 变体很糟糕,因为 raid 要求在访问数据时读取两个副本(这对于正常的多设备 raid 很有用,因为如果任一设备速度更快,则数据会更快可用)。对于单个设备旋转设备,这会导致读取头在不同分区之间跳跃,因此如果队列中有多个请求(通常情况),您最终会得到非常糟糕的性能。增加队列深度和 CFQ 调度程序可以稍微减少总体延迟,但最好避免这种混乱。
该dup
变体应该足够理智,通常只能读取一个副本,并且仅在扇区不可读时才回退到另一个副本。
我不确定dup
实施情况,但我猜这dup
不会将副本 1/2 设备远离第一个副本,因此dup
可能也会提高写入性能。对于单设备 raid,写入性能也会很差,因为一个逻辑写入操作需要写入物理旋转设备上的两个位置,并且差异始终是 1/2 设备,因此您最终会得到一种实际上实现整体的算法旋转设备的最坏情况行为。
答案2
我能想到 DUP 和 RAID1 之间的一个区别:
- 如果您(像我一样)有一些 SSD,在不使用时开始说随机扇区不可读
- 然后 DUP 可能会出现 PANIC,因为 BTRFS 分区标头上的不可读取扇区之一并且 BTRFS 无法安装、读取等存储在其上的任何内容。使用 RAID1 时,您可以挂载另一个(如果另一个 BTRFS 分区标头上没有该不可读扇区)并进行清理以重写不可读扇区。
- RAID1意味着两个分区,每个分区都有一个标头,因此如果一个标头损坏(重新格式化分区),而另一个分区标头正确,您可以挂载另一个分区并以降级模式访问并修复它(添加另一个新分区) ,删除缺失的,在RAID1级别上平衡)
现在是我个人与 KingDian SSD 的故事,在长时间(超过八天)断电后,会出现随机不可读扇区的情况;以及 BTRFS RAID1 如何进入保存并允许使用此类 SSD(直到不可读扇区发生冲突)。
首先我要感谢 BTRFS 及其 DUP(我将在不久的将来测试它)和 RAID1(已经测试并取得了完美的结果);它让我可以使用 KingDian 品牌的 SSD。对于 Yucun 和 Samsung 品牌,我还没有看到 KingDian 品牌的所有三款 SSD 都出现“不可读取扇区”问题。我总共使用了 11 个 SSD,其中一个 KingDian 坏了,所以我现在只使用了 10 个)和一个 KingDian 1TiB SSD,我不敢开始使用它(我打算在 FAT32 或 NTFS 中使用它来合法地播放电视)购买转换为 H.264/2xAAC 的 DVD)。
KingDian SSD 的问题确实很奇怪,所以我将逐步告诉您我如何发现问题:
- 仅创建一个90%的分区并格式化它,直到前几天我使用Ext4(Linux)/ NTFS(Windows系统分区);我真的很讨厌Windows,但我被迫使用它。
- 在该分区上安装系统
- 每天使用系统 --> 没有显示任何问题
- 断电并放置超过八天 --> KingDian SS 出现问题
- 要查看我使用 Live Linux 发行版(DVD / USB / 等)启动的问题,我主要使用 SystemRescueCD,但任何其他具有“ntfsclone”/“partclone.*”/“partimage”或只是简单的“dd”的都将服务
- 我将分区克隆保存为文件(例如将系统分区保存在备份介质上)
- 出现问题,有一些扇区(从几个到接近 25 或 30 个)不可读
- 我(在纸上)记下哪些扇区不可读
- 现在奇怪的事情开始了,我正确地关闭电源并将其关闭八天或更长时间
- 我重复步骤 4 到 7,看看哪些扇区现在不可读,列表发生了很大变化,大多数时候两个列表没有共同点,因此所有不可读扇区都已变为可读,而其他现在可读的扇区则不可读
- 我可以多次重复此操作(根本不写入 SSD),并且所有不可读扇区列表往往没有任何共同扇区(有时一个扇区位于两个列表中)
为什么这款SSD(仅限KingDian品牌)会做出如此丑陋和奇怪的事情?随机说有些扇区在长时间(超过八天)断电后不可读,再过一段时间(超过八天)断电又恢复可读。
最奇怪的是,在不可读然后再次可读之后,它们总是具有正确的数据。
另外,我查阅了 SMART 数据,它说没有新的重新分配扇区(它有一些,因为我曾经在 Windows 上使用过一个工具来强制重新分配不可读扇区)。
SMART信息还说没有读错误,而有些扇区不可读,也说没有写错误。
显然,没有“读取”错误,没有“错误”数据“读取”...这在技术上与无法读取不同...并且智能数据没有我可以看到的字段显示不可读的错误计数... ETC。
顺便说一句,如果我用数据重写不可读扇区,它们会再次变得可读,而无需重新映射任何扇区,可能是因为使用的内部扇区不是失败的扇区(请记住,写入时的 SSD 使用不同的位置来扩展现场,SSD使用内部映射LBA(芯片内部的真实位置)。
顺便说一句,克隆一个包含 30GiB 数据的分区并且没有这个问题只需要不到一分钟(SSD 可以在克隆分区时持续以 550MiB/s 的速度读取,也就是主要是连续读取);但对于 25 个不可读扇区,需要超过 24 小时(忽略此类错误,否则不会结束),并且会有一些“损坏”数据(无法读取)。
这就是 BTRFS 拯救我的地方:
- 首先,我在 BTRFS 的 RAID1 级别的同一个 SSD 中使用两个分区来存储数据和元数据
- 现在我知道了 DUP 而不是 RAID1,我将使用 DUP 进行测试;这将使我避免每次运行两个克隆分区备份,只需一个;那太好了(它有效)
救我的结果如何?简单:在对 BackUP 介质进行克隆之前,我对要克隆的内容进行了清理,以便非可读扇区将导致 BTRFS 用另一个副本覆盖它们(希望两个副本都没有非可读扇区)同一时间、同一位置)。
对于两个分区,它工作得很好(缓慢,但有效)并且不会丢失克隆数据上的某些扇区;现在我必须在一个分区上使用 DUP 进行测试,而不是在两个相同大小的分区上使用 RAID1 进行测试。
它不会减少备份的时间(也需要额外的时间),但至少我可以确保所有数据都是正确的......直到有一天,同一数据(冲突)出现两个不可读的扇区同时处于同一位置,那将是不可挽回的。
另一个选择是显而易见的:不再使用任何 KingDian SSD,这是迄今为止我使用过的唯一出现该问题的 SSD(长时间断电后无法读取扇区)。
想象一下,您出去度假,切断了家里的总电源,回来后发现您的 SSD 有不可读的部分!对于家庭用户来说这是个大问题,但对于 SSD 始终供电的数据中心来说却不是。
伟大的BTRFS!!!现在想想另一个丑陋的部分(对我来说),如何对 NTFS 分区(Windows 系统分区)做类似的事情?根本不可能,NTFS 没有这个选项(记住 Windows HOME 版本,而不是 SERVERS 等)。
所以感谢 BTRFS,Linux 比我几天前想象的要好得多……我几十年来一直是 Linux 用户……但拒绝尝试 BTRFS,因为所有关于完全损坏等的坏信息;直到我遇到 SSD 问题并需要一些冗余的东西。
我想到的另一个选择是 ZFS,更复杂,没有集成在 GRUB2 引导加载程序上,没有集成在内核上(也许永远不会,因为许可系统),等等;所以我狂热地尝试了(昨天)BTRFS...令人惊讶的是,它看起来非常稳定,相对易于使用(添加新磁盘时警告,它会将其添加到 RAID0,而不是 RAID1,我不使用 RAID5/6/等也不想使用这样的),易于从灾难性损坏中恢复(重新格式化两个分区之一)而不会丢失数据(在非 KingDian SSD 上)等。
当然,我不使用子卷、快照等...只是作为 RAID1 中 Linux 根“/”的普通文件系统;正如我所说,我必须使用 DUP 而不是 RAID1 进行测试,但我担心(我非常偏执)我将在 RAID1 上的同一个 SSD 上保留两个分区,因为分区标头上的不可读扇区将意味着所有 BTRFS 都无法恢复/可读。
如果我仍然能在出现此类随机不可读扇区故障的情况时选择 KingDian SSD,那么就可以省钱了,SSD 并不便宜,因为我只想使用单比特单元 SSD,而这确实很贵,而且尺寸越大价格就越贵(我说我很偏执),并且拥有超过 10 个离线备份所有数据,以及超过一百个最后状态的历史记录(我知道,太偏执了)。
答案3
我发现至少有一个区别:
您只能挂载降级的 raid1 rw 一次。当设备的其他分区正常时某个分区出现故障的可能性可能很小,但这是有区别的。
来源: https://btrfs.wiki.kernel.org/index.php/Gotchas#raid1_volumes_only_mountable_once_RW_if_degraded
如果降级,raid1 卷只能安装一次 RW
即使没有单个配置文件块,raid1 卷如果降级,也只能使用选项 -o degraded,rw 以读写方式挂载一次。
笔记:
据报道,当设备数量超过 2 台时,这种情况不会发生。
raid10 配置文件卷不会发生这种情况。
这通常是由于“不完整的块转换”问题造成的,其中还剩下单个块。
可能的康复:
如果它仍然是读写的,您可以将配置文件 raid1 中的块转换为配置文件 single(或配置文件 dup)(如果有足够的空间)。
如果仍然是可读写的,可以用btrfs设备替换缺失的设备。
当 raid1 卷由于任一原因被卡为只读时,只能通过转储其内容、重新创建它并恢复内容来恢复。
答案4
聚会迟到了,但无论如何。我想知道同样的问题,在我读到的人(关于 dup)中:
“例如,SSD 驱动器可以在内部将块重新映射到单个副本,从而对它们进行重复数据删除。这否定了增加冗余(原文如此)的目的,并且只是浪费空间”
也许 raid1 可以避免(或不能)这种担忧。