Linux bad block remap

Really Remapping Bad Blocks on disk

I have a SATA drive which has a total of 8 bad blocks identified by the badblocks program. Supposedly the drive firmware should be able to remap them and substitute spares. I’ve run badblocks in -n mode to rewrite the partition in question, and run e2fsck multiple times. Nothing changes, always the same 8 bad blocks. When I run smartctl it shows the Reallocated_Sector_Ct at 0 . How can I get the firmware to actually remap the 8 bad blocks?

3 Answers 3

The drive can only attempt to re-write or re-allocate unreadable sectors if new data is provided in a write request for the full sector. badblocks does not do that, and so, nothing whatsoever changes.

The «non-destructive» read-write mode works along these lines:

  1. read original data
  2. write test pattern
  3. read test pattern
  4. write original data

If this already fails in the first step, i.e. no data could be read, then no write can performed for that sector either, as there is no way to restore original data afterwards. This would be a destructive write, but you specifically requested the non-destructive variant, so it’s not done.

The «non-destructive» method can still fail to restore original data for other reasons too, so you should never run badblocks on a drive you want to keep data, anyway.

If you want to do this with badblocks regardless, then you have to make use of its -w write-mode — which by default overwrites all your data, so you want to narrow down the range to the specific sector ranges that should be overwritten using the badblocks -w device [last_block [first_block]] optional parameter form. You can determine those sectors by running a read-only badblocks test first.

Block 1000 is defective, so overwrite this block specifically:

# badblocks -w /dev/foobar 1000 1000 

However, this will still fail. Why? Because badblocks uses a default blocksize of 1024 bytes.

This is wrong for devices with 512-byte sector size — badblocks would overwrite two sectors instead of one, causing additional damage — and also wrong for devices with 4096-byte sectors — badblocks would write one partial sector only, which does not work for reallocating sectors as you have to write a full block of data.

Читайте также:  Установить mysql сервер linux

So for both commands above, you have to specify the correct blocksize (physical sector size) of your drive (512 or 4096 or maybe something else).

With changed blocksize the reported block numbers change accordingly:

# badblocks -b 512 /dev/foobar 2000 # badblocks -b 4096 /dev/foobar 250 

And you can adapt the write commands accordingly:

# badblocks -b 512 -w /dev/foobar 2000 2000 # badblocks -b 4096 -w /dev/foobar 250 250 

This should give the drive a chance to reallocate the offending sector.

If it still fails there is another possiblity: if the given device is a partition or otherwise logical drive and it’s not aligned to the physical drive, all writes would turn out to be non-aligned so you’d end up writing 4096 bytes to two partial 4096-byte sectors.

It would not relocate the targeted sector and instead partially damage data in an adjacent sector.

So there is a certain risk of causing further data loss with this method.

Источник

badblocks — ремапит битые блоки?

Ремапит найденные бэды, так чтобы система впоследствии их не использовала?

Приснилось или бабки у подъезда нашептали?

на stackoverflow написали — it will force remap ..

Имели ввиду, что возможно это ускорит обнаружение самим диском бэдблока и сам диск его заремапит. (smartctl . reallocated. )

Сам badblocks ничего кроме прочитать/записать блок с/на диск не умеет (типа dd)

sdio ★★★★★ ( 02.11.14 10:27:14 MSK )
Последнее исправление: sdio 02.11.14 10:28:37 MSK (всего исправлений: 2)

Так ремап сам произойдет? Или мне надо собрать все

46173630done, 2:40:23 elapsed. (2/0/0 errors)
46173631done, 2:40:26 elapsed. (3/0/0 errors)
52918448done, 3:30:28 elapsed. (4/0/0 errors)
52918449done, 3:30:31 elapsed. (5/0/0 errors)
52918450done, 3:30:34 elapsed. (6/0/0 errors)
52918451done, 3:30:37 elapsed. (7/0/0 errors)
88980500done, 8:28:48 elapsed. (8/0/0 errors)
88980501done, 8:28:51 elapsed. (9/0/0 errors)
88980502done, 8:28:54 elapsed. (10/0/0 errors)

которые он выдал и что-то делать ещё руками?

которые он выдал и что-то делать ещё руками?

этот файл можно использовать при создании fs (ext4)

 -l filename Read the bad blocks list from filename. Note that the block numbers in the bad block list must be generated using the same block size as used by mke2fs. As a result, the -c option to mke2fs is a much simpler and less error-prone method of checking a disk for bad blocks before formatting it, as mke2fs will auto‐ matically pass the correct parameters to the badblocks program. 

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

Читайте также:  Blocking ips in linux

Источник

Самотестирование диска с помощью smartctl

Существуют два вида тестов — foreground (когда диск в ответ на все команды имеет статус CHECK CONDITION) и background — когда диск остается работоспособным.
Тесты бывают short и long.
Short — ограничен по времени и тестирует только часть диска.
Long — аналогичен финальному тестированию на производстве, не ограничен по времени и тестирует весь диск.

Запускаем “длинный” тест, который можно запускать прямо во время работы системы:

sudo smartctl -t long /dev/sdb

Узнать сколько времени займет тот или иной тест можно командой:

sudo smartctl -c /dev/sdc . Self-test execution status: ( 249) Self-test routine in progress. 90% of test remaining. Total time to complete Offline data collection: ( 1211) seconds. .

После того как он закончится смотрим результат с помощью команды smartctl -l selftest /dev/sdb:

sudo smartctl -l selftest /dev/sdb smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed: read failure 90% 28243 1048784

Также можно протестировать только часть диска. Команда:

sudo smartctl -t select,10-20 /dev/sdc

протестирует сектора с 10 по 20 включительно.
Кроме того, можно одной командой протестировать несколько диапазонов:

sudo smartctl -t select,0-10 -t select,5-15 -t select,10-20 /dev/sdc

Запустить foreground тест можно, указав опцию -C:

sudo smartctl -t long -C /dev/sdc

Короткий foreground тест, который принудительно обновит значения параметров SMART можно запустить так:

sudo smartctl -t offline /dev/sda

Утилиты sg_verify и sg_reasign

Пакет утилит sg3-utils предназначен для работы с дисками на низком уровне, поддерживающими полный набор команд SCSI. В настоящее время — это диски с интерфейсом SAS (но не SATA).
Обнаружить нечитающийся сектор можно, например, с помощью команды dd:

sudo dd if=/dev/sdb of=/dev/null bs=4096

Затем, когда dd сообщит об ошибке, с помощью sg_verify можно удостовериться, что проблема именно в том секторе:

sudo sg_verify --lba=1193046 /dev/sdb verify (10): Fixed format, current; Sense key: Medium Error Additional sense: Unrecovered read error Info fld=0x123456 [[1193046]] Field replaceable unit code: 228 Actual retry count: 0x008b medium or hardware error, reported lba=0x123456

Зетем можно проверить, что размер GLIST не очень велик и там есть место:

sudo sg_reassign --grown /dev/sdb >> Elements in grown defect list: 0

Теперь можно выполнить переназначкение сектора и проверить, что размер GLIST изменился:

sudo sg_reassign --address=1193046 /dev/sdb sudo sg_reassign --grown /dev/sdb >> Elements in grown defect list: 1

Размер GLIST изменился на 1 — чего и следовало ожидать. В результате в переназначаемом секторе будет записан заданный производителем паттерн (либо — если сектор все-же удалось прочесть — его содержимое не изменится).
Также утилита sg_reassign может выполнить переназначение группы секторов.
Для дисков с интерфейсами SAS и SATA наборы команд для работы с переназначаемыми секторами различны. Диск с интерфейсом SAS (неважно подключен он к SATA или SAS контроллеру) способен безусловно переназначить группу секторов в резервную область независимо от того, читаемы сектора или нет. Использование sg_reasign для диска SATA скорее всего никакого эффекта не даст.

Читайте также:  Verifying dmi pool data linux

Переназначение секторов для дисков с интерфейсом SATA

Для переназначения секторов на дисках с интерфейсом SATA можно просто дать команду на перезапись этого сектора, либо воспользоваться hdparm:

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

sudo hdparm --repair-sector 1000 /dev/sda
for i in ; do sudo hdparm --repair-sector $i /dev/sda; done

Аналог MHDD под Linux

С удивлением обнаружил наличие под Linux некоторого аналога (по крайней мере визуально) популярной программы под DOS — MHDD.
Речь идет об утилите, входящей в состав SystemRescueCd — whdd.

Источник

Оцените статью
Adblock
detector