Намедни обзавелся тремя дисками WD Caviar Green по 3 ТБ. Счастья полные штаны Но за счастьем следовало разочарование. Итак, немного предыстории.
Диски были куплены для организации файлового хранилища, как бы пафосно это не звучало
Тазик используется как медиа сервер. Весь медиа контент воспроизводится через 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 режим был включен изначально. Еще хотел бы обратить внимание:
Статус пула выглядел следующим образом:
# 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 по-моему. В этот диск входит эта утилита.
Небольшое видео про нее и как пользоваться.
В моем случае это не помогло. Оказалось, что сам диск был неисправен и по гарантии был заменен у продавца.
Комментариев: 9 RSS
1laforsh01-01-2013 15:27
Offtop, но
Неоптимально. В этой ситуации использование NFS пошустрее будет. А уж если DLNA сервер настроить - совсем оптимальный вариант получится - контент до 20 гигов свободно воспроизводить позволит.
2ttys02-01-2013 08:31
>>а RAID1 из трех дисков не сложится
а у меня работает зеркало от 2х и до бесконечности
3Vladimir02-01-2013 16:53
До NFS руки не дошли пока. Читал, что шустрее летает. Буду пробовать.
Это как? Вроде в RAID1 можно засунуть максимум 2 диска или нет?
4ttys04-01-2013 23:31
5ttys04-01-2013 23:37
для теста я делал из 6_ти дисков
6laforsh09-01-2013 11:33
Тогда уж лучше пробуйте сразу 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
У меня стоял mediatomb и к сожалению он не все файлы кушал. Дуня как раз подключалсь через dlna к нему.
Сейчас я хочу еще раз попробовать его довести до ума (если NFS не спасет). Хотя даже по smb блюреи идут без тормозов. Единственный плюс от dlna сервера - это скриптование в БД содержимого контента, например по годам, по жанрам и с адекватными названиями файлов, а то торрент релизеры называют как попало фильмы
Пока разберусь с mediatomb.
810Xer15-01-2013 10:33
По NFS нормально будет, у меня server 3x3Tb в raidz, в спальне спокойно смотрю весь контент на WDTV Live через Wi-Fi (5Ghz).
9Vladimir15-01-2013 17:54
У меня по-старинке через кабель. Я еще помню настраивал NFS, у меня почему-то отображались только каталоги в корне и были пустые. У кого-нить есть рабочий конфиг для nfs? Поделитесь пжлста.
Вы можете войти под своим логином или зарегистрироваться на сайте.