메모리 캐시가 디스크와의 동기화를 잃음

메모리 캐시가 디스크와의 동기화를 잃음

(Ubuntu Linux 서버, 64비트) 방금 다운로드한 파일(~3.0GB)의 문제를 해결하고 있었는데, 무결성 테스트에 실패하고 있었는데, 정말 이상한 점을 발견했습니다.

먼저 이것은 다운로드 후 파일의 MD5이며 예상 값과 일치하지 않습니다.

~% md5sum media.iso 
5d74facb904cc1765a468354908a8f34  media.iso

어느 정도 시간이 지나면 이 시간 동안 파일이 변경되지 않아야 하는데 파일을 다시 확인하러 갔을 때 다음과 같습니다.

~% md5sum media.iso
a5b97c5016afb39bd67ccfc3fa6ca59e  media.iso

이건 정말 예상치 못한 일이었습니다. RAM이 많기 때문에 이것이 캐싱의 영향이고 뭔가 잘못되고 있다고 의심했습니다. 놀랍게도 디스크의 전체 파일을 사용하여 다시 시도하기로 결정했습니다.

~% sudo sysctl -w vm.drop_caches=3    # This linux command invalidates
vm.drop_caches = 3                    # everything in the memory cache.
~% md5sum media.iso
2992aa6270f6e1de9154730ed3beedc1  media.iso

나는 그것을 다시 만들었고 지금은 일관성을 유지하는 것 같습니다. 비록 이것이 여전히 내가 기대했던 가치는 아니지만요. 틀림없이,메모리 캐시의 내용이 디스크의 내용과 다릅니다.. 이것이 큰 문제입니다.

다운로드를 수정하기 위해 소스 컴퓨터에서 토렌트를 생성하고 대상 컴퓨터에서 열었습니다. ~3.0GB 중 5개의 1MB 청크가 무결성 검사에 실패했습니다. 토렌트를 사용하여 이러한 파일 청크를 수정하고 파일 무결성이 괜찮은지 확인했습니다.

이제 문제는 데이터가 동기화되지 않은 위치를 확인하는 것입니다.

  1. 나는 메모리를 테스트했다멤테스트86+, 비트 페이딩 테스트를 제외한 모든 것. 고장난 메모리 모듈이 있을 것으로 예상했지만 아무것도 없었습니다. 모든 것이 괜찮습니다.
  2. 파일 시스템은 LVM2, 3디스크 RAID5 어레이를 통한 Ext4입니다. Ext4는 안정적인 것으로 간주되며 디스크 간에 데이터가 일치하지 않는 경우 mdadm이 경고했을 것입니다. 그러나 로그에는 아무것도 없습니다. SMART 오류 로그는 깨끗하고 디스크는 새 것입니다("전원 켜기 시간"이 30일 미만임).
  3. 현재 커널(2.6.35)에서 데이터 손실 버그에 대한 정보를 찾고 있지만, 제가 본 것에는 아무 것도 없는 것 같습니다.

내가 확인할 수 있는 다른 항목이나 결함/버그가 정확히 어디에 있는지에 대한 아이디어가 있습니까?

Ubuntu 10.10 64비트, Core i7 930, 6GB 비 ECC RAM입니다.


업데이트:파일이 디스크에 올바르게 기록되고 있고 메모리에 있는 동안 디스크에서 읽은 후 페이지가 변경되고 있음을 확인했습니다. 나는 훨씬 더 많은 memtest를 수행했지만(밤새 비트 페이드 테스트를 수행하도록 두었습니다) 여전히 아무것도 하지 않았습니다. 모든 메모리 모듈이 괜찮은 것 같습니다.

추가 테스트:

~% md5sum media.iso 
cc8bcf1ce67ff7704eadc2222650c087  media.iso
~% cp media.iso tmp1
~% md5sum tmp1 
bde6c54b2d7b03404b43056b908036ed  tmp1
~% md5sum media.iso 
134f607cf4c633ef11d2576d1c635d08  media.iso    # ← THIS IS THE CORRECT VALUE
~% cmp -l media.iso tmp1
  98697009 101 121
~% udiff <(xxd -s ... media.iso) <(xxd -s ... tmp1 )
--- /proc/self/fd/11    2010-11-03 14:52:55.649433000 -0200
+++ /proc/self/fd/13    2010-11-03 14:52:55.649433000 -0200
@@ -13,7 +13,7 @@
 5e1fef1: 280f 5a87 37d2 e6d6 647d bebe f04e 64d8  (.Z.7...d}...Nd.
 5e1ff01: 19a5 2ff4 178b 1e37 afb0 e914 e03f bd62  ../....7.....?.b
 5e1ff11: 2b8d 4245 985f a9f8 a993 1f51 6d31 30e7  +.BE._.....Qm10.
-5e1ff21: 8274 0d35 ab8f 86b7 130f e1d7 20c6 3541  .t.5........ .5A
+5e1ff21: 8274 0d35 ab8f 86b7 130f e1d7 20c6 3551  .t.5........ .5Q
 5e1ff31: 387b f226 6348 fabc 1eae 67ef adda c3b6  8{.&cH....g.....
 5e1ff41: a931 bf29 690f 25f9 8922 6dcc 009f 60a5  .1.)i.%.."m...`.
 5e1ff51: 559a 9d03 92cb fb5c a75f a26e 0954 0af4  U......\._.n.T..

~% md5sum media.iso        
54d67cc4dcad49b6d1bf6619074b471c  media.iso
~% direcat media.iso|md5sum
134f607cf4c633ef11d2576d1c635d08  -
~% direcat media.iso | cmp -l media.iso -
  98697009 121 101
 231297649 146 147
 519630641 177 157
2291859249 377 357
2442055473 127 107
2907131697 171 151

( 로 읽는 버전 , 즉 페이지 캐시를 우회하는 direcat버전입니다 )catO_DIRECT

명확한 패턴이 있습니다. 이는 항상 16바이트 정렬의 두 번째 바이트에서 발생합니다. 해당 바이트에서는 거의 항상 비트 4(LSB)가 1로 반전되지만, 비트 2가 0으로 반전되는 경우가 한 번 있었습니다.

답변1

파일의 md5sum이 변경되면 가능한 순서대로 여러 가지 설명이 가능합니다.

  • 파일이 작성되었습니다.
  • RAM에 결함이 있습니다(또는 다른 마더보드 구성 요소이지만 RAM이 가장 오류가 발생하기 쉽습니다).
  • 저장장치에 결함이 있습니다. (저장 결함으로 인해 일반적으로 데이터가 손상된 것이 아니라 파일을 읽을 수 없게 되기 때문일 가능성이 낮습니다.)
  • 파일 시스템 코드에 있는 커널 버그일 수 있습니다. (ext4에서는 거의 발생하지 않습니다.)

"디스크와 캐시의 불일치"는 증상이지 원인이 아닙니다. 그것은 당신이 관찰한 증상조차 아닙니다. 당신이 관찰한 것은 시간 T의 기억과 시간 T'의 기억 사이의 차이였습니다.

파일이 수정되지 않았다고 확신한다면 RAM 결함이 가장 가능성이 높습니다. 불행하게도 메모리 테스트가 항상 불량 RAM을 감지하는 것은 아닙니다. 두 개의 서로 다른 파일 복사본을 얻을 수 있는 경우 이를 비교하십시오( cmp -l file1 file2). 차이가 정렬되거나(예: 차이가 항상 16바이트 시퀀스의 42번째 비트에 있음) 대체된 블록으로 구성되는 경우(포인터 변수에 손상이 발생하는 징후) 모든 징후는 RAM 결함을 나타냅니다.

관련 정보