Архив заметок

ZFS. Отваливается диск после загрузки.

Просмотров: 6941Комментарии: 9
FreeBSDZFS

Намедни обзавелся тремя дисками WD Caviar Green по 3 ТБ. Счастья полные штаны smile Но за счастьем следовало разочарование. Итак, немного предыстории.

Диски были куплены для организации файлового хранилища, как бы пафосно это не звучало smile

Тазик используется как медиа сервер. Весь медиа контент воспроизводится через dune hd tv101 приставочку по протоколу SMB.

Естественно, я решил использовать ZFS для организации массива RAID5, RAID0 для таких дел как бе нелепо, а RAID1 из трех дисков не сложится, да и четвертый покупать пока не имеет смысла.

Я без задней мысли штампую:

# zpool create storage raidz ada1 ada2 ada3

Потом я создал каталоги и радостный стал переносить всякое добро с системного диска на новый массив.

После нескольких минут копирования, я увидел это в /var/log/messages:

(aprobe0:ahcich1:0:0:0): NOP. ACB: 00 00 00 00 00 00 00 00 00 00 00 00
(aprobe0:ahcich1:0:0:0): CAM status: ATA Status Error
(aprobe0:ahcich1:0:0:0): ATA status: d1 (BSY DRDY SERV ERR), error: 04 (ABRT )
(aprobe0:ahcich1:0:0:0): RES: d1 04 ff ff ff ff ff ff ff ff ff
(aprobe0:ahcich1:0:0:0): Error 5, Retries exhausted
(aprobe1:ahcich1:0:15:0): NOP. ACB: 00 00 00 00 00 00 00 00 00 00 00 00
(aprobe1:ahcich1:0:15:0): CAM status: ATA Status Error
(aprobe1:ahcich1:0:15:0): ATA status: d1 (BSY DRDY SERV ERR), error: 04 (ABRT )
(aprobe1:ahcich1:0:15:0): RES: d1 04 ff ff ff ff ff ff ff ff ff
(aprobe1:ahcich1:0:15:0): Error 5, Retries exhausted
(aprobe0:ahcich1:0:0:0): NOP. ACB: 00 00 00 00 00 00 00 00 00 00 00 00
(aprobe0:ahcich1:0:0:0): CAM status: ATA Status Error
(aprobe0:ahcich1:0:0:0): ATA status: d1 (BSY DRDY SERV ERR), error: 04 (ABRT )
(aprobe0:ahcich1:0:0:0): RES: d1 04 ff ff ff ff ff ff ff ff ff
(aprobe0:ahcich1:0:0:0): Error 5, Retries exhausted

Что показывал camcontrol devlist:

beast# camcontrol devlist
<SAMSUNG HD160JJ ZM100-47>         at scbus0 target 0 lun 0 (pass0,ada0)
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus2 target 0 lun 0 (pass2,ada2)
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus3 target 0 lun 0 (pass3,ada3)
<Generic- SD/MMC 1.00>             at scbus6 target 0 lun 0 (da0,pass4)
<Generic- Compact Flash 1.01>      at scbus6 target 0 lun 1 (da1,pass5)
<Generic- SM/xD-Picture 1.02>      at scbus6 target 0 lun 2 (da2,pass6)
<Generic- MS/MS-Pro 1.03>          at scbus6 target 0 lun 3 (da3,pass7)

Хм, первый диск отвалился.

Запустил более подробный вывод camcontrol:

beast# camcontrol devlist -v
scbus0 on ahcich0 bus 0:
<SAMSUNG HD160JJ ZM100-47>         at scbus0 target 0 lun 0 (pass0,ada0)
<>                                 at scbus0 target -1 lun -1 ()
scbus1 on ahcich1 bus 0:
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus1 target 0 lun 0 (pass1)
<>                                 at scbus1 target -1 lun -1 ()
scbus2 on ahcich2 bus 0:
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus2 target 0 lun 0 (pass2,ada2)
<>                                 at scbus2 target -1 lun -1 ()
scbus3 on ahcich3 bus 0:
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus3 target 0 lun 0 (pass3,ada3)
<>                                 at scbus3 target -1 lun -1 ()
scbus4 on ahcich4 bus 0:
<>                                 at scbus4 target -1 lun -1 ()
scbus5 on ahcich5 bus 0:
<>                                 at scbus5 target -1 lun -1 ()
scbus6 on umass-sim0 bus 0:
<Generic- SD/MMC 1.00>             at scbus6 target 0 lun 0 (da0,pass4)
<Generic- Compact Flash 1.01>      at scbus6 target 0 lun 1 (da1,pass5)
<Generic- SM/xD-Picture 1.02>      at scbus6 target 0 lun 2 (da2,pass6)
<Generic- MS/MS-Pro 1.03>          at scbus6 target 0 lun 3 (da3,pass7)
scbus-1 on xpt0 bus 0:
<>                                 at scbus-1 target -1 lun -1 (xpt0)

Притом dmesg всегда показывал, что диск как бе на месте и виден системе:

beast# dmesg -a | grep ada
ada0: <SAMSUNG HD160JJ ZM100-47> ATA-7 SATA 2.x device
ada0: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 152627MB (312581808 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad4
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada1: Previously was known as ad6
ada2 at ahcich2 bus 0 scbus2 target 0 lun 0
ada2: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada2: Previously was known as ad8
ada3 at ahcich3 bus 0 scbus3 target 0 lun 0
ada3: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada3: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada3: Command Queueing enabled
ada3: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada3: Previously was known as ad10

Вывод pciconf -lv был следующим:

beast# pciconf -lv
ahci0@pci0:0:31:2:      class=0x010601 card=0x82d41043 chip=0x3a228086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82801JI (ICH10 Family) SATA AHCI Controller'
    class      = mass storage
    subclass   = SATA
    bar   [10] = type I/O Port, range 32, base 0xac00, size  8, enabled
    bar   [14] = type I/O Port, range 32, base 0xa880, size  4, enabled
    bar   [18] = type I/O Port, range 32, base 0xa800, size  8, enabled
    bar   [1c] = type I/O Port, range 32, base 0xa480, size  4, enabled
    bar   [20] = type I/O Port, range 32, base 0xa400, size 32, enabled
    bar   [24] = type Memory, range 32, base 0xf9ffc000, size 2048, enabled
    cap 05[80] = MSI supports 16 messages enabled with 1 message
    cap 01[70] = powerspec 3  supports D0 D3  current D0
    cap 12[a8] = SATA Index-Data Pair
    cap 13[b0] = PCI Advanced Features: FLR TP

В BIOS'е ahci режим был включен изначально. Еще хотел бы обратить внимание:

В FreeBSD 9 версии device ahci вшит в ядро GENERIC, то есть нет необходимости добавлять в /boot/loader.conf опции

ahci_load="YES"
ahci_enable="YES"

Как это требовалось для FreeBSD <8

Статус пула выглядел следующим образом:

# zpool status
pool: storage
state: DEGRADED
status: One or more devices has been removed by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
scan: resilvered 36,5M in 0h2m with 0 errors on Wed Oct 24 15:11:44 2012
config:
        NAME                     STATE     READ WRITE CKSUM
        storage                  DEGRADED     0     0     0
          raidz1-0               DEGRADED     0     0     0
            1180438976994044890  REMOVED      0     0     0  was /dev/ada1
            ada2                 ONLINE       0     0     0
            ada3                 ONLINE       0     0     0
errors: No known data errors

После долгих раздумий и педолирования интернета, решение подсказали на офф. форуме FreeBSD.

В чем же была проблема и как избежать геморроя при использовании терабайтных дисков. Решение касается винтов WD и не только.

Эти диски имеют фичу AF - Advanced Format, т.е. имеют размер сектора в 4k, но на самом деле представляют сектор в размере 512b. Врут, негодники.

Создавать пул ZFS из сырых дисков не рекомендуется, т.к. ZFS отправляет операции I/O (ввода/вывода) не выровненными, что может очень сильно сказаться на производительности.

Поэтому необходимо сделать разделы жестких дисков по 1Мб.

Следующая проблема - показатель zfs ashift. Когда я создал пул из сырых дисков, этот показатель был равен:

beast# zdb | grep ashift
            ashift: 9

Что свидетельствует о том, что ZFS будет отправлять 512байтные IO, тогда как ashift: 12, отправляет 4K IO. Что и любят эти диски.

Если есть важные данные, сделайте резервную копию. У меня не было, я просто грохнул пул и принялся за исправление ошибок.

Делаем партиции:

# gpart create -s gpt ada(1,2,3)
# gpart add -t freebsd-zfs -b 2048 -a 4k -l disk(1,2,3) ada(1,2,3)

Создаем пул с ashift: 12

# gnop create -S 4096 /dev/gpt/disk1
# zpool create storage raidz gpt/disk1.nop gpt/disk2 gpt/disk3
# zpool export storage
# gnop destroy /dev/gpt/disk1.nop
# zpool import -d /dev/gpt storage

Это, что касается пула. Теперь собственно, что качается дисков. Есть у них неприятная вещь, как парковка головок при простое в 5 секунд. Про эту спецификацию можно почитать в интернетах, скажу, что это не есть хорошо для дисков, которые состоят в массиве ZFS. Быстрее выйдут из строя.

Из этой ситуации есть выход. Есть тулза от WD называется wdidle. Скачать ее можно с офф. сайта произвродителя или скачать The Ultimate Boot CD 5.11 по-моему. В этот диск входит эта утилита.

Небольшое видео про нее и как пользоваться.

В моем случае это не помогло. Оказалось, что сам диск был неисправен и по гарантии был заменен у продавца.

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

Убедитесь, что контроллер на материнской плате поддерживает такие диски, и свежий ли BIOS.

Комментариев: 9 RSS

1laforsh01-01-2013 15:27

Offtop, но

Тазик используется как медиа сервер. Весь медиа контент воспроизводится через dune hd tv101 приставочку по протоколу SMB.

Неоптимально. В этой ситуации использование NFS пошустрее будет. А уж если DLNA сервер настроить - совсем оптимальный вариант получится - контент до 20 гигов свободно воспроизводить позволит.

2ttys02-01-2013 08:31

>>а RAID1 из трех дисков не сложится

а у меня работает зеркало от 2х и до бесконечности

3Vladimir02-01-2013 16:53

Неоптимально. В этой ситуации использование NFS пошустрее будет. А уж если DLNA сервер настроить - совсем оптимальный вариант получится - контент до 20 гигов свободно воспроизводить позволит.

До NFS руки не дошли пока. Читал, что шустрее летает. Буду пробовать.

а у меня работает зеркало от 2х и до бесконечности

Это как? Вроде в RAID1 можно засунуть максимум 2 диска или нет?

4ttys04-01-2013 23:31

Вроде ))))

хоть 100 если есть желание, но это неоправданно

6laforsh09-01-2013 11:33

До NFS руки не дошли пока. Читал, что шустрее летает. Буду пробовать.

Тогда уж лучше пробуйте сразу dlna настроить на Дуне - оно еще пошустрее, чем через NFS работает

http://nmt200.ru/hand/padavan/dune-linux-term-utils-v0-4/#comment-11362

http://nmt200.ru/hand/padavan/dune-linux-term-utils-v0-4/#comment-10407

7Vladimir09-01-2013 12:02

Тогда уж лучше пробуйте сразу dlna настроить на Дуне - оно еще пошустрее, чем через NFS работает

У меня стоял mediatomb и к сожалению он не все файлы кушал. Дуня как раз подключалсь через dlna к нему.

Сейчас я хочу еще раз попробовать его довести до ума (если NFS не спасет). Хотя даже по smb блюреи идут без тормозов. Единственный плюс от dlna сервера - это скриптование в БД содержимого контента, например по годам, по жанрам и с адекватными названиями файлов, а то торрент релизеры называют как попало фильмы smile

http://nmt200.ru/hand/padavan/dune-linux-term-utils-v0-4/#comment-11362
http://nmt200.ru/hand/padavan/dune-linux-term-utils-v0-4/#comment-10407

Пока разберусь с mediatomb.

810Xer15-01-2013 10:33

По NFS нормально будет, у меня server 3x3Tb в raidz, в спальне спокойно смотрю весь контент на WDTV Live через Wi-Fi (5Ghz).

9Vladimir15-01-2013 17:54

смотрю весь контент на WDTV Live через Wi-Fi (5Ghz)

У меня по-старинке через кабель. Я еще помню настраивал NFS, у меня почему-то отображались только каталоги в корне и были пустые. У кого-нить есть рабочий конфиг для nfs? Поделитесь пжлста.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)