(Сервер Ubuntu Linux, 64-битный). Я устранял проблему с файлом (~ 3,0 ГБ), который только что скачал, но он не прошел тест на целостность, когда обнаружил что-то действительно необычное.
Сначала это MD5 файла после загрузки, который не соответствует ожидаемому значению:
~% md5sum media.iso
5d74facb904cc1765a468354908a8f34 media.iso
Проходит некоторое время, ничего не должно было изменить файл в течение этого времени, но когда я пошел, чтобы проверить файл снова:
~% md5sum media.iso
a5b97c5016afb39bd67ccfc3fa6ca59e media.iso
Это было действительно неожиданно. Так как у меня много оперативной памяти, я подозревал, что это был эффект кэширования, и что-то пошло не так. Я решил повторить попытку с целым файлом с диска, к моему удивлению:
~% 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
Я переделал его, и теперь он, кажется, остается последовательным, хотя это все еще не та ценность, которую я ожидал. Конечно, содержимое в кеше памяти отличалось от содержимого на диске. Это большая проблема.
Чтобы исправить загрузку, я создал торрент на исходном компьютере и открыл его на целевом компьютере. Пять блоков по 1 МБ из ~ 3,0 ГБ не прошли проверку целостности. Я использовал торрент для исправления этих файловых блоков и того, как целостность файла в порядке.
Теперь проблема состоит в том, чтобы определить, где данные были синхронизированы.
- Я проверил память с помощью memtest86+, все, кроме теста на битовое затухание. Я ожидал увидеть какой-нибудь неисправный модуль памяти, но ничего не было. Все отлично.
- Файловая система Ext4, LVM2, массив RAID5 с 3 дисками. Ext4 считается стабильным, и если бы данные были несовместимы между дисками, mdadm предупредил бы. Но в логах ничего нет. Журналы ошибок SMART чистые, диски новые (менее 30 дней "часов работы").
- Я ищу информацию о любых ошибках потери данных в моем текущем ядре (2.6.35), но, похоже, ничего не найдено, насколько я выглядел.
Любые идеи о том, что еще я мог проверить, или где именно может быть дефект / ошибка?
Это Ubuntu 10.10 64-bit, Core i7 930, 6 ГБ ОЗУ без ECC.
Обновление: я подтвердил, что файлы правильно записываются на диск, страницы изменяются после их чтения с диска, находясь в памяти. Я сделал намного больше мемстетов (я оставил это, делая немного исчезающий тест за ночь), и все еще ничего. Все модули памяти кажутся в порядке.
Еще несколько тестов:
~% 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
- это версия cat
которая читает с помощью O_DIRECT
, то есть в обход кеша страниц)
Существует четкая закономерность: это всегда происходит со вторым байтом в 16-байтовом выравнивании. В этом байте почти всегда бит 4 (LSB) переходит на единицу, но был один случай, когда бит 2 перевернулся на ноль.