badblocks принимает только 32-битное целое число как начальные / конечные значения

У меня есть 4TB диск с размером блока 4096 байтов. Я хочу проверить очень специфический набор блоков, около 700 000 000 блоков или около того для плохих секторов.

Тем не менее, badblocks видимому, поддерживает только int32 качестве числа остановки и начала блока, что означает, что мне невозможно указать этот диапазон блоков.

Есть ли другой способ сканирования этого диска для badblocks? Я не хочу ждать 7 часов, которые нужно предпринять, чтобы протестировать весь диск. Это единственный диск из массива mdadm поэтому он не содержит полезной файловой системы.

Скажите badblocks чтобы использовать больший размер блока, и он будет работать выше 2 ТБ. Я использовал это на диске WD 6TB:

 badblocks -b 4096 -v /dev/sda 

Патч для ограничения плохих блоков до 2 ^ 32

Похоже, что это исправление, сделанное для плохих блоков, чтобы добавить это конкретное ограничение. См. Здесь, озаглавленный: Re: [PATCH 04/25] libext2fs: отклонить 64-битные номера блокировок .

 From: "Darrick J. Wong" <darrick.wong <at> oracle.com> Date: Wed, 23 Oct 2013 19:43:32 -0400 Subject: [PATCH] libext2fs: reject 64bit badblocks numbers Don't accept block numbers larger than 2^32 for the badblocks list, and don't run badblocks on them either. Signed-off-by: Darrick J. Wong <darrick.wong <at> oracle.com> Signed-off-by: Theodore Ts'o <tytso <at> mit.edu> 
  • Источник для badblocks является частью базы кода e2fsprogs. Репозиторий git доступен здесь .
  • Главная страница проекта находится здесь .
  • Патч к базе кода, который исправляет эту проблему, выглядит следующим образом: libext2fs: отклонять 64-битные номера блокировок .

Поддержка не будет добавлена ​​в badblocks?

Похоже, что badblocks тоже не будет иметь эту функцию в обозримом будущем.

excerpt – Re: [PATCH 18/31] libext2fs: Badblocks должен правильно обрабатывать 48-битные номера блоков

Да, я думаю, что badblocks – это рудимент на данный момент, и для огромных дисковых массивов почти наверняка блокировка замены будет передаваться в LVM, массиве хранения или уровне жесткого диска. Поэтому было бы проще просто заставить mke2fs выдать ошибку, если есть попытка передать ему 64-битный номер блока.

  - Ted 

Другой способ сделать это?

Я тщетно искал, чтобы найти какую-то вилку badblocks или альтернативу ей, но ничего не нашел. Ваши единственные возможности – использовать коммерческий инструмент, такой как SpinRite или инструмент с открытым исходным кодом HDAT2 . Вы также можете использовать один из многих приспособлений для фитнеса для дисков (DFT), которые предоставляются производителями жестких дисков. Возможно, один из них позволит вам пройти мимо барьера 2 ^ 32.

Что делать?

Из вариантов на столе у ​​меня был хороший успех с HDAT2 и SpinRite, поэтому я, скорее всего, буду использовать их в этом порядке, чтобы попробовать эту область блоков в диапазоне 700M.