似乎 zfs send 包含所有包含数据的校验和(例如此处说明)。这个校验和是否由 zfs recv 自动验证?我认为是这样,但我找不到任何证实。我打算使用 zfs send/recv 将 zpool 迁移到另一个磁盘,并希望在销毁原始池之前 100% 确定数据正常。
ext4 元数据校验和的内核 wiki 页面标记为“最后修改于 2013 年 10 月 22 日”。我找不到有关此功能的更多最新状态信息,除了 2019 年的这个问题,它建议禁用它和相关64bit
功能。那里的答案之一声称该64bit
功能“未经充分测试”,但我不确定这是否正确。这种说法没有任何根据,而且鉴于近年来 64 位系统的流行,这听起来值得怀疑。我知道metadata_csum
取决于64bit
完整的校验和。
我的问题:
截至 2020+,这两个相关的功能(metadata_csum
和64bit
)是否被认为是稳定和安全的?真的,它们经过了怎样的测试?在启用这些之前,是否应该考虑任何重要的错误、陷阱或故障模式?
我最近研究了高级文件系统(Btrfs、ZFS)的数据冗余和可用性,并对它们提供的附加功能感兴趣,尤其是它们针对数据损坏的“自我修复”功能。
但是,我认为我需要退后一步,尝试了解与传统的 mdadm-Raid1 + 相比,对于一般家庭/SMB 使用而言,这种优势是否超过了它们的劣势(Btrfs 错误和未解决的问题以及 ZFS 可用性和性能影响) Ext4 解决方案。无论哪种方式都可以使用镜像备份。
假设我有几个文件服务器用于归档目的并且资源有限,但是 ECC 内存和稳定的电源。
- 我什至遇到实际数据损坏导致文件无法读取的可能性有多大?如何?
- Ext4 或系统文件管理器是否已经检测到复制/移动操作中的数据错误,让我至少意识到一个问题?
- 如果 madam-Raid1 驱动器中的一个驱动器由于一个驱动器有坏扇区而保存了不同的数据,会发生什么情况?我仍然能够检索到正确的文件,还是阵列无法确定哪个文件是正确的并完全丢失?
我在我的硬盘上运行 Snapraid。但是,我想测试它的数据完整性功能,看看它们如何/是否真正起作用。
但我真的不明白如何“破坏”我的数据。我可以手动更改文件的内容。但是,Snapraid 只会正常同步此更改。并且 Snapraid 修复会自动将文件恢复到更改之前。
但是我如何测试实际的数据损坏,以及我如何知道 Snapraid 是否真的修复了它?
我知道这听起来很笼统的问题。
考虑使用虚拟化运行的 2 个操作系统,例如操作系统级虚拟化。如果两个托管操作系统都使用相同的资源,如何处理并发性以及它是如何工作的?
当我运行时DBCC CHECKDB
,我会收到大量这样的错误消息:
表错误:对象 ID 2020918271,索引 ID 1,分区 ID 72057594196590592,分配单元 ID 72057594190233600(行内数据类型),页面 (4:129574),行 0。记录检查(有效的 UDT 列)失败。值为 3 和 0。
现在我只是想了解这个错误的含义以及它的严重程度——它似乎是一些与校验和相关的错误,可能没有那么严重。最近的备份似乎也有同样的问题,但无论哪种方式都不是什么大问题,因为可以从其他来源重新创建数据。
无论如何,我正试图深入了解这一点,也许了解哪些行已损坏,如果有任何特定的模式。当我跑去DBCC PAGE
看里面有什么的时候,比如下面的语句:
DBCC PAGE('MyDB', 4, 129574, 3)
它什么也没显示。纳达。压缩。只是标准:
DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。
但没有错误,也没有页面数据。事实上,出现的每一个错误CHECKTABLE
都有一个文件/页码,我从PAGE
.
我还从CHECKTABLE
输出中看到以下错误,但只是偶尔出现:
表错误:对象 ID 2020918271,索引 ID 1,分区 ID 72057594196590592,分配单元 ID 72057594190233600(键入行内数据)。页面 (4:129575) 未在扫描中看到,尽管其父级 (4:129977) 和上一个 (4:129574) 引用了它。检查任何以前的错误。
看起来它可能是相关的,但我不确定如何。UDT 可能相对较大(大约 5 KB),所以它可能是跨页面拆分的,并且其中一个页面丢失了?不过,这只是一个疯狂的猜测。
出来的错误数量CHECKTABLE
也让整个表格看起来都是这样,但我知道不是这样,因为我可以很好地读取数据。事实上,有一个每天运行的自动化过程,随着时间的推移,它会读取该表中的几乎所有数据,并且没有报告任何错误。此外,如果我DBCC PAGE
在其中一个父页面(确实存在,即使“以前的”页面不存在)上运行,我可以获得键列,并且我可以SELECT
获取所有周围键的所有数据而不会出现任何错误。
谁能告诉我这里发生了什么?DBCC CHECKTABLE
当所引用的页面甚至不存在时给我这些错误是否有意义?它CHECKTABLE
本身是否有可能发出虚假错误?
一家小型专业公司的两个合伙人联系了我。他们担心他们的另一个合作伙伴,并希望采取一些措施来绝对确保公司的数据和系统不受“任何可能发生的情况”的影响。
他们有一台服务器 (Windows 2003),用作文件和打印服务器(所有重要文件都在服务器上),Exchange 2003 Server,它运行一些构成其财务系统的应用程序。我对他们的设置了解不多,因为我还没有机会进入。我正在处理的两个人不想让另一个合作伙伴知道他们有人在查看他们的系统,所以我需要尽量减少我在做任何事情时留下的足迹。
我意识到我需要加快速度的一件事是从物理到虚拟工具。我想将服务器转换为可以在其他地方启动的 VM。如果合法的东西变得丑陋,他们可能会失去对建筑物的访问权,或者如果它变得非常糟糕,其他人可能会离开服务器。
到目前为止,我计划的事情是:
进入并记录服务器硬件和软件配置,以便在必要时能够从头开始重新创建服务器。
作为上述的一部分,请确保他们拥有所有原始安装磁盘或文件并制作它们的副本
做一堆备份:
- 制作他们所有共享文件的副本
- 弄清楚如何从他们的财务应用程序中备份数据
- 备份邮箱,将它们转换为 PST
- 备份和重影整个机器。
前三个备份的原因是我希望他们能够访问服务器映像之外的文件及其应用程序数据,以防他们需要快速找到某些东西。我无法为此设置重复性工作,但我可能会每周左右进行一次新的完整备份,并且可能每月进行一次文件/数据库/邮箱的另一次备份。
在查看他们的帐户之前,我不确定我会做什么,但我要么创建另一个管理员帐户,要么将合作伙伴的帐户设为管理员或类似的东西 - 想法是拥有一些帐户(s ) 其他合作伙伴不知道成为管理员。
验证他们的 PC 是否都已设置为在服务器上存储文件。
寻找其他合作伙伴可能安装的任何可能危及系统的东西。根据我被告知的情况,这不太可能,这很好,因为我不确定从哪里开始寻找恶意软件......
我的问题是:我错过了什么重要的东西吗?其他人会建议做什么?
在用于数据库的单个磁盘上禁用写入缓存的建议很常见,因为否则某些磁盘将确认尚未到达磁盘表面的写入。
这意味着某些磁盘在写入磁盘表面之前不会确认写入(更新:或者当被要求刷新缓存时它们会准确报告。我在哪里可以找到这样的磁盘,或者我在哪里可以找到权威信息在哪里可以找到这样的磁盘?
我正在设置一些可以从使用写入缓存中真正受益的数据库服务器,但是该应用程序对价格很敏感,我不希望为某些缓存 RAID 控制器增加磁盘子系统的成本,因为我没有足够的信息来知道我是否可以信任每个驱动器中的缓存。