18.04 LTS 上的大型文件(32 GB)损坏

18.04 LTS 上的大型文件(32 GB)损坏

我在处理大型文件时遇到了问题。我有 64 GB 的 RAM,存储驱动器都是三星 860 EVO。我在原始驱动器上运行 mdcrypt,在其上运行 luks RAID,并使用 ext4 作为文件系统。我有很多可用的驱动器空间,并且没有运行交换。

我的发行版是 Ubuntu 18.04 LTS(4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux)。

第一次发现这种异常是在克隆大型 USB 拇指驱动器时。然后我注意到大型循环安装的文件系统也会损坏。

片段如下:

我首先创建一个 32 GB 的文件,

$ dd if=/dev/zero of=zero-file_32GB bs=1024k count=32768
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 55.3081 s, 621 MB/s

然后我对该文件进行 SHA256 求和以获取哈希码。请注意哈希值如何随着多次迭代而变化:

$ sha256sum zero-file_32GB 
5f7f8ea75d87ac7d64c07ecc2c5fdbe407540913ac0feb050ede768990140b38  zero-file_32GB

$ sha256sum zero-file_32GB 
64bcf7372df895319ce9e54758aec2814600fa3335fb82c5996a7636e7d637be  zero-file_32GB

$ sha256sum zero-file_32GB 
3475353b2a00e5abebb1878a9ddb5956eb829c94af26d9cd079f991fbd84435c  zero-file_32GB

$ sha256sum zero-file_32GB 
cf65fa70ba04d7bb4055b72fdf2ac90bf65ac8457cc80b8e673af5acb57d22d1  zero-file_32GB

MD5 和也存在同样的不一致情况:

$ md5sum zero-file_32GB 
8633b9ba83a8ac04c9b56fad0a065ec2  zero-file_32GB

$ md5sum zero-file_32GB 
cc289d380b25235b7610a7b86bc4fd47  zero-file_32GB

$ md5sum zero-file_32GB 
249f66bd3843b6fcad8316fd0a3e660c  zero-file_32GB

$ md5sum zero-file_32GB 
888ac00592204be7a026c27e98159ff2  zero-file_32GB

现在,我相当确信我的文件已损坏,而不是哈希求和算法已损坏。为了验证这个假设,我将 32 GB 的零文件拆分成 32 个 1 GB 的块:

$ split --verbose -b 1G zero-file_32GB split-1G_
creating file 'split-1G_aa'
creating file 'split-1G_ab'
creating file 'split-1G_ac'
creating file 'split-1G_ad'
creating file 'split-1G_ae'
creating file 'split-1G_af'
creating file 'split-1G_ag'
creating file 'split-1G_ah'
creating file 'split-1G_ai'
creating file 'split-1G_aj'
creating file 'split-1G_ak'
creating file 'split-1G_al'
creating file 'split-1G_am'
creating file 'split-1G_an'
creating file 'split-1G_ao'
creating file 'split-1G_ap'
creating file 'split-1G_aq'
creating file 'split-1G_ar'
creating file 'split-1G_as'
creating file 'split-1G_at'
creating file 'split-1G_au'
creating file 'split-1G_av'
creating file 'split-1G_aw'
creating file 'split-1G_ax'
creating file 'split-1G_ay'
creating file 'split-1G_az'
creating file 'split-1G_ba'
creating file 'split-1G_bb'
creating file 'split-1G_bc'
creating file 'split-1G_bd'
creating file 'split-1G_be'
creating file 'split-1G_bf'

然后我对新的文件分割进行 SHA256 求和。它们应该完全相同,因为它们每个都应该只包含。但请注意分裂时的不一致亚利桑那州

$ sha256sum split-1G_??                                                                                                                                                  
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_aa                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ab                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ac                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ad                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ae                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_af                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ag                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ah                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ai                                                                                                                        
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_aj
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ak
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_al
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_am
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_an
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ao
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ap
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_aq
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ar
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_as
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_at
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_au
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_av
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_aw
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ax
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_ay
702301f26e8df8cf784ca6b45954f1ca3524d1e22c322ee271ab1ac20b4face2  split-1G_az
bd9442046cecfcdec29169f5e8485ee0e226f56fab24cfded23b4ad15275b5d9  split-1G_ba
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_bb
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_bc
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_bd
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_be
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14  split-1G_bf

与 MD5 和类似的不一致之处:

$ md5sum split-1G_??   
cd573cfaace07e7949bc0c46028904ff  split-1G_aa
cd573cfaace07e7949bc0c46028904ff  split-1G_ab
cd573cfaace07e7949bc0c46028904ff  split-1G_ac
cd573cfaace07e7949bc0c46028904ff  split-1G_ad
cd573cfaace07e7949bc0c46028904ff  split-1G_ae
cd573cfaace07e7949bc0c46028904ff  split-1G_af
cd573cfaace07e7949bc0c46028904ff  split-1G_ag
cd573cfaace07e7949bc0c46028904ff  split-1G_ah
cd573cfaace07e7949bc0c46028904ff  split-1G_ai
cd573cfaace07e7949bc0c46028904ff  split-1G_aj
cd573cfaace07e7949bc0c46028904ff  split-1G_ak
cd573cfaace07e7949bc0c46028904ff  split-1G_al
cd573cfaace07e7949bc0c46028904ff  split-1G_am
cd573cfaace07e7949bc0c46028904ff  split-1G_an
cd573cfaace07e7949bc0c46028904ff  split-1G_ao
cd573cfaace07e7949bc0c46028904ff  split-1G_ap
cd573cfaace07e7949bc0c46028904ff  split-1G_aq
cd573cfaace07e7949bc0c46028904ff  split-1G_ar
cd573cfaace07e7949bc0c46028904ff  split-1G_as
cd573cfaace07e7949bc0c46028904ff  split-1G_at
cd573cfaace07e7949bc0c46028904ff  split-1G_au
cd573cfaace07e7949bc0c46028904ff  split-1G_av
cd573cfaace07e7949bc0c46028904ff  split-1G_aw
cd573cfaace07e7949bc0c46028904ff  split-1G_ax
cd573cfaace07e7949bc0c46028904ff  split-1G_ay
7036950003e53e471654b020330b386e  split-1G_az
0a82f6068a91bef3b46294e1e30687be  split-1G_ba
cd573cfaace07e7949bc0c46028904ff  split-1G_bb
cd573cfaace07e7949bc0c46028904ff  split-1G_bc
cd573cfaace07e7949bc0c46028904ff  split-1G_bd
cd573cfaace07e7949bc0c46028904ff  split-1G_be
cd573cfaace07e7949bc0c46028904ff  split-1G_bf

我曾想过不断分割成更小的块来确定实际差异的大小,然后用十六进制编辑器进行分析,但我怀疑这是否能提供任何见解来了解导致数据质量下降的原因。我的 ISO 映像、视频文件和 EXT4 循环文件系统正在损坏。知道罪魁祸首是什么吗?

由于这种情况只在 32 GB 时才开始发生(发生大约是 64 GB RAM 的一半。我没有使用交换区。),我倾向于认为这是内存问题。您怎么说?

更新#1:

不幸的是,内存测试并没有花费预期的时间。:-(在此处输入图片描述

更新 #2(解决方案!)

  • 我从计算机上移除了所有 4 个 16 GB 的内存条。
  • 然后,我仅将序列号最低的内存条插入第一个 DIMM 插槽,即插槽 #1(我的插槽编号为 1 到 4)。我运行 MemTest86 3:44(三小时四十四分钟),它以零错误完成。
  • 我用下一个按顺序编号的内存条替换了该内存条(在明显的断电和静电预防措施之后)。我再次使用了插槽 #1(因为我希望先测试所有内存,然后再开始检查插槽)。我再次运行了 MemTest86。这次测试几乎立即中止,因为错误太多。
  • 因此,我将第三个 DIMM 插入插槽 #1。MemTest86 运行了 3:43,没有错误。
  • 插槽 #1 中的第四个 DIMM 测试也运行了 3:43,并且没有出现错误。
  • 然后我将三条已知良好的 DIMM 插入前三个插槽。MemTest86 运行了 8:54,没有任何错误。

有趣的是,我发现测试三个 DIMM(8:54)所花的时间比测试三个单模块所花的时间(3:44 + 3:43 + 3:43 = 11:10)要少得多。我猜有些测试是同时进行的。

sha256sum' 生成了一个新的 32 GB 零文件。即使经过多次迭代,总和仍然保持不变。我的总和是97af759fc4597bc41706df77cbab318a57d935bacb262bd409e3ab767e07066f,与@bernard.wei 给出的数字相同。

我要感谢@heynnema 对 MemTest86 的建议。这对解决这个问题很有帮助。

我认为这个问题已经解决了。谢谢大家!

答案1

  • 检查您的三星 860 EVO 的固件更新。Samsung Magician是一个用于检查固件的 Windows 应用程序。

  • 检查您的 BIOS 版本,sudo dmidecode -s bios-version然后访问制造商的网站来查找更新的 BIOS。

  • 运行memtest检查你的 64G RAM。转到https://www.memtest86.com/并下载/运行免费memtest测试您的记忆力。至少完成一次所有测试以确认记忆力良好。这将需要很多小时才能完成。

更新#1:

memtest测试 2/4 失败,[地址测试,自己的地址]

memtest可能由于一些原因而失败...

  • 安装了错误规格的 RAM

  • BIOS 设置为对内存进行超频,或以最大速度运行

  • DIMM 未正确安装在插槽中

  • DIMM 有缺陷

DIMM 通常成对安装,大小相同,以便利用两个通道 A 和 B(在某些情况下为更多通道)的内存交错速度优势。第一对 DIMM 插入插槽 A1/B1,第二对 DIMM 插入插槽 A2/B2。(假设这是一台具有四个或更多 DIMM 插槽的台式计算机)。

步骤1:

  • 检查你的 RAM 规格,确保它们与你的主板兼容

第2步:

  • 检查你的 BIOS 设置

步骤#3:

  • 触摸底盘接地,拔下计算机电源插头,按住电源按钮 10 秒钟

  • 重新安装所有 DIMM

  • 重新测试memtest

  • 如果memtest运行成功,你可能已经解决了问题

步骤4:

  • 触摸底盘接地,拔下计算机电源插头,按住电源按钮 10 秒钟

  • 识别 A2/B2 DIMM 并小心地将其移除

  • 重新测试memtest

  • 如果memtest运行成功,则 A1/B1 DIMM 良好

  • 如果memtest失败,则 A1 或 B1 DIMM 有问题

    • 移除 A1 或 B1 DIMM
    • 将其替换为 A2 或 B2 DIMM
    • 重新测试memtest
    • 如果memtest运行成功,则说明您拔出的 A1/B1 DIMM 是有缺陷的
    • 如果memtest失败,则另一个 A1/B1 DIMM 有缺陷

假设您有四个 16G DIMM,继续将剩余的 DIMM 穿过插槽 A1/B1,直到只剩下一个有缺陷的 DIMM 未被安装。请记住,您实际上可能有多个有缺陷的 DIMM。

更新 #2:

使用memtest,已识别出一个损坏的 DIMM。校验和现在正确且一致。

相关内容