GRAID5 - програмный RAID 5

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:0b59815a7eddca6f6c6c1ebc37cf9e97' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><img alt=\"FreeBSD Logo\" src=\"http://muff.kiev.ua/files/FreeBSD.jpg\" style=\"height:150px; width:150px\" /></p>\n<p class=\"rtejustify\">В одном из проектов необходимо было реализовать небольшое хранилище с минимальным резервированием (для хранения бекапов). Решение - построение програмного <strong>RAID5</strong> на <strong>FreeBSD</strong>. Рассматривать и сравнивать типы <strong>RAID</strong> не будем, рассмотрим только реализацию даной задачи.</p>\n<p class=\"rtejustify\">Итак, диски присутствующие в системе:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>sysctl kern.disks</strong><br />\n kern.disks: ada0 aacd3 aacd2 aacd1 aacd0</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li class=\"rtejustify\"><strong>ada0</strong> - диск, на который установлена система (<strong>FreeBSD 11.1 amd64</strong>)</li>\n<li class=\"rtejustify\"><strong>aacd3 aacd2 aacd1 aacd0</strong> - диски, подключенные через <strong>SAS</strong>-контроллер, именно из них и будем собирать&nbsp;<strong>RAID5</strong>.</li>\n</ul>\n<p class=\"rtejustify\"><strong>FreeBSD </strong>поддерживает организацию <strong>RAID5</strong> двумя менеджерами дискового пространства: <strong>VINUM</strong> и <strong>GEOM</strong>. Остановимся на реализации с помощью&nbsp;<strong>GEOM</strong>.</p>\n<p class=\"rtejustify\">Чтобы задействовать функционал&nbsp;<strong>GEOM&nbsp;RAID5</strong>, необходимо выполнить установку порта&nbsp;<strong>graid5</strong>. Стоит отметить, что для сборки <strong>graid5</strong> требуется наличие исходных текстов, поэтому предварительно оновим <strong>src</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>svnlite checkout svn://svn.freebsd.org/base/releng/11.1/ /usr/src</strong></td>\n</tr>\n</tbody>\n</table>\n<p>После этого выполним установку&nbsp;<strong>graid5</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>cd /usr/ports/sysutils/graid5 <strong>&amp;&amp; make install clean &amp;&amp; rehash</strong></strong></td>\n</tr>\n</tbody>\n</table>\n<p>Создадим директорию, куда в дальнейшем будем монтировать наш&nbsp;<strong>RAID5</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>mkdir /raid5</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Создаем сам массив:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>graid5 label -v -s 256k raid5 /dev/aacd0 /dev/aacd1 /dev/aacd2 /dev/aacd3</strong><br />\n Metadata value stored on /dev/aacd0.<br />\n Metadata value stored on /dev/aacd1.<br />\n Metadata value stored on /dev/aacd2.<br />\n Metadata value stored on /dev/aacd3.<br />\n Wasting 1046528 bytes (&gt;=0GiB).<br />\n Done.</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li class=\"rtejustify\"><strong>256k</strong>&nbsp;- задаем значение&nbsp;<strong>Stripe Size</strong> (размер блока данных, записываемый на&nbsp;каждый&nbsp;диск <strong>RAID</strong>-массива в каждый <strong>stripe</strong>, тоесть мы будем записывать/читать данные блоками по&nbsp;<strong>256k</strong>)</li>\n<li class=\"rtejustify\"><strong>raid5</strong>&nbsp;- указываем название массива</li>\n<li class=\"rtejustify\"><strong>/dev/aacd0 ...&nbsp;/dev/aacd3</strong>&nbsp;- перечисляем устройства, которые добавляем в массив</li>\n</ul>\n<p>Создаем файловую систему на созданном устройстве:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#&nbsp;<strong>newfs /dev/raid5/raid5</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Примонтируем созданный раздел к ранее созданной нами директории:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>mount -t ufs /dev/raid5/raid5 /raid5</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Также добавим запись в <strong>fstab</strong>, чтобы раздел монтировался при загрузке системы:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>echo</strong>&nbsp;<strong>&#39;/dev/raid5/raid5&nbsp; &nbsp; &nbsp; &nbsp; /raid5&nbsp; ufs&nbsp; &nbsp; &nbsp;rw&nbsp; &nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp; &nbsp;2&#39; &gt;&gt;&nbsp;/etc/fstab</strong></td>\n</tr>\n</tbody>\n</table>\n<p>И добавим загрузку модуля&nbsp;<strong>geom_raid5.ko</strong> при старте системы:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#&nbsp;<strong>echo &#39;geom_raid5_load=&quot;YES&quot;&#39; &gt;&gt; /boot/loader.conf</strong></td>\n</tr>\n</tbody>\n</table>\n<p>На этом все...</p>\n<p>Проверяем статус массива:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>graid5 status</strong></p>\n<pre>\n Name Status Components\nraid5/raid5 <span style=\"color:#FF0000\">REBUILDING HOT</span> aacd0 (115764101120 / 2% (p:192))\n aacd1 (115764101120 / 2% (p:192))\n aacd2 (115764101120 / 2% (p:192))\n aacd3 (115764101120 / 2% (p:192))</pre></td>\n</tr>\n</tbody>\n</table>\n<p>Идет пересборка... По завершению пересборки статус массива изменится на <strong>COMPLETE</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p>#&nbsp;<strong>graid5 status</strong></p>\n<pre>\n Name Status Components\nraid5/raid5 <span style=\"color:#FF0000\">COMPLETE CALM</span> aacd0\n aacd1\n aacd2\n aacd3</pre></td>\n</tr>\n</tbody>\n</table>\n<p>Перезагружаем систему, чтобы убедиться, что после старта массив запустится в штатном режиме:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>reboot</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">После перезагрузки массив работает в штатноме режиме, все в порядке. На этом настройка завершена.</p>\n<p class=\"rtejustify\">Данная комманда&nbsp;может пригодиться в дальнейшем... Чтобы массив начал синхронизироваться после замены диска, необходимо выполнить комманду:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#&nbsp;<strong>graid5&nbsp;insert&nbsp;raid5&nbsp;/dev/aacd3</strong></td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li><strong>raid5</strong> - название нашего массива</li>\n<li><strong>/dev/aacd3</strong>&nbsp;- диск, который мы заменили</li>\n</ul>\n<p>Ну и фактический результат проверки скорости записи/чтения на массив, выполненый с помощью утилиты <strong>dd</strong>.</p>\n<p>Проверяем скорость записи:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>dd if=/dev/zero of=/raid5/test_file.zero bs=100M count=100</strong><br />\n 100+0 records in<br />\n 100+0 records out<br />\n 10485760000 bytes transferred in 101.761061 secs (103042951 bytes/sec)</td>\n</tr>\n</tbody>\n</table>\n<p>Проверяем скорость чтения:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>dd if=/raid5/test_file.zero of=/dev/null</strong><br />\n 20480000+0 records in<br />\n 20480000+0 records out<br />\n 10485760000 bytes transferred in 23.882999 secs (439047037 bytes/sec)</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n', created = 1767834986, expire = 1767921386, headers = '', serialized = 0 WHERE cid = '2:0b59815a7eddca6f6c6c1ebc37cf9e97' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:872c1b0506537a0bb4633f70d4ea100f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>А что на бекапном серваке так мало памяти что ZFS использовать нельзя?</p>\n<p>И как то смущает скорость записи в рейд 98Мб/с и это на SAS дисках..., либо они ещё ребилдились</p>\n', created = 1767834986, expire = 1767921386, headers = '', serialized = 0 WHERE cid = '2:872c1b0506537a0bb4633f70d4ea100f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767834986, expire = 1767921386, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767834986, expire = 1767921386, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

FreeBSD Logo

В одном из проектов необходимо было реализовать небольшое хранилище с минимальным резервированием (для хранения бекапов). Решение - построение програмного RAID5 на FreeBSD. Рассматривать и сравнивать типы RAID не будем, рассмотрим только реализацию даной задачи.

Итак, диски присутствующие в системе:

# sysctl kern.disks
kern.disks: ada0 aacd3 aacd2 aacd1 aacd0
  • ada0 - диск, на который установлена система (FreeBSD 11.1 amd64)
  • aacd3 aacd2 aacd1 aacd0 - диски, подключенные через SAS-контроллер, именно из них и будем собирать RAID5.

FreeBSD поддерживает организацию RAID5 двумя менеджерами дискового пространства: VINUM и GEOM. Остановимся на реализации с помощью GEOM.

Чтобы задействовать функционал GEOM RAID5, необходимо выполнить установку порта graid5. Стоит отметить, что для сборки graid5 требуется наличие исходных текстов, поэтому предварительно оновим src:

# svnlite checkout svn://svn.freebsd.org/base/releng/11.1/ /usr/src

После этого выполним установку graid5:

# cd /usr/ports/sysutils/graid5 && make install clean && rehash

Создадим директорию, куда в дальнейшем будем монтировать наш RAID5:

# mkdir /raid5

Создаем сам массив:

# graid5 label -v -s 256k raid5 /dev/aacd0 /dev/aacd1 /dev/aacd2 /dev/aacd3
Metadata value stored on /dev/aacd0.
Metadata value stored on /dev/aacd1.
Metadata value stored on /dev/aacd2.
Metadata value stored on /dev/aacd3.
Wasting 1046528 bytes (>=0GiB).
Done.
  • 256k - задаем значение Stripe Size (размер блока данных, записываемый на каждый диск RAID-массива в каждый stripe, тоесть мы будем записывать/читать данные блоками по 256k)
  • raid5 - указываем название массива
  • /dev/aacd0 ... /dev/aacd3 - перечисляем устройства, которые добавляем в массив

Создаем файловую систему на созданном устройстве:

newfs /dev/raid5/raid5

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

# mount -t ufs /dev/raid5/raid5 /raid5

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

# echo '/dev/raid5/raid5        /raid5  ufs     rw      2       2' >> /etc/fstab

И добавим загрузку модуля geom_raid5.ko при старте системы:

echo 'geom_raid5_load="YES"' >> /boot/loader.conf

На этом все...

Проверяем статус массива:

# graid5 status

       Name          Status  Components
raid5/raid5  REBUILDING HOT  aacd0 (115764101120 / 2% (p:192))
                             aacd1 (115764101120 / 2% (p:192))
                             aacd2 (115764101120 / 2% (p:192))
                             aacd3 (115764101120 / 2% (p:192))

Идет пересборка... По завершению пересборки статус массива изменится на COMPLETE:

graid5 status

       Name         Status  Components
raid5/raid5  COMPLETE CALM  aacd0
                            aacd1
                            aacd2
                            aacd3

Перезагружаем систему, чтобы убедиться, что после старта массив запустится в штатном режиме:

# reboot

После перезагрузки массив работает в штатноме режиме, все в порядке. На этом настройка завершена.

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

graid5 insert raid5 /dev/aacd3
  • raid5 - название нашего массива
  • /dev/aacd3 - диск, который мы заменили

Ну и фактический результат проверки скорости записи/чтения на массив, выполненый с помощью утилиты dd.

Проверяем скорость записи:

# dd if=/dev/zero of=/raid5/test_file.zero bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes transferred in 101.761061 secs (103042951 bytes/sec)

Проверяем скорость чтения:

# dd if=/raid5/test_file.zero of=/dev/null
20480000+0 records in
20480000+0 records out
10485760000 bytes transferred in 23.882999 secs (439047037 bytes/sec)

 

Ваша оценка: Нет Средняя: 3.5 (4 голоса)

Re: GRAID5 - програмный RAID 5

А что на бекапном серваке так мало памяти что ZFS использовать нельзя?

И как то смущает скорость записи в рейд 98Мб/с и это на SAS дисках..., либо они ещё ребилдились

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Человек с дружественным интерфейсом...