1

Tl; dr: как мне исправить неисправный блок на 1 диске в массиве RAID1?

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

Это моя ситуация: у меня есть два диска по 2 ТБ (той же модели), настроенных в массиве RAID1, управляемом mdadm . Около 6 месяцев назад я заметил первый плохой блок, когда SMART сообщил об этом. Сегодня я заметил больше, и сейчас пытаюсь это исправить.

Эта страница HOWTO, кажется, является единственной статьей, на которую все ссылаются, чтобы исправить плохие блоки, о которых сообщает SMART. Это отличная страница, полная информации, однако она довольно устарела и не соответствует моим конкретным настройкам. Вот как мой конфиг отличается:

  • Вместо одного диска я использую два диска в массиве RAID1. Один диск сообщает об ошибках, а другой в порядке. HOWTO написан только для одного диска, что вызывает различные вопросы, такие как «использовать ли эту команду на дисковом устройстве или устройстве RAID»?
  • Я использую GPT, который не поддерживает fdisk. Вместо этого я использую gdisk и надеюсь, что он дает мне ту же информацию, что и мне

Итак, приступим к этому. Это то, что я сделал, но, похоже, это не работает. Пожалуйста, не стесняйтесь дважды проверять мои расчеты и метод на наличие ошибок. Сообщения об ошибках диска - /dev /sda:

# smartctl -l selftest /dev/sda
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.4.4-2-ARCH] (local build)
Copyright (C) 2002-11 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  Short offline       Completed: read failure       90%     12169         3212761936

При этом мы понимаем, что ошибка находится на LBA 3212761936. Следуя HOWTO, я использую gdisk, чтобы найти начальный сектор, который будет использоваться позже при определении номера блока (так как я не могу использовать fdisk, поскольку он не поддерживает GPT):

# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): CFB87C67-1993-4517-8301-76E16BBEA901
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      3907029134   1.8 TiB     FD00  Linux RAID

Используя tunefs я нахожу размер блока 4096 . Используя эту информацию и расчеты из HOWTO, я заключаю, что рассматриваемый блок ((3212761936 - 2048) * 512) / 4096 = 401594986 .

Затем HOWTO направляет меня к debugfs чтобы посмотреть, используется ли блок (я использую устройство RAID, так как ему нужна файловая система EXT, это была одна из команд, которые смутили меня, так как я сначала не знал, следует ли мне использовать /dev /sda или /dev /md0):

# debugfs
debugfs 1.42.4 (12-June-2012)
debugfs:  open /dev/md0
debugfs:  testb 401594986
Block 401594986 not in use

Таким образом, блок 401594986 является пустым пространством, я должен быть в состоянии переписать его без проблем. Перед тем, как написать ему, я постараюсь убедиться, что он действительно не может быть прочитан:

# dd if=/dev/sda1 of=/dev/null bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000198887 s, 20.6 MB/s

Если блок не может быть прочитан, я бы не ожидал, что это сработает. Тем не менее, это так. Я повторяю, используя /dev/sda , /dev/sda1 , /dev/sdb , /dev/sdb1 , /dev/md0 и +-5 для номера блока для поиска плохого блока. Все работает Я пожимаю плечами и продолжаю выполнять запись и синхронизацию (я использую /dev /md0, потому что я полагал, что изменение одного диска, а не другого может вызвать проблемы, таким образом оба диска перезаписывают поврежденный блок):

# dd if=/dev/zero of=/dev/md0 bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000142366 s, 28.8 MB/s
# sync 

Я ожидал бы, что запись в поврежденный блок приведет к тому, что диски переназначат блок на хороший, однако выполнение другого теста SMART показывает иначе:

# 1  Short offline       Completed: read failure       90%     12170         3212761936

Вернуться на площадь 1. В общем, как бы я исправить неисправный блок на 1 диске в массиве RAID1? Я уверен, что я не сделал что-то правильно ...

Спасибо за ваше время и терпение.

0