ZFS - уничтожение дедуплицированного звола или набора данных останавливает работу сервера. Как восстановить?

11

Я использую Nexentastor на вторичном сервере хранения, работающем на HP ProLiant DL180 G6 с 12 средними (7200 об / мин) дисками SAS. Система имеет процессор E5620 и 8 ГБ оперативной памяти. Устройство ZIL или L2ARC отсутствует.

На прошлой неделе я создал разреженный zvol объемом 750 ГБ с возможностью дедупликации и сжатия, чтобы обмениваться данными через iSCSI с хостом VMWare ESX. Затем я создал образ файлового сервера Windows 2008 и скопировал ~ 300 ГБ пользовательских данных на ВМ. Когда я доволен системой, я переместил виртуальную машину в хранилище NFS в том же пуле.

После того, как мои виртуальные машины были запущены в хранилище данных NFS, я решил удалить исходный zvol 750 ГБ. Это остановило систему. Доступ к веб-интерфейсу Nexenta и NMC остановлен. В конце концов я смог добраться до необработанной оболочки. Большинство операций ОС были в порядке, но система зависала по zfs destroy -r vol1/filesystemкоманде. Некрасиво. Я нашел следующие две записи об ошибках в OpenSolaris и теперь понимаю, что машина будет работать в течение неизвестного периода времени. Прошло 14 часов, поэтому мне нужен план, чтобы иметь возможность восстановить доступ к серверу.

http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6924390

и

http://bugs.opensolaris.org/bugdatabase/view_bug.do;jsessionid=593704962bcbe0743d82aa339988?bug_id=6924824

В будущем я, вероятно, воспользуюсь советом, данным в одном из обходных путей в Buzilla:

Workaround
    Do not use dedupe, and do not attempt to destroy zvols that had dedupe enabled.

Обновление: мне пришлось принудительно отключить систему. После перезагрузки система останавливается на Importing zfs filesystems. Так было уже 2 часа.

ewwhite
источник

Ответы:

15

Это было решено. Ключевым моментом является то, что для дедуплицированных томов перед удалением необходимо отключить флаг дедупликации. Это должно быть сделано на уровне пула, а также на уровне zvol или файловой системы. В противном случае удаление по существу дедуплицируется. Процесс занимает время, потому что на таблицу дедупликации ZFS ссылаются. В этом случае ОЗУ помогает. Я временно добавил в систему 16 дополнительных гигабайт оперативной памяти и снова включил сервер. Zpool импортируется полностью в течение 4 часов.

Мораль, вероятно, заключается в том, что дедупликация не супер отполирована и что оперативная память необходима для ее работы. Я предлагаю 24 ГБ или больше, в зависимости от среды. В противном случае оставьте ZFS отключенной. Это определенно не подходит для домашних пользователей или небольших систем.

ewwhite
источник
5

Как давний пользователь устройств Sun / Oracle ZFS 7000-серии, я могу сказать, что дедупликация не безупречна. Никогда не путайте продажи с доставкой! Продавцы скажут вам: «О, это исправлено». В реальной жизни - в моей реальной жизни - я могу сказать, что 24 ГБ недостаточно для обработки «таблиц ДДТ». То есть внутренний индекс, в котором хранится таблица дедупликации. Эта таблица должна находиться в системной памяти, чтобы каждый ввод-вывод прерывался во время полета, чтобы выяснить, нужно ли ее записывать на диск или нет. Чем больше ваш пул хранения, тем больше данных меняется, чем больше эта таблица - и тем больше потребность в системной памяти. Эта память поступает за счет ARC (кеш), а иногда и самой ОС - вот почему вы испытываете зависания, поскольку некоторые команды выполняются на переднем плане, а некоторые - в фоновом режиме. Кажется, что удаление пула происходит на переднем плане, если вы не скажете иначе в CLI. Мастера графического интерфейса не будут этого делать.

Даже массовое удаление данных NFS в общем ресурсе, определенном на дедуплицированном томе, приведет к тому, что ваша система уменьшится вдвое, если у вас недостаточно памяти для обработки «записи» в ZFS с указанием удалить данные.

В общем, если вы не исчерпаете свою память и даже тогда, найдите способ зарезервировать память для ОС, ограничив ARC и DDT (и я не думаю, что вы можете ограничить DDT по своей природе, это просто индекс, точно связанный к вашему вводу / выводу) - тогда вы попадаете во время большого удаления или уничтожения звол / пулов.

Джон Берисфорд
источник