Заменяем диск в zfs raidz
Замена диска в RAID массиве — потенциально опасная операция. Если в процессе замены заменяющий диск даст сбой, будут проблемы, от неприятных до фатальных. ZFS — надежная система. И в большинстве случаев выдерживает такую проблему. Но не всегда. Давайте аккуратно разберемся как заменять диск и каких действий избегать.Прим. Серию экспериментов для этого поста проводил на виртуальной машине с nas4free 9.0.0.1 rev 249. Но на практике и на живом железе многократно менял диски в zfs raidz. И даже сталкивался с проблемой падения заменяющего диска. Так что с уверенностью скажу — на живом железе всё точно также. Только страшнее 🙂
ВАЖНО. Самое вредное, что можно сделать — это наобум набирать разные команды, особенно с ключём -f
См пример того, как подобная команда привела к тому, что пул придётся бекапить, разбирать и собирать по новой. И это ещё повезло — команды есть и более деструктивные.
1. IMHO заменять диски надо через командную строку. Это гибче, функциональные и проще, чем через вебгуй. Как делать это через вебгуй — я не знаю, извините.
2. Заменяющий диск должен быть такого же объёма (или большего) как заменяемый. Обязательно проверьте его перед использованием, например. Падение диска в процессе замены — неприятная штука. Если этот диск ранее использовался в zfs пуле, например для тестов — обнулите его.
zpool labelclear /dev/da0
3. Определитесь возможностью использования заменяемого диска в процессе замены (Подробнее). Если с него хоть что-то читается, у вас есть свободный SATA порт и временное место ещё под один диск — подключите заменяющий диск параллельно заменяемому. Это улучшит шансы на хороший исход если что-то пойдёт не так.
Если заменяемый диск мертв или портов не хватает — переведите его в автономный режим.
nas4free:~# zpool offline Pool ada3
nas4free:~# zpool status
pool: Pool
state: DEGRADED
status: One or more devices has been taken offline 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 2.42G in 0h5m with 0 errors on Wed Mar 20 19:01:01 2013
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
478512335560695467 OFFLINE 0 0 0 was /dev/ada3
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
errors: No known data errors
4. Теперь внимательно смотрим на наш массив, на чем он сделан. Возможно много вариантов, но реально — три. На сырых дисках, на .nop устройствах и на gpt разделах. (устройства выглядят соответственно как ada0, ada0.nop и что-то вроде /dev/gpt/disk12WDG1708)
Наиболее надёжный вариант во FreeBSD — на gpt разделах, как это делать руками — см. здесь. Но если вы создавали массив через вебгуй nas4free (как и я), то массив был создан на nop устройствах поверх сырых дисков.
По результатам проведённых опытов (см подробнее ниже) я считаю, что после создания массива от .nop устройств надо избавиться. Если этого не сделать — увеличивается вероятность при замене диска в худшем случае (падение заменяющего диска в процессезамены) потерять массив. Напишу про удаление .nop отдельный пост. Пожалуй, если вы не удалили .nop устройства раньше, их стоит удалить перед заменой диска.
5. Собственно замена.
nas4free:~# zpool replace Pool ada3 ada4
nas4free:~# zpool status
pool: Pool
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Wed Mar 20 18:30:56 2013
299M scanned out of 7.29G at 17.6M/s, 0h6m to go
98.1M resilvered, 4.00% done
config:
NAME STATE READ WRITE CKSUM
Pool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
replacing-0 ONLINE 0 0 0
ada3 ONLINE 0 0 0
ada4 ONLINE 0 0 0 (resilvering)
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
Если меняем диск, который перевели в автономный режим — команда замены может выгдядеть как
nas4free:~# zpool replace Pool 478512335560695467 ada4
Вот собственно и всё. Начинается замена, за которой можно наблюдать командой status (или через вебгуй nas4free).
Это если всё было ОК.
Давайте рассмотрим возможные проблемы
Пусть у нас в процессе замены упал заменяющий диск
nas4free:~# zpool status pool: Pool
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Wed Mar 20 18:30:56 2013
5.90G scanned out of 7.29G at 1/s, (scan is slow, no estimated time)
514M resilvered, 80.98% done
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
replacing-0 DEGRADED 0 0 0
ada3 ONLINE 0 0 0
16242751459157794503 UNAVAIL 0 0 0 was /dev/ada4
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
errors: No known data errors
Если у вас такое произошло, упавший диск надо попытаться отключить.
nas4free:~# zpool detach Pool 16242751459157794503
nas4free:~# zpool status
pool: Pool
state: ONLINE
scan: resilvered 514M in 0h7m with 0 errors on Wed Mar 20 18:38:48 2013
config:
NAME STATE READ WRITE CKSUM
Pool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ada3 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
Если всё получилось — везение на вашей стороне. Если нет и диск не отключается — имеем редкую неприятную проблему, см. ZFS: Cannot replace a replacing device
Аналогично, используем detach в случае, если в процессе замены стали недоступны оба диска — и заменяемый и заменяющий (убедитесь только, что дело в дисках, а не в гнилых кабелях)
nas4free:~# zpool status pool: Pool
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Wed Mar 20 18:42:22 2013
6.69G scanned out of 7.29G at 1/s, (scan is slow, no estimated time)
257M resilvered, 91.72% done
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
replacing-0 UNAVAIL 0 0 0
2050528262512619809 UNAVAIL 0 0 0 was /dev/ada3
14504872036416078121 UNAVAIL 0 0 0 was /dev/ada4
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
nas4free:~# zpool detach Pool 2050528262512619809
nas4free:~# zpool status pool: Pool
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using ‘zpool online’.
see: http://www.sun.com/msg/ZFS-8000-2Q
scan: resilvered 257M in 0h6m with 0 errors on Wed Mar 20 18:48:39 2013
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
14504872036416078121 UNAVAIL 0 0 0 was /dev/ada4
ada2 ONLINE 0 0 0
ada1 ONLINE 0 0 0
errors: No known data errors
Отрывая диски от виртуальной машины мне удалось получить и более тяжёлую ситуацию
nas4free:~# zpool status
no pools available
nas4free:~# zpool import
pool: Pool
id: 8374523812252373009
state: UNAVAIL
status: One or more devices are missing from the system.
action: The pool cannot be imported. Attach the missing
devices and try again.
see: http://www.sun.com/msg/ZFS-8000-3C
config:
Pool UNAVAIL insufficient replicas
raidz1-0 UNAVAIL insufficient replicas
replacing-0 ONLINE
ada1.nop ONLINE
ada2.nop ONLINE
15699628039254375131 UNAVAIL cannot open
13721477516992971685 UNAVAIL cannot open
Видно, что пул не виден и не может быть импортирован. Фактически, информация пропала. Почему так произошло есть только предположение. В предыдущем случае пул был на сырых дисках, ada0, при этом диски были последовательно подсоединены к SATA контроллеру. Во втором случае пул был построен на nop устройствах, ada0.nop, а диски подсоединены к портам контроллера вперемешку. В принципе, ни то ни другое обычно не представляет никакой проблемы, zfs всё находит и собирает. Но, как видим, в сложном случае при наложении одного на другое возможна проблема.
ЕМНИП в профильной ветке было сообщение от камрада, который получил подобную проблему при переносе пула на другой компьютер. Он сумел её решить, переставляя диски по портам контроллера с целью подобрать «правильную» последовательность.
Для уменьшения места для проблем советую удалить nop устройства, они нужны только при создании пула. А общее решение (для FreeBSD и Linux, но не рекомендованное под Solaris) — массивы на gpt разделах, ссылка была выше. К сожалению, если массив уже создан — это благое пожелание. Так как переделать массив на сырых дисках в массив на gpt разделах можно только его предварительно разрушив 🙁
Замена диска в RAIDZ, созданном на gpt метках
Пока болел, один из дисков моего массива raidz2 вылетел. Полтора десятка переназначенных секторов. Что важнее — короткий SMART тест не проходит — ошибка по чтению на 40%. Купил новый (тема отдельного поста), заменил, сейчас идёт процесс восстановления. Но что-то мне старый пост на тему замены диска не очень понравился, пишу новый1. Состояние пула после выключения NAS, извлечения дефективного. Напомню, это raidz2 с двумя дисками избыточности, то есть даже вылет ещё одного диска сейчас на целостность данных не повлияет.nas4free: ~# zpool status Pool
pool: Pool
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-2Q
scan: resilvered 1000K in 0h0m with 0 errors on Thu Feb 22 10:42:29 2018
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
gpt/D_Z300V843 ONLINE 0 0 0
gpt/D_Z300W3TK ONLINE 0 0 0
gpt/D_W300DZ5A ONLINE 0 0 0
gpt/D_W300E0RC ONLINE 0 0 0
gpt/D_Z30053GL ONLINE 0 0 0
gpt/D_Z300PRXX ONLINE 0 0 0
6037660560072957879 UNAVAIL 0 0 0 was /dev/gpt/D_Z300V7PE
gpt/D_Z300V7AV ONLINE 0 0 0
errors: No known data errors
2. Ищем новый диск — вот он, ST4000DM004-2CV1 на da6nas4free: ~# camcontrol devlist
{ata st4000dm000-1f21="ST4000DM000-1F21" cc52="CC52"> at scbus0 target 4 lun 0 (pass0,da0)
{ata st4000dm000-1cd1="ST4000DM000-1CD1" cc43="CC43"> at scbus0 target 5 lun 0 (pass1,da1)
{ata st4000dm000-1f21="ST4000DM000-1F21" cc52="CC52"> at scbus0 target 6 lun 0 (pass2,da2)
{ata st4000dm000-1f21="ST4000DM000-1F21" cc52="CC52"> at scbus0 target 7 lun 0 (pass3,da3)
{ata st4000dm000-1f21="ST4000DM000-1F21" cc51="CC51"> at scbus0 target 8 lun 0 (pass4,da4)
{ata st4000dm000-1f21="ST4000DM000-1F21" cc52="CC52"> at scbus0 target 9 lun 0 (pass5,da5)
{ata st4000dm004-2cv1="ST4000DM004-2CV1" 0001="0001"> at scbus0 target 14 lun 0 (pass6,da6)
{st4000dm000-1f2168 cc52="CC52"> at scbus1 target 0 lun 0 (ada0,pass7)
{wdc wd20ears-00mvwb0="WD20EARS-00MVWB0"> at scbus2 target 0 lun 0 (ada1,pass8)
{ahci sgpio="SGPIO" enclosure="Enclosure" 0001="0001"> at scbus3 target 0 lun 0 (ses0,pass9)
{jetflash transcend="Transcend" 4gb="4GB"> at scbus4 target 0 lun 0 (pass10,da7)
3. Убиваем разметку (я диск сначала виндами по полной отформатировал, чтоб хоть раз прогнать поверхность. Полдня…). Создаём новую разметку, имя раздела по серийному номеру.nas4free: ~# gpart destroy -F /dev/da6
da6 destroyed
nas4free: ~# gpart create -s GPT /dev/da6
da6 created
nas4free: ~# gpart add -t freebsd-zfs -l D_ZFN0PARZ -a 4K /dev/da6
da6p1 added
4. Запускаем реплейс. Это на несколько суток в случае 4T медленных дисков. Реально разгоняется где-то до 100 Мб/с — так что дня на триnas4free: ~# zpool replace Pool 6037660560072957879 /dev/gpt/D_ZFN0PARZ
nas4free: ~# zpool status Pool
pool: Pool
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Fri Feb 23 12:05:00 2018
1.20G scanned out of 24.8T at 32.4M/s, 223h4m to go
144M resilvered, 0.00% done
config:
NAME STATE READ WRITE CKSUM
Pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
gpt/D_Z300V843 ONLINE 0 0 0
gpt/D_Z300W3TK ONLINE 0 0 0
gpt/D_W300DZ5A ONLINE 0 0 0
gpt/D_W300E0RC ONLINE 0 0 0
gpt/D_Z30053GL ONLINE 0 0 0
gpt/D_Z300PRXX ONLINE 0 0 0
replacing-6 UNAVAIL 0 0 0
6037660560072957879 UNAVAIL 0 0 0 was /dev/gpt/D_Z300V7PE
gpt/D_ZFN0PARZ ONLINE 0 0 0 (resilvering)
gpt/D_Z300V7AV ONLINE 0 0 0
errors: No known data errors
5. Закончится процесс — информирую гуй о произошедшем. Переимпортирую диски
Disks > Management > HDD Management, Import
Синхронизирую zfs Disks > ZFS > Configuration > Synchronize
Замечание к замене сбойного диска в zfs пуле
В посте Заменяем диск в zfs raidz я писал «Определитесь возможностью использования заменяемого диска в процессе замены. Если с него хоть что-то читается, у вас есть свободный SATA порт и временное место ещё под один диск — подключите заменяющий диск параллельно заменяемому. Это улучшит шансы на хороший исход если что-то пойдёт не так.» Практика показала, что этот вопрос требует более подробного рассмотрения.Раз у нас разбор полётов — давайте на практике.
Предисловие
Возникает проблема с диском. Камрад пишет.
NAS не загрузился (см. скриншот — и так долго все происходит, но не загружается).
В чем может быть проблема? Не читается ada3?
Всё правильно — проблема с диском. Каким именно — стоит определить, в идеале взглянув на его SMART Diagnostics|Information|S.M.A.R.T. У проблемного диска особенно интересны параметры
5 Reallocated_Sector_Ct 196 Reallocated_Event_Count 197 Current_Pending_Sector 199 UDMA_CRC_Error_Count
Смысл примерно одинаковый у всех производителей.
5 параметр отличный от нуля — плохой признак. Но бывают диски, которые набрав несколько плохих блоков, затем годами нормально работают. У меня такой есть. Очень плохо, если этот параметр растёт. Диск готовится к путешествию в страну вечной охоты, которое может начать и через неделю и через минуту.
Ненулевые, растущие три остальных параметра могут означать как реальные проблемы с диском, так и проблемы с SATA кабелем. Последнее намного вероятнее и я настоятельно советую начать с замены кабеля.Стоят они недорого, нервы дороже. При большом желании можно вытащить диск из NAS и прогнать тест поверхности какой-нибудь Викторией. Но я этого не делаю. Проще прогнать SMART тесты типа
nas4free ~/ root~$ smartctl -t short /dev/ada0 smartctl 6.3 2014-07-26 r3976 [FreeBSD 9.3-RELEASE-p9 amd64] (local build) Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Short self-test routine immediately in off-line mode". Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 2 minutes for test to complete. Test will complete after Mon Mar 16 00:15:22 2015 Use smartctl -X to abort test.
Результат в вебгуе проще взглянуть
SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed without error 00% 25543 -
если вместо short задать long — будет длинный тест, на десятки минут пару часов на терабайт.
Прим. С очень малой вероятностью проблемы могут быть с несовместимостью диска и контроллера. Хотя у меня на практике такое было, рассматривать этот вариант всерьёз не советую.
Отключать или нет сбойный диск zfs массива при замене
Предположим, оказалось, что виновен именно диск. Есть два варианта — (А) отключить его, подключить вместо него новый, провести замену. (Б) оставить сбойный диск, подключить на другой SATA порт новый, провести замену, отключить сбойный диск.
Вариант А проще, позволяет забрать диск, поменять по гарантии, заменять на него. Но есть важный недостаток. В случае raidz (или одиночного зеркала) в прцессе замены ваши данные — без избыточности. Сбой в процессе замены, а это часы, — и часть данных может быть потеряна.
Вариант Б сложнее, требует свободного (хоят бы временно) SATA порта и диска из подменного фонда. Но есть важный плюс — данные в процессе замены имеют избыточность. Каждый блок достаточно прочитать либо со сбойного диска, либо с остальных. Единичный сбой не страшен.
Обычно исходят из того, что данные ценнее дисков. Поэтому вариант Б выглядит предпочтительным. Но есть детали.
Если диск сбоит сильно, то процесс замены значительно затягивается. Это увеличивает риск сбоя остальных дисков массива. Поэтому придётся как-то на глаз оценить плюсы и минусы. Пожалуй, если у нас RAIDZ2, способный выдержать выход из строя двух дисков — то цепляться за сбоящий диск смысла нет. Разумно идти по варианту А — избыточность ведь сохраняется.
А если raidz или простое зеркало — то решение принять труднее. Я бы пытался сохранить избыточность до последнего, пока диск колом не встал. А если встанет — отключил бы от него питание.
У камрада, с вопроса которого мы начинали обсуждение, диск сдох навовсе. Поэтому он подключил новый диск на его место и дал нам хороший пример наиболее вероятного развития событий.
nas4free ~/ root~$ zpool status Data pool: Data state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sat Mar 14 10:55:23 2015 2.74T scanned out of 4.09T at 285M/s, 1h32m to go 702G resilvered, 67.04% done config: NAME STATE READ WRITE CKSUM Data DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 ada1 ONLINE 0 0 0 ada4 ONLINE 0 0 0 replacing-2 DEGRADED 0 0 0 8577650223873339884 OFFLINE 0 0 0 was /dev/ada3/old ada3 ONLINE 0 0 0 (resilvering) ada2 ONLINE 0 0 0 errors: 1 data errors, use '-v' for a list
Что мы здесь видим?
— Бывший диск /dev/ada3 имел zfs идентификатор 8577650223873339884. Этот ID, кстати, запросто можно использовать в командах zpool.
— он заменяется на новый диск, который теперь ada3
— у нас ранее вылезла какая-то ошибка, которая могла привести к потере данных.
Забегая вперёд скажу, что в нашем случае к счастью ошибка пришлась на малоценный файл, который был удалён. Если бы избыточность сохранилась — мы бы его не потеряли.
Ну а после завершения картинка — заглядение.
nas4free ~/ root~$ zpool status Data pool: Data state: ONLINE status: The pool is formatted using a legacy on-disk format. The pool can still be used, but some features are unavailable. action: Upgrade the pool using 'zpool upgrade'. Once this is done, the pool will no longer be accessible on software that does not support feature flags. scan: resilvered 1.02T in 4h53m with 0 errors on Sat Mar 14 15:38:46 2015 config: NAME STATE READ WRITE CKSUM Data ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada2 ONLINE 0 0 0 errors: No known data errors
На предупреждение «The pool is formatted using a legacy on-disk format» можно особого внимания не обращать. Да и другая это тема.
UPD от 16 марта 2015
Камрад RU_Taurus поделился своим свежим опытом по обсуждаемому вопросу.
См полностью здесь и последующие три поста.
С сокращениями
RU_Taurus: У меня двушку мучал до талого, она кстати в процессе окончательно сдохла.
MikeMac: Очень интересно — при полностью сдохшем в процесс диске система сама его отключила, потребовалось ручное отключение или всё встало колом?
RU_Taurus: Ничего из этого. Просто чтение с диска стало очень медленным, но он до конца оставался доступным. Во время ресильвера система сначала пыталась вычитывать умирающий диск, когда ей это не удавалось, то данные восстанавливались за счет избыточности (всего в поле CKSUM было более 1500 ошибок).
Именно в начале данного процесса я и написал свой пост о необходимости пересмотра совета о подключении умирающего диска для случая raidz2 и выше. Так же был пост о прогрессе ресильвера. Большое влияние запущенной и используемой самбы — подтверждаю, повторно запускал SMB и смотрел что-то с пула, скорость ресильвера при этом опять упала где-то к 20МБ/сек. Потому все лишние сервисы на время ресильвера лучше отключать.
ZFS и скорость доступа к диску в гипервизорах / Habr
В данной статье публикуются результаты замеров скорости доступа к файловой системе внутри гипервизора в различных вариантах установки ZFS. Всем кому интересно прошу под кат, предупреждаю о наличии большого количества изображений под спойлерами (оптимизированы).Всем привет! В сети довольно много материалов, посвященных файловой системе (далее ФС) ZFS, ее развитию в Linux’е и практическому применению. Меня данная ФС очень заинтересовала в контексте совершенствования моего домашнего сервера виртуализации ( а также благодаря посту пользователя kvaps), однако я не смог найти в интернете (может быть плохо искал?) сравнительных тестов производительности виртуализированных машин. Поэтому решил собрать тестовую платформу для проведения своего сравнительного исследования.
Моя статья не претендует на какие-либо научные открытия, вряд ли поможет профессионалам, которые давно работают с ZFS, и знают все ее возможности, однако поможет новичкам приблизительно оценить «цену» каждого гигабайта поделенного на производительность.
Суть эксперимента заключалась в следующем: на машину устанавливалась (каждый раз с загрузочного диска) ОС Proxmox VE 5.2. Во время установки выбирался Один из вариантов XFS/ZFS. После этого создавалась виртуальная машина, на которую производилась установка Windows Server 2008 R2, после чего запускалась популярная утилита CrystalDiskMark 5.2.2 и проводились тесты на объемах 1, 4, 32 GiB (в связи с потерей изображений с результатами 32 GiB тестов нельзя воспользоваться при выборе решения, имеющиеся данные приводятся для массовки).
Тест на ФС XFS использовался для измерения эталонной скорости работы одного ЖД (возможно это и неправильно, но других вариантов ее оценить я не придумал).
Тесты ZFS RAID 0, RAID 1 проводились на двух случайно выбранных дисках, ZFS RaidZ1 на 3 дисках, ZFS RAID 10, RaidZ2 на 4 дисках. Тесты с ZFS RaidZ3 не проводились по причине отсутствия желания купить еще один крайне экономически нецелесообразный HDD на 500GB.
Под спойлером кратко приведу описания каждого из видов ZFS RAID с моим примером получаемого объема «коммерческих» гигабайтов:
ZFS RAID2 диска:- ZFS RAID 0 — чередование (Striped), объем 2 * DiskSize = 1000ГБ.
- ZFS RAID 1 — зеркалирование (Mirror), объем 1 * DiskSize = 500ГБ.
3 диска:
- ZFS RaidZ1 — он же ZFS RaidZ, аналог RAID5, объем (N — 1) * DiskSize = 1000ГБ.
4 диска:
- ZFS RAID 10 — зеркалирование с чередованием (Striped Mirrored), объем 2 * DiskSize = 1000ГБ.
- ZFS RaidZ2 — аналог RAID6, объем (N — 2) * DiskSize = 1000ГБ.
- при этом, я такой тест не проводил, но ZFS RaidZ1 при 4 дисках = 1500ГБ.
Очень понятно расписана суть вот тут (англ). А также сколько дисков допустимо потерять, сохранив информацию.
Хочется отметить, что помимо различной скорости доступа файловой системы, еще нужно учитывать общий объем получаемого массива, и надежность сохранности данных, в случаях выхода из строя жестких дисков.
- Материнская плата: Intel Desktop Board DS67SQ-B3;
- Процессор: Intel Pentium G630 2.7GHz;
- Оперативная память: 2 x 4096Mb Hynix PC3-10700;
- Жесткие диски: 3 x WD 5000AZRX 500GB SATA 64MB Cache, 1 x WD 5000AZRZ 500GB SATA 64MB Cache, SSD SATA Goldenfir T650-8GB;
- Блок питания: DeepCool DA500N 500W.
Виртуальной машине (KVM) для тестов выделялось 4GB оперативной памяти, 1 ядро процессора, жесткий диск VirtIO Block 100GB.
Для систем, установленных на ZFS выполнялось 2 теста, во втором в качестве кэш-диска подключался SSD.
Все результаты представлены в виде скриншотов ниже. Если у кого-нибудь возникнет желание оцифровать данные результаты — буду благодарен и включу результаты работы в статью.
ZFS RAID 0
ZFS RAID 1
ZFS RAID 10 + cache
ZFS RaidZ1
ZFS RaidZ2
ZFS RaidZ2 + cache
Спасибо всем кто уделил внимание, надеюсь для кого-то данная выборка окажется, как и для меня, полезной.
P.S. по непонятным мне причинам часть изображений куда-то пропали, замеры проводились в конце весны, тестовую платформу уже не собрать в том виде, к счастью все они приходятся на тесты с 32 GiB.
P.P.S. Не пытался рекламировать какие-либо организации и/или программные продукты, не имел цели нарушить лицензионных соглашений, если где-то был неправ, прошу писать в личные сообщения.
P.P.P.S. Изображение с логотипом ZFS является репродукцией.
Замена диска в ZFS — Мой блог
Итак, ada1(disk0) старый диск на 500Гб, ada0 – новый на 1Тб.
# df -h zroot Filesystem Size Used Avail Capacity Mounted on zroot 190G 358M 189G 0% / # zpool status -v pool: zroot state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 errors: No known data errors
Создаю на новом диске gpt раздел. Создаю загрузочную область (для размещения загрузчика, внезапно). Своп на 4Гб (swap1). Остальное место отдаю для утех на ZFS (disk1).
# gpart create -s gpt ada0 ada0 created # gpart add -s 128 -t freebsd-boot ada0 ada0p1 added # gpart add -s 4G -t freebsd-swap -l swap1 ada0 ada0p2 added # gpart add -t freebsd-zfs -l disk1 ada0 ada0p3 added
Здесь видно по объёму (в Гб) кто есть кто.
# gpart show => 34 976773101 ada1 GPT (466G) 34 128 1 freebsd-boot (64K) 162 8388608 2 freebsd-swap (4.0G) 8388770 968384365 3 freebsd-zfs (462G) => 34 1953525101 ada0 GPT (932G) 34 128 1 freebsd-boot (64K) 162 8388608 2 freebsd-swap (4.0G) 8388770 1945136365 3 freebsd-zfs (928G)
Теперь я делаю классическое присоединение диска disk1 в массив zroot, указывая, конечно же оба диска. Умница ZFS напоминает мне, что нужно записать загрузчик на присоединённый диск.
# zpool attach zroot /dev/gpt/disk0 /dev/gpt/disk1 If you boot from pool 'zroot', you may need to update boot code on newly attached disk '/dev/gpt/disk1'. Assuming you use GPT partitioning and 'da0' is your new boot disk you may use the following command: gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
Начался ресилвер данных. Занимаюсь другими делами.
# zpool status -v pool: zroot state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h28m, 12.88% done, 2h8m to go config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 33.9G resilvered errors: No known data errors
Записываю загрузчик в mbr. Сделать это можно во время ресилвера, т.к. загрузчик устанавливается в область, ну никак не связанную с ZFS (-i 1).
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 bootcode written to ada0
Теперь все подготовительные работы сделаны. Жду ресилвера, изредка поглядывая в zpool status -v. Когда скруб скажет, что ресилвер завершён, изымаю из пула zroot старый диск (disk0).
# zpool detach zroot /dev/gpt/disk0 # zpool status -v pool: zroot state: ONLINE scrub: resilver completed after 2h8m with 0 errors on Mon Aug 22 09:51:48 2011 config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 263G resilvered errors: No known data errors # df -h zroot Filesystem Size Used Avail Capacity Mounted on zroot 647G 358M 646G 0% /
Такие дела. Осталось отключить старый диск физически.
Хинт: если бы я не делал детач старого диска – получил бы (опять же внезапно) массив стандарта RAID 1 (mirroring). Выглядило бы это так:
# zpool status -v pool: zroot state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM home ONLINE 0 0 0 mirror ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 errors: No known data errors
Так уж устроен ZFS: можно из сингл диска делать миррор и наоборот.
Взял тут.
Замена ZFS диска во FreeBSD 10 на массиве RAID-Z
Для проведения этого теста, я использовал самую обычную инсталляцию FreeBSD 10, с разбивкой по умолчанию. В моей системе использовалось 6 дисков, объединённых в RAID-Z.Установщик по-умолчанию, сделал мне следующий вариант разметки:
[root@zdata ~]# zfs listВ этой статье я попробую с эмитировать выход из строя самого первого диска, с которого обычно по умолчанию BIOS читает загрузочный сектор и начинает загрузку, т.е. получится, что вставив новый диск в замен вышедшего из строя, система без дополнительных манипуляций у нас грузится не будет.
NAME USED AVAIL REFER MOUNTPOINT
zroot 5,93G 31,0G 153K /zroot
zroot/ROOT 915M 31,0G 153K none
zroot/ROOT/default 915M 31,0G 915M /
zroot/tmp 179K 31,0G 179K /tmp
zroot/usr 5,03G 31,0G 153K /usr
zroot/usr/home 2,17G 31,0G 248M /usr/home
zroot/usr/ports 2,85G 31,0G 2,85G /usr/ports
zroot/usr/src 153K 31,0G 153K /usr/src
zroot/var 1,30M 31,0G 153K /var
zroot/var/audit 153K 31,0G 153K /var/audit
zroot/var/crash 153K 31,0G 153K /var/crash
zroot/var/log 524K 31,0G 524K /var/log
zroot/var/mail 192K 31,0G 192K /var/mail
zroot/var/tmp 153K 31,0G 153K /var/tmp
В нормальном состоянии
Список дисков и разделов:[root@zdata ~]# ls /dev/ | grep daСтатус пула ZFS:
da0
da0p1
da0p2
da0p3
da1
da1p1
da1p2
da1p3
da2
da2p1
da2p2
da2p3
da3
da3p1
da3p2
da3p3
da4
da4p1
da4p2
da4p3
da5
da5p1
da5p2
da5p3
[root@zdata ~]# zpool status
pool: zroot
state: ONLINE
scan: resilvered 1,24G in 0h3m with 0 errors on Sat Oct 24 15:52:02 2015
config:NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gpt/zfs0 ONLINE 0 0 0
gpt/zfs1 ONLINE 0 0 0
gpt/zfs2 ONLINE 0 0 0
gpt/zfs3 ONLINE 0 0 0
gpt/zfs4 ONLINE 0 0 0
gpt/zfs5 ONLINE 0 0 0errors: No known data errors
После сбоя
После выхода из строя первого диска da0, массив переходит в состояние DEGRADED и система перестаёт загружаться.Выключаем машину, вынимаем сбойный диск и заменяем его на новый.
Если BIOS настроен на загрузку с этого диска, то меняем приоритет загрузки в BIOS.

NAS своими руками ч 10 — зачем ZFS дома
В предыдущих постах я неоднократно упоминал о zfs. Причем получалось, что и памяти и процессора она требует не по детски. Остался вопрос — и зачем? Сразу скажу, что не претендую на полноту и пр. Что такое zfs можно взглянуть в Википедии. Заинтересовавшимся серьёзнее советую нагуглить zfs administration guide (вроде бы был и по русски). Моё намерение — объяснить зачем вдруг дома файловая система корпоративного уровня. Прим. У читателя, особенно второй части поcта, предполагается уверенное понимание того, что такое дисковые массивы, напр. RAID5. Если понимания нет — вряд ли такие массивы стоит дома самому строить и этот текст читать.
1. Целостность файловой системы. Каждый сталкивался с ситуацией, когда файловую систему приходилось чинить. Успешно или не очень. zfs построена так, что в ней даже нет утилиты вроде виндовой chkdsk или линуксовой fsck. Ситуация, когда файловая система оказалась в противоречивом состоянии, просто невозможна. Реализовано через Copy-on-write (данные пишем не поверх старых, а выделяем новый блок, пишем туда, если все ОК — заменяем указатель со старых данных на новые. Подробнее — см гугл). В результате логическая структура диска не испортится из-за того, что-то не вовремя отключили или свет отрубился. Ну разве записанное в последние 10 сек пропадет. (впрочем, диск может и физически сгореть при играх с электричеством).
2. Уверенность, что не прочитаешь мусор, думая, что читаешь данные. Железо несовершенно. Например, если дребезжат контакты на SATA кабелях, на диск будет записано совсем не то, что было в памяти. И никто, замечу, долгое время об этом не узнает. Мой профессиональный опыт связан с полиграфией. Не раз приходилось на выводе видеть картинку до середины нормальную — а дальше шум. zfs хранит с каждым блоком данных его контрольную сумму. При считывании данных сумма автоматически сличается. Казалось бы, так просто…
3. Уверенность, что хранимые данные не протухли. Да, данные при хранении имеют тенденцию портиться. Что хорошо известно тем, кто поверил маркетингу производителей DVD болванок про 100 лет и записал на них свои архивы. Особенно это важно для «холодных» данных, долгое время лежащих без движения. Архивах, старых фото и т.п. Проверить данные вроде как просто — надо их считать и сличить контрольные суммы. Для zfs, понятно — достаточно файлы прочитать. Для регулярной проверки есть команда, в фоновом режиме все проверяющая.
4. Снимки файловой системы. Легкость запоминания состояния файловой системы на данный момент времени, хранение таких снимков и откат к ним при необходимости. Защищает от дурацких действий человека. Модель Copy-on-write просто располагает к такой функциональности — блоки удаленных или перезаписанных данных просто не освобождаем, а ссылки на них храним в снимке. В результате снимок занимает места столько, сколько содержит измененных по сравнению текущим моментом данных, а не весь объем данных.
Это все было для данных без избыточности, типа одиночного диска. Но zfs позволяет формировать массивы с избыточностью, подобные (и превосходящие) RAID1 (зеркало), RAID5 (избыточность в размере одного диска), RAID6 (двух) и даже «RAID7» (сохраняющий данные при выходе их строя любых трех дисков массива). Массивы можно объединять, получая что-то вроде RAID10 или RAID50. И чем же zfs массивы лучше?
5. Аппаратная независимость. Чтобы сделать аппаратный RAID5, тем более RAID6, нужен дорогой RAID контроллер. zfs raidz — вариант программного RAID, требуются только доступ к дискам, например SATA порты. zfs raidz вполне может быть построен на портах разных контроллеров и из дисков разных моделей (в использовании разных моделей дисков есть и плюсы и минусы). И перенесен чуть не на любое железо, куда можно подключить диски. Я, например, неоднократно переставлял диски между SATA портами, прозрачно импортировал массив, созданный в режиме IDE на контроллере, в ACHI режиме и на SAS контроллере. Хотя операционная система нумерует диски по портам и определяет IDE, ACHI и SAS диски по-разному, zfs все это способен молча отработать (до определенных пределов, конечно. Сдуру что хочешь можно сломать.)
6. Отсутствие Дыры по Записи. (Wiki) То есть разрушения данных, если диск массива не может принять данные. Дорогие RAID контроллеры оборудуют батарейками, которые позволяют много дней хранить данные, не успевшие попасть на диск, и записывать их в массив при появлении возможности.
7. Устойчивость при сбое диска. Пусть у нас одинаковые RAID5 и zfs raidz1. В каждом из них сбоит один из дисков, меняем его на новый. И в процессе замены (а она занимает многие часы для больших массивов) не читается блок на одном из оставшихся дисков массива.
Для RAID5 в большинстве случаев это катастрофа. Массив объявляется сбойным не читаемым, несем его профессионалам, которые за круглую сумму инфу будут восстанавливать.
Для zfs raidz1 сообщается на какие файлы пришлись сбойные блоки, остальное синхронизируется. А если с заменяемого диска хоть что-то читается и от компа его не отключали — информация с него тоже будет использована для синхронизации. И с высокой степенью вероятности данные вообще не потеряем.
8. Работа с полезными данными, а не всем массивом. Например, если я заменяю диск в RAID5 массиве, время восстановления зависит от объема массива. Если в zfs raid1 — от объема записанной в массив информации, тк не используемое для данных место не будет синхронизироваться.
Преимуществ еще много, но мне для дома интереснее именно эти. В корпоративном применении — есть и другие (сжатие данных, дедупликация…). Упомяну важные для меня недостатки.
1. Нарастить raidz массив на один диск нельзя. Можно заменить все терабайтные диски на тритеры — и увеличить объем. Можно собрать из 3 (и более) дисков еще один raidz и добавить его к существующему. Но превратить raidz1 из 5 дисков в raidz1 из 6 можно только слив куда-то информацию, разрушив массив и создав новый.
2. Массив нельзя уменьшить. Можно только увеличивать. Например, заменить в массиве терабайтные винты на двухтерабайтные — можно. А на полутерабайтные — нельзя, даже если в массиве хранится 1 килобайт инфы.
Можно подсоединить к массиву еще один — а отсоединить нельзя. Все такие процедуры — только через сохранение инфы куда-то вовне, разрушение массива и создание нового.
3. Ресурсоемкость. zfs постоянно считает контрольные суммы, что создает нагрузку на процессор и жрет под кеши память. В корпоративном применении есть мнение — гигабайт памяти на терабайт массива. Дома мне хватает 330 атома и 4 Гб памяти (а раньше и на 2 Гб работало — особой разницы не увидел). Хотя атома для полной утилизации гигабитной сети мне не хватает, но 40-50мб/с мои потребности закрывает.. А вот если железо старое и еще значительно слабее — zfs не для Вас.
Да, напомню, если понравилось — в NAS4free, которому и посвящен весь цикл постов, управление NAS, включая операции с zfs, идет через понятный новичку веб интерфейс.
UPD1 Немного критики ZFS (англ.)