TGViewer
Admin Guides | Сисадмин Admin Guides | Сисадмин @admguides · 12K subscribers
Post #3174 769
dm-dust: как устроить диску bad sectors без поломки

Представьте: диск исправен, SMART ничего подозрительного не показывает, но чтение определённого сектора внезапно возвращает Input/output error.

В Linux такое можно воспроизвести специально. Для этого есть dm-dust - target Device Mapper, который имитирует повреждённые блоки и позволяет проверить, как файловая система или приложение переживёт ошибку чтения.

1️⃣Создаём тестовый диск

Чтобы не рисковать настоящим накопителем, используем файл и loop-устройство:

truncate -s 64M /tmp/dust.img
LOOP=$(sudo losetup --find --show /tmp/dust.img)
SECTORS=$(sudo blockdev --getsz "$LOOP")

echo "0 $SECTORS dust $LOOP 0 512" |
sudo dmsetup create dusttest


Теперь /dev/mapper/dusttest выглядит как обычное блочное устройство. Пока все операции проходят без искусственных ошибок.

2️⃣ Ломаем конкретный блок

Допустим, хотим сделать нечитаемым блок №64:

sudo dmsetup message dusttest 0 addbadblock 64
sudo dmsetup message dusttest 0 enable


Пробуем прочитать его напрямую:

sudo dd if=/dev/mapper/dusttest \
of=/dev/null bs=512 count=1 skip=64 \
iflag=direct


Вместо данных получим:

dd: error reading '/dev/mapper/dusttest':
Input/output error


Причём ошибка возникает в Device Mapper. Сам backing storage остаётся исправным.

3️⃣ Проверяем восстановление

У dm-dust есть интересная особенность: запись в повреждённый блок проходит успешно и удаляет его из списка bad blocks.

Так имитируется поведение диска, который переназначил проблемный сектор.

Для проверки файловой системы можно сначала создать её на /dev/mapper/dusttest, записать тестовые файлы, а затем включить ошибки на выбранных блоках данных или метаданных.

Дальше смотрим:

sudo dmesg -w
sudo dmsetup status dusttest


Интересно, вернёт ли приложение EIO, продолжит ли файловая система работать и не перейдёт ли она в read-only режим. Конкретная реакция зависит от файловой системы и того, какой блок оказался недоступен.

После эксперимента:

sudo dmsetup message dusttest 0 disable
sudo dmsetup message dusttest 0 clearbadblocks
sudo dmsetup remove dusttest
sudo losetup -d "$LOOP"
  • 👍 4
  • ❤ 3
  • 🔥 2
More from @admguides
  1. Oct 14, 2026🔴В 2025 году Россияне заработали 5,3 млрд рублей на арбитраже криптовалют По данным Минфи…
  2. Oct 14, 2026АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ Проект «Terminal» стал крупнейшей библиотекой бесплатного об…
  3. Oct 14, 2026kmalloc_obj: зачем Linux типизированное выделение памяти В коде ядра легко допустить непри…
  4. Oct 14, 2026Переход с VMware: как не начать с нуля и получить больше возможностей Смена платформы вирт…
  5. Oct 14, 2026Два антивируса в Windows могут начать бороться друг с другом Инженер Microsoft Рэймонд Чен…
  6. Oct 13, 2026⚡️️️️️️ Не работает корпоративная связь? Труконф поможет восстановить коммуникации Если из…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →