LINUX.ORG.RU

Один эпизод о достижениях современного глюководства

 ,


0

6

Недавно я обнаружил странность: распаковка огромного (45Гб) многотомного архива завершилась с ошибкой, но последующее тестирование этого же архива показало, что ошибок нет.
Я удивился, ещё несколько раз протестировал этот архив, и холодок ужаса пробежал по моей спине: архив тестировался то как исправный, то как ошибочный, причём ошибки возникали на разных томах архива, случайно.
Это могло означать лишь одно: мой комп (стоимостью больше моей месячной зарплаты) начал глючить. Я никогда в жизни не разгонял никакие частоты и всегда ценил надёжность выше производительности, а тут такое…

(это была драматичная завязка, дальше идёт техническая часть и неожиданный финал)

Я приступил к определению источника неисправности, планируя проводить тестирование после замены каждого компонента системы.
Тестировал я многократным (60 раз) чтением архива с подсчётом MD5 каждого тома.
Замечу, что общий объём архива больше, чем размер моей оперативы, поэтому происходило 60 считываний именно с диска.

for i in {1..60}; do md5sum *.rar > $(date +%s.txt); done; md5sum *.txt

На экране отобразились 60 хэш-сумм, из которых большинство совпадали, но 8 штук отличались. Внутри каждого из этих 8 .txt файлов отличалась хеш-сумма лишь какого-то одного тома архива, каждый раз разного.
Короче говоря, при чтении файлов с диска возникает в среднем одна ошибка на 350Гб.

На компе у меня один HDD, разбитый на два раздела: ntfs и ext4.
Загрузиться можно с линукса или с винды.
Винда видит только ntfs, линукс видит оба раздела.
Файлы с архивом лежат на ntfs разделе, а загружаюсь я в линукс.

Первым делом я скопировал эти файлы с ntfs на ext4 и повторил тестирование. К моему удивлению, получилось 0 ошибок из 60.
Вторым делом я загрузился в винду и повторил тестирование файлов, лежащих на ntfs-разделе (пришлось написать скриптик, который делает то же самое, что и тот однострочник на bash). Я удивился ещё больше, потому что и здесь всё было в порядке: 0 ошибок из 60.
И тут до меня дошло: ошибка - чисто софтовая, а железо у меня исправное!
Выдох облегчения.

Будь проклят тот день, когда я сел за баранку этого дебиана! )))
У меня debian 9, ntfs-драйвера «искаропки».
Прошу вас повторить мой эксперимент и поделиться результатами, если у вас есть ntfs-раздел на винте с полусотней гигабайт хлама на нём.


Ответ на: комментарий от anonymous

а может это слот конкретный на материнке битый?

я тестировал в одних и тех же слотах (слоты те же, димы другие)
по-другому на моей материнке просто невозможно, иначе Dual Channel Memory не включится

Egor_
() автор топика
Последнее исправление: Egor_ (всего исправлений: 1)
Ответ на: комментарий от superuser

Попробуй найти плохую планку памяти проводя эксперимент без неё (хотя это так себе способ и можно забраковать хорошую планку вместо плохой).

Хороший совет!

anonymous
()
Ответ на: комментарий от anonymous

виндовый драйвер в родном окружении (на винде) проверяет чексуммы секторов или что-то в этом роде?

наверное, просто буфер виндового драйвера попал на хороший кусок памяти, а буфер ntfs-3g драйвера оказался менее удачлив
я не понимаю, что там происходит

Egor_
() автор топика
Последнее исправление: Egor_ (всего исправлений: 1)
Ответ на: комментарий от Egor_

мораль №2: память ballistix не брать

bios определяет эту память как crucial
а «ballistix» написано на сверху на железной скобке, охватывающей димм

Egor_
() автор топика
Ответ на: комментарий от Egor_

получается, что я исполнил роль мальчика, который кричал «волки» а вы все, кто «накаркал» мне битую память - вы оказались правы…

Дело в том, что у тебя частная проблема и попытка её локализовать в месте возникновения, тьфу, в месте проявления. А у нас опыт. А опыт, он позволяет видеть общее.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от anonymous

Кстати rar лучше использовать для больших объемов данных. Почему? Потому что при попытке взять из архива что либо 7z производит его полную распаковку /а если архив скажем 50GB …/. Архив rar по другому устроен и у него такого безобразия как в 7z нет.

В RAR есть опция Solid-архива, которая включает режим как в 7Zip — ни добавить, ни выдрать из архива ничего нельзя без полной распаковки. Но зато такие тома архива получаются компактнее.

iZEN ★★★★★
()
Ответ на: комментарий от Egor_

ставлю только первую половину димов - нет ошибок ставлю только вторую половину димов - дохрена ошибок (10 из 60)

А надо по инструкции (User’s Manual) ставить: первыми заполняются слоты DIMM_A2 и DIMM_B2.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

В RAR есть опция Solid-архива, которая включает режим как в 7Zip — ни добавить, ни выдрать из архива ничего нельзя без полной распаковки. Но зато такие тома архива получаются компактнее.

Спасибо.

anonymous
()
Ответ на: комментарий от superuser

этот херня https://www.memtest86.com/ ?
если да, то у меня начинает подгорать…

ну, тогда подгорай
мемтест86 от PassMark - как оказалось, тоже херня
хотя она лучше, чем опенсорсный мемтест86+

как я и говорил, мемтест86 от PassMark нашёл ошибку (на тестах 7 и 9)
после этого я залез в биос и андерклокнул память: вместо номинальной частоты 2666МГц руками поставил 2400МГц

почему я так сделал?
потому что читал, что большинство современной памяти разогнанное - берут обычные чипы памяти (микрон), напаивают на планку, маркируют повышенной частотой (чем-то они её тестируют, конечно), и продают под своим лейблом (круциал) с ценником, соответствующим разогнанной частоте
чтобы избавиться от нежелательных последствий возможного разгона, я и решил сбавить частоту

я снова запустил мемтест86 и прогнал его два раза (т.е., получилось 8 полных циклов тестов) - он не нашёл ни одной ошибки!
я обрадовался, но ненадолго: когда я стал тестировать подсчётом md5, то ошибки никуда не исчезли, их осталось примерно столько же, как и раньше

то есть, свою проблему я андерклокингом не решил (придётся выбрасывать планку, жалко), но зато вывел мемтест на чистую воду )))

Egor_
() автор топика
Ответ на: комментарий от Egor_

я снова запустил мемтест86 и прогнал его два раза (т.е., получилось 8 полных циклов тестов) - он не нашёл ни одной ошибки!

А если подольше погонять? Там вроде бы есть настройка количества повторов циклов для тяжёлых случаев как у тебя.

superuser ★★★★☆
()
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от superuser

Там вроде бы есть настройка количества повторов цикло

есть, я пробовал поставить больше, но мне сказали, что в бесплатной версии я должен руками перезапускать тест после каждых 4 циклов )))

Egor_
() автор топика
Ответ на: комментарий от Egor_

мемтест86 от PassMark

Ну раз уж запустил одну проприетарь, то запусти и другую (mprime)))

Реально интересно. По ссылке, приведённой выше

https://github.com/integralfx/MemTestHelper/blob/master/DDR4%20OC%20Guide.md

высказаны некоторые соображения, как лучше запускать версию под оффтопик (prime95).

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от greenman

Если сделать предположение, что драйвер ntfs при загрузке каждый раз оказывается в области сбойной памяти… Надо попробовать сделать так, что бы он загрузился в другой участок памяти.

Прошу очередной ликбез.

Вы хотите сказать, каждый раз при каждой загрузке ядра - и само ядро и его модули всегда укладываются в одни и те же физические ячейки?

Т.е. - если ничего не обновлять и ничего не менять, то всегда один и тот же модуль будет лежать на одной и той же физической микросхеме (бракованной)? Это действительно так?

А чем тогда занимается CONFIG_RANDOMIZE_BASE?

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Вы хотите сказать, каждый раз при каждой загрузке ядра - и само ядро и его модули всегда укладываются в одни и те же физические ячейки?

Я высказал предположение. В том, что это так и есть, не уверен.

Кстати, а как далеко этот RANDOMIZE разбрасывает код? Для противостояния основным атакам далеко, казалось бы, не надо.

greenman ★★★★★
()
Ответ на: комментарий от greenman

как далеко этот RANDOMIZE разбрасывает код?

Виноват, не могу ничего сказать. Не компетентен.

-----------------
Просто мне упорно кажется, что теория с битой памятью притянута за уши при проблемах с чтением файлов с диска.

Если бы у меня была такая проблема - я бы наверняка грешил на диск в первую очередь. Там у него (у ST4000DM004) и cache свой, и какой-то загадочный «State-of-the-art cache and on-the-fly error-correction algorithms».

Сама RAM если бы была нестабильной - оно бы проявлялось не только в таком сценарии, как у ТС.

Мне так кажется.

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Так ты не прочитал, что ТС, путём убирания половины планок памяти, пришёл к однозначному выводу, что дело в ней?

Один эпизод о достижениях современного глюководства (комментарий)

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от greenman

Прочитал.
Просто теорию не понимаю, как в этом случае может не наблюдаться никаких других эффектов, кроме ошибок чтения с диска.

Тем более что результаты разных memtest у него противоречивы.

Вот и спрашиваю - как так получается, что именно драйвер ntfs всегда попадает на сбойный участок, а ничего больше не попадает.

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Вот и спрашиваю - как так получается, что именно драйвер ntfs всегда попадает на сбойный участок, а ничего больше не попадает.

Загадка.

greenman ★★★★★
()

Давай еще.

anonymous
()
Ответ на: комментарий от Toxo2

как так получается, что именно драйвер ntfs всегда попадает на сбойный участок, а ничего больше не попадает.

если верить memtestбезплюса, то сбойный участок занимает всего 2 МБайта, причём где-то в середине
на фоне 32Гбайтовой памяти это капля в море
то есть, шальные пули летали постоянно, но почти всегда мимо

думаю, что очень велика доля памяти, случайная модификация которой вообще никак не скажется на работе компа
ну, то есть, при современных объёмах памяти далеко не всё содержимое оперативки критически важно.

Egor_
() автор топика
Последнее исправление: Egor_ (всего исправлений: 2)
Ответ на: комментарий от Egor_

то есть, свою проблему я андерклокингом не решил (придётся выбрасывать планку, жалко), но зато вывел мемтест на чистую воду )))

Зачем выбрасывать? memmap

        memmap=nn[KMG]$ss[KMG]
                        [KNL,ACPI] Mark specific memory as reserved.
                        Region of memory to be reserved is from ss to ss+nn.
                        Example: Exclude memory from 0x18690000-0x1869ffff
                                 memmap=64K$0x18690000
                                 or
                                 memmap=0x10000$0x18690000
                        Some bootloaders may need an escape character before '$',
                        like Grub2, otherwise '$' and the following number
                        will be eaten.
anonymous
()
Ответ на: комментарий от anonymous

это мемтест сказал, что там только 2Мб
но у меня нет полного доверия к мемтесту, вдруг он большую часть не нашёл?

хорошо, в линуксе есть меммап
а как я оффтопику объясню, что у меня дыра в памяти? )))

Egor_
() автор топика
Ответ на: комментарий от greenman

запустил prime95 на винде, учёл рекомендации (размер ффт 800К, галка InPlace снята), пишет что будет тестировать 13Гб из 16 имеющихся
за 4 часа ничего не нашла
выключил, удалил )))

Egor_
() автор топика
Последнее исправление: Egor_ (всего исправлений: 1)
Ответ на: комментарий от anonymous

Зачем выбрасывать? memmap

спасибо, получилось через memmap
перед долларом, кстати, нужно три бэкслеша ставить )))

и для винды, оказывается, есть готовый драйвер
github.com/prsyahmi/BadMemory

Egor_
() автор топика
Ответ на: комментарий от Egor_

перед долларом, кстати, нужно три бэкслеша ставить

grub? Напиши, как именно правильно, может кому пригодится.

И как, большой участок памяти пришлось вырезать? Теперь на ntfs нет проблем?

greenman ★★★★★
()
Ответ на: комментарий от greenman

Теперь на ntfs нет проблем?

проблем нет
но я перетасовал планки димов, пока искал неисправную, и вспомнить в каком слоте неисправная стояла изначально, я уже не смогу
если и остались ещё ненайденные битые зоны памяти, то они из-за перетасовки ушли на другие адреса и уже не находятся внутри буфера драйвера ntfs

Напиши, как именно правильно, может кому пригодится.

В файле /etc/default/grub параметр нужно писать как
memmap=nn[KMG]\\\$ss[KMG]
Если параметр временный и вводится руками в GRUB после нажатия кнопки e, то бэкслеш должен быть один

И как, большой участок памяти пришлось вырезать?

а зачем этот участок пытаться уменьшать?
если он меньше 1% от всей планки, то экономия бессмысленна
Я вместо 2 МБайт раздул его с запасом до 32 МБайт

Egor_
() автор топика
Ответ на: комментарий от Egor_

Ты не один …

Скачет время в ОС (s3rjke)
Периодическое падение иксов (ert2rty)

anonymous
()
Ответ на: комментарий от greenman

блять
подождал подольше, и опять вылезли ошибки в md5-суммах
значит, 32 Мбайта маловато

Egor_
() автор топика
Ответ на: комментарий от greenman

И как, большой участок памяти пришлось вырезать?

пробовал исключать меммапом интервалы увеличивающихся размеров
сейчас дошёл до тестирования памяти с дырой в 512 МБайт (то есть, исключил по 256 МБайт в обе стороны от того адреса, который нашёлся мемтестом)
и всё равно md5-тест находит ошибки

короче, этот меммап полезен, только если есть инструмент, позволяющий найти все ошибочные адреса в памяти
но такого инструмента нет
в жопу всю эту возню, поеду завтра за новой планкой памяти
кстати, компьютерные магазины работают, несмотря на карантин, у них это называется режим «на вынос», лол

Egor_
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.