2gusia (2gusia) wrote,
2gusia
2gusia

Category:

Миграция NAS - программная часть

Окончание, начало см Миграция NAS - постановка задачи. Теперь, настроив железо, будем жать кнопки.

1. Создаём новый пул. Я решил перейти от пула на сырых дисках к пулу на gpt разделах. Методика - в нашем FAQ

Чистим диски (тк я их размечал и форматировал под винды для проверки поверхности). Диски на SAS контроллере, поэтому отображаются как daX. Что есть дополнительный аргумент в пользу пула на gpt разделах, ведь USB диски тоже отображаются как daX
zpool labelclear /dev/da0
zpool labelclear /dev/da1
zpool labelclear /dev/da2
zpool labelclear /dev/da3
zpool labelclear /dev/da4
zpool labelclear /dev/da5
zpool labelclear /dev/da6
zpool labelclear /dev/da7

Создаём GPT таблицу
gpart create -s GPT /dev/da0
gpart create -s GPT /dev/da1
gpart create -s GPT /dev/da2
gpart create -s GPT /dev/da3
gpart create -s GPT /dev/da4
gpart create -s GPT /dev/da5
gpart create -s GPT /dev/da6
gpart create -s GPT /dev/da7

и выровненный по 4K раздел. Ведь диски у нас с 4K сектором. Метки присваиваю в соответствии с серийным номером диска. Понадобится искать где какой диск - пригодится.
gpart add -t freebsd-zfs -l D_Z300V843 -a 4K /dev/da0
gpart add -t freebsd-zfs -l D_Z300W3TK -a 4K /dev/da1
gpart add -t freebsd-zfs -l D_W300DZ5A -a 4K /dev/da2
gpart add -t freebsd-zfs -l D_W300E0RC -a 4K /dev/da3
gpart add -t freebsd-zfs -l D_Z30053GL -a 4K /dev/da4
gpart add -t freebsd-zfs -l D_Z300PRXX -a 4K /dev/da5
gpart add -t freebsd-zfs -l D_Z300V7PE -a 4K /dev/da6
gpart add -t freebsd-zfs -l D_Z300V7AV -a 4K /dev/da7

Создаём поверх раздела устройство с явно указанным 4K сектором. Достаточно сделать это только с одним из дисков
gnop create -S 4096 /dev/gpt/D_Z300V843

Создаём пул. Знак \ позволяет длинную строку разместить на нескольких строках. Будет проще, если и имя нового пула и точка монтирования не будут совпадать о оными для старого пула. Иначе будут траблы.
zpool create -m /mnt/BigPool BigPool raidz2 /dev/gpt/D_Z300V843.nop /dev/gpt/D_Z300W3TK \
/dev/gpt/D_W300DZ5A /dev/gpt/D_W300E0RC /dev/gpt/D_Z30053GL /dev/gpt/D_Z300PRXX \
/dev/gpt/D_Z300V7PE /dev/gpt/D_Z300V7AV

Отказ от записи времени доступа к файлам сильно убыстряет доступ к каталогам каталогов со множеством файлов. Вид контрольных сумм - и по умолчанию fletcher4, просто для порядка
zfs set atime=off BigPool
zfs set checksum=fletcher4 BigPool

Экспортируем пул, убиваем лишнюю прокладку в виде gnop устройства, снова его импортируем
zpool export BigPool
gnop destroy /dev/gpt/D_Z300V843.nop
zpool import -d /dev/gpt BigPool

Если на пуле будут датасеты, которых нет на старом пуле - можно их создать с флагом, не допускающим создания файлов с кривыми кодировками в именах. Если будем копировать датасеты со старого пула целиком по send-receive, то они создадутся автоматом.
zfs create -o utf8only=on BigPool/Series

Все права даём всем (если у вас нет более осмысленной политики разграничения прав доступа)
chmod -R 777 /mnt/BigPool
ВАЖНО: когда скопируем специальные датасеты тира Jail и виртуальных машин, над ними такую операцию по смене прав проводить НЕЛЬЗЯ.

2. Перекачка. Если оба пула смонтированы в одном NAS - используем поистине волшебный механизм zfs send-receive, как описано в специальном посте. Почитайте его. Если пулы на на разных NAS - тоже можно, но есть особенности (ssh и mbuffer). Погуглите или подождите пока у меня дойдут руки до этой части.

Я использовал замечательный скрипт от Oleg Pyzhov, запуская его давал отдельную команду для каждого датасета.
/mnt/Flash/zfsbackup.sh Pool/Media BigPool/Media

Скорость копирования у меня составила порядка 200-250 Мб/сек То есть все свои терабайты перелил за день. Крошечный датасет с джейлами переливался медленнее.
Побочным результатом являются снимки датасетов на обоих пулах - целевом и исходном. Снимки можно при желании убить руками или из вебгуя nas4free.


3. Подмена пулов. Я удаляю старый пул и подменяю его новым.

Запрещаем монтирование нового пула
zfs set canmount=off BigPool

Проверяем
zfs get canmount BigPool
NAME PROPERTY VALUE SOURCE
BigPool canmount off local

Задаём ему новую точку монтирования. Но он туда до отмашки не смонтируется - мы же запретили
zfs set mountpoint=/mnt/Pool BigPool

Проверяем
zfs get mountpoint BigPool
NAME PROPERTY VALUE SOURCE
BigPool mountpoint /mnt/Pool local

Выключаем NAS, отсоединяем диски старого пула, включаем заново

Экспортируем новый пул и импортируем под именем старого
zpool export BigPool
zpool import BigPool Pool

Проверяем точку его монтирования
zfs get mountpoint Pool
NAME PROPERTY VALUE SOURCE
Pool mountpoint /mnt/Pool local

Разрешаем монтирование
zfs set canmount=on Pool

Перезагружаем NAS. Убеждаемся, что TheBrig, сервисы в джейлах, виртуальные машины - работают.
Бинго.
Tags: nas, nas4free, zfs, руками
Subscribe

  • Опсосы нашли врага

    - Остается последний вопрос: не бывает ли твое сердце подвержено приступам глупой жалости к чужим людям? "Вспомнил старика, что охраняет…

  • МТС как эталон маркетинговой мерзости

    Прочитал я новости, что безлимит перестаёт быть безлимитом и надо 15 руб в день платить. Неприятно, конечно - но не Орден матери Терезы, деньги на…

  • Вслед уходящему

    Почитал вчера прощальное письмо Слободина. Подумал, утро вечера мудренее. Хорошее письмо, уже сам тот факт, что не молчком ушёл - характеризует.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments