Archive for recovery

dmesg: Unrecovered read error — auto reallocate failed

// Ноябрь 17th, 2014 // No Comments » // hdparm, linux, recovery, smartctl

После внезапной перезагрузки одного сервера из-за сбоя питания — он отметился резким падением производительности, а один сервис вообще отказывался стартовать. Вывод лога dmesg сразу подсказал, в чем проблема:

 [ 105.283113] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
 [ 105.283113] ata2.00: BMDMA stat 0x64
 [ 105.283113] ata2.00: cmd c8/00:a0:b6:cb:5e/00:00:00:00:00/e3 tag 0 dma 81920 in
 [ 105.283113] res 51/40:00:4f:cc:5e/00:00:00:00:00/e3 Emask 0x9 (media error)
 [ 105.283113] ata2.00: status: { DRDY ERR }
 [ 105.283113] ata2.00: error: { UNC }
 [ 105.309608] ata2.00: configured for UDMA/133
 [ 105.309632] sd 1:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK
 [ 105.309639] sd 1:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]
 [ 105.309646] Descriptor sense data with sense descriptors (in hex):
 [ 105.309650] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
 [ 105.309664] 03 5e cc 4f
 [ 105.309670] sd 1:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed
 [ 105.309678] end_request: I/O error, dev sda, sector 56544335

И пока сервер ждет замены накопителя с этим нужно что-то сделать.
Нам потребует две утилиты hdparm и smartctl,
(далее…)

Корректная замена SATA дисков на горячую в linux

// Июль 31st, 2013 // 2 комментария » // harware, linux, RAID, recovery

Как оказалось SATA диски не такие уж и HotSwap и требуются некоторые действия, что бы все корретно заработало.
Для начала нужно отмонтировать или вывести из рейд массива диск.

Как извлечь диск из рейда md можно узнать здесь.

После этого сбросить весь кэш контроллера, т.е. провести синхронизацию данных на диске до актуальной:

sync

Извлечь устройство командой:

echo 1 >/sys/block/sdX/device/delete

где sdX — имя диска, например sda, sdb, sdc…
или по номеру контроллера:

echo 1 > /sys/bus/scsi/devices/targetX:0:0/X:0:0:0/delete

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

echo "- - -" >/sys/class/scsi_host/hostX/scan

где Х номер шины, можно узнать из dmesg место где стоял старый диск (host’ы нумеруются с 0, а не с 1, а в dmesg ata устройства нумеруются с 1). Если расположение диска неизвестно — можно сделать для всех хост-контроллеров, ничего страшного не произойдет, данные не потеряются, файловая система не поломается, возможен только небольшой лаг в доступе к активным дискам.

Linux: Установка загрузчика GRUB на программный RAID

// Январь 23rd, 2013 // 1 Comment » // boot-loader, grub, linux, md, RAID, recovery

Имеем два диска собранные в зеркало, через dm:
/dev/sda1 + /dev/sdb1 => /dev/md0
/dev/sda5 + /dev/sdb5 => /dev/md1

Проверяем есть ли активный раздел:

# file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0xfd, starthead 32, startsector 2048, 1169408 sectors; partition 2: ID=0x5, starthead 12, startsector 1173502, 76949506 sectors
# file -s /dev/sdb
/dev/sdb: x86 boot sector; partition 1: ID=0xfd, active, starthead 32, startsector 2048, 1169408 sectors; partition 2: ID=0x5, starthead 12, startsector 1173502, 76949506 sectors, code offset 0x63

как видно, на диске sda не указан активный раздел и не установлен загрузчик.
Что бы указать раздел активным, например первый:

# fdisk /dev/sda
...
Command (m for help): m
Command action
   a   toggle a bootable flag
...
   w   write table to disk and exit

Command (m for help): a
Partition number (1-9): 1

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

Установка GRUB2:
В Debian и прочих Ubuntu достаточно ввести:

# dpkg-reconfigure grub-pc

два раза нажать OK и выбрать звездочками оба диска и еще раз ОК
или:

# grub-install /dev/sda
# grub-install /dev/sdb

если еще выполнить:

# update-grub

изменится меню (конфигурационный файл), появится возможность выбора диска для загрузки ОС.

Старый GRUB:

# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)

Результат работы будет такой:

   grub> root (hd1,0)
   root (hd1,0)
    Filesystem type is ext2fs, partition type 0xfd
   grub> setup (hd1)
   setup (hd1)
    Checking if "/boot/grub/stage1" exists... no
    Checking if "/grub/stage1" exists... yes
    Checking if "/grub/stage2" exists... yes
    Checking if "/grub/e2fs_stage1_5" exists... yes
    Running "embed /grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
   succeeded
    Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/grub.conf"... succeeded
   Done.
   grub> quit
   quit

Проверим результат:

# file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0xfd, active, starthead 32, startsector 2048, 1169408 sectors; partition 2: ID=0x5, starthead 12, startsector 1173502, 76949506 sectors, code offset 0x63
# file -s /dev/sdb
/dev/sdb: x86 boot sector; partition 1: ID=0xfd, active, starthead 32, startsector 2048, 1169408 sectors; partition 2: ID=0x5, starthead 12, startsector 1173502, 76949506 sectors, code offset 0x63

Замена сбойного диска в программном RAID-массиве

// Январь 23rd, 2013 // 12 комментариев » // linux, md, RAID, recovery

Изначально имеем два диска /dev/sda и /dev/sdb, собранные в RAID1, по типу:
/dev/sda1 + /dev/sdb1 => /dev/md0
/dev/sda5 + /dev/sdb5 => /dev/md1

Диск /dev/sda вышел из стоя:

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[0]
      1950708 blocks super 1.2 [2/1] [U_]

md0 : active raid1 sdb1[0]
      584692 blocks super 1.2 [2/1] [U_]

—-

Нужно извлечь сбойный sda из массива, для этого помечаем его сбойным для всех массивов:
(далее…)