Zfs добавляет диск в пул

Обновлено: 21.11.2024

Учебники по Linux, программированию и открытым исходным кодам

После того как вы установили поддержку ZFS, вам необходимо создать zpool, в котором мы сможем хранить данные. В этом руководстве рассказывается, как создавать пулы с разными уровнями RAID.

  • одиночный/базовый (без RAID)
  • рейдз
  • raidz2
  • рейд 0
  • рейд 10

В этом руководстве я буду использовать Virtualbox с образами дисков фиксированного размера для эмуляции физических дисков, подключенных к моему серверу.

Обновление от 21 октября 2017 г.

После выполнения некоторых тестов я понял, что создание пулов с указанием таких дисков, как /dev/sda и /dev/sdb, несколько опасно. Ваш пул может испортиться или исчезнуть, если вы подключите другой диск и все буквы изменятся. Чтобы исправить это, используйте пути с /dev/disk/by-id/. вместо этого или немедленно преобразуйте свой пул после создания, запустив:

Кроме того, если ваш пул действительно ухудшился из-за ситуации, описанной выше, выполнение этих команд экспорта/импорта исправит ситуацию, даже если вы уже записали данные после того, как пул ухудшился.

Один диск (без RAID)

Замените sdb на то, что идентифицируется вашим диском.

С помощью параметра -f сообщение об ошибке не препятствует созданию. Будьте осторожны при использовании этого, так как вы можете перезаписать существующие пулы/разделы.

Несколько дисков (RAID 0)

Это создаст пул хранилища, в котором данные чередуются на всех указанных устройствах. Потеря любого из дисков приведет к потере всех ваших данных.

Добавление дисков

Вы можете добавлять диски в пул, чтобы увеличить его емкость. Любые новые данные будут динамически чередоваться в пуле, но существующие данные не будут перемещены, чтобы «сбалансировать» пул.

Рейд 1

Чтобы создать пул RAID1 (или зеркало), просто добавьте команду зеркало при создании или добавлении дисков. Например:

RAID 10

Создание пула RAID1 из двух дисков, а затем добавление еще одной пары зеркальных дисков, как показано выше, фактически приведет к созданию пула RAID 10, в котором данные чередуются по двум зеркалам. Это приводит к повышению производительности без ущерба для избыточности.

Чтобы создать массив RAID10 с помощью одной команды, просто запустите:

Вывод статуса sudo zpool будет показывать:

RAID Z (RAID 5)

RAIDz очень похож на RAID 5, в котором контроль четности создается и сохраняется, чтобы массив RAID мог корректно обработать сбой диска. Это означает, что емкость только одного диска «теряется», чтобы обеспечить избыточность для всего пула дисков. Это означает, что вы теряете намного меньше емкости, чем при использовании зеркал, что приводит к потере 50% емкости хранилища. Однако четность нельзя использовать для очистки, как в RAID 10, а вычисление четности для каждой транзакции плитки может замедлить ввод-вывод.

Чтобы создать пул RAIDz, просто запустите:

Вы не можете добавлять в пул RAIDz. Если бы вы выполнили команду ниже:

Тогда вы будете создавать массив RAID 0 поверх пула raidz и только что добавленного диска. Лучше всего это видно на выходе zpool status :

RAIDz2

Это очень похоже на RAIDz, за исключением того, что контроль четности будет храниться на двух дисках, а не на одном. Это означает, что ваш массив может потерять любые два диска без потери данных. Это означает, что на самом деле это безопаснее, чем RAID10, где вы потеряете все свои данные, если два диска в одном зеркале выйдут из строя. Использование RAIDz2 поверх RAIDz имеет большой смысл, поскольку вероятность потери диска при восстановлении деградировавшего массива RAIDz значительно возрастает. Таким образом, потеря диска во время восстановления не должна быть проблемой.

Чтобы создать пул RAIDz2, просто запустите:

Необходимо минимум 3 диска

RAIDz3

Точно так же, как RAIDz3, за исключением того, что третий диск поддерживает четность, а минимальное количество дисков равно 4. Ваш массив может потерять 3 диска без потери данных.

Чтобы создать пул RAIDz3, просто запустите:

Смешивание и сопоставление

Возможно, вы уже поняли, что можете смешивать и сочетать пулы. Пулы всегда «чередуются» друг с другом, создавая эффективный RAID 0 (хотя вам может потребоваться перебалансировка/реверсирование, если вы добавили в существующий пул). Это означает, что вы можете комбинировать любое количество зеркал и пулов RAIDz, чтобы создать любую сумасшедшую конфигурацию по вашему выбору. Например, вы можете запустить RAID 0 поверх RAIDz и зеркальных массивов.

Балансировка пула

Поскольку в ZFS нет встроенного инструмента для повторного чередования существующих данных при добавлении диска, я написал инструмент для перезаписи каждого файла в пуле, чтобы добиться этого. Перераспределение таким образом приводит к тому, что диски содержат равную долю данных и улучшают ввод-вывод. Лучше всего то, что все это делается внутри, поэтому вам не нужно экспортировать все свои данные, а затем снова записывать их, как предлагали другие.

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

Уничтожение пулов

Заключение

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

Я планирую сервер хранения, на котором пользователи будут хранить до 20 ТБ данных. Поскольку у меня есть хороший опыт работы с ZFS в Linux, я хотел бы использовать это. Однако я знаю, что объем данных будет расти на несколько 100 ГБ в год, поэтому в какой-то момент мне нужно будет увеличить размер пула. Поскольку данных так много, я боюсь, что полностью уничтожить zpool и создать его заново будет довольно хлопотно; поэтому мне интересно, можно ли увеличить емкость пула, добавив больше дисков и сохранив существующие. Пул будет как минимум RAIDZ-1. Или правда надо будет снимать один диск за другим и заменять на больший? нет, я не могу в это поверить. Как серверы большего размера, чем мой, справляются с растущим спросом на дополнительную емкость хранилища?

3 ответа 3

В основном существует два способа увеличения пула ZFS.

Это то, что пользователь 1133275 предлагает в своем ответе. Это делается с помощью zpool add (у которого в основном тот же синтаксис, что и у zpool create для указания хранилища), и он хорошо работает для своих целей.

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

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

Все виртуальные устройства в пуле должны быть выше соответствующих пороговых значений избыточности, чтобы пул можно было импортировать. Другими словами, каждый vdev должен быть как минимум DEGRADED, чтобы пул функционировал.

Это то, что вы обсуждаете в своем вопросе. Это обычный способ увеличения пула ZFS, когда у вас есть схема пула, которой вы довольны.

Чтобы заменить устройство новым, новое устройство должно быть не меньше старого.

На практике вы подключаете новый диск вместе со старым, а затем zpool заменяет старый диск новым. (При этом создается временное замещающее устройство, которое становится родительским для старого и нового дисков; после завершения восстановления замещающее устройство удаляется из дерева устройств, и создается впечатление, что новое устройство все это время было там.) старый диск можно удалить из системы.

После того, как все диски в виртуальном устройстве будут заменены более крупными, вы можете расширить пул, запустив zpool online -e или включив свойство autoexpand (хотя я бы не рекомендовал последнее; расширение пула должно быть сознательное решение).

В основном это зависит от вашего пула. Как уже упоминалось, недостатком нескольких виртуальных устройств является то, что все они должны быть функциональными, поэтому, добавляя виртуальные устройства, вы в некотором смысле снижаете свой запас прочности. Положительным моментом, однако, является то, что гораздо проще наращивать пул по частям. Замена устройств на месте в основном противоположна; вам не нужно поддерживать работу такого количества виртуальных устройств, но не так просто нарастить пул по частям.

Честно говоря, для меня, если на секунду предположить, что вы используете вращающиеся жесткие диски (поскольку это похоже на массовое хранилище), 20 ТБ все еще вполне разумно для одного пула vdev. Мое предложение в вашей ситуации состояло бы в том, чтобы получить шесть дисков типа 8 ТБ и настроить их в одном RAIDZ2 vdev. Это дает вам чистую емкость хранилища около 32 ТБ, что оставляет вам начальное около 35% свободного места и возможность потерять любые два диска до того, как какие-либо ваши данные подвергнутся значительному риску. Вы также можете рассмотреть возможность использования восьми дисков по 6 ТБ для чистой емкости хранилища около 36 ТБ и начать с 45% свободного места. (Я бы посчитал, что 6-8 дисков немного больше для raidz1, но нормально для raidz2.) Затем планируйте замену этих дисков либо по графику 4-5 лет (из-за износа), либо всякий раз, когда пул превысит около 80% заполнено (потому что ZFS намного, намного счастливее, когда у нее есть хороший запас). Если ваши цифры верны, вы должны заменять эти диски из-за износа задолго до того, как ваш пул начнет заполняться, при этом допуская разумный неожиданный рост потребностей в хранении. Когда вы заменяете диски, вы можете решить, устраивает ли вас размер пула, который у вас есть, исходя из текущего использования, или вы хотите получить диски большего размера и расширить пул.

Разработчик-основатель OpenZFS Мэтью Аренс на прошлой неделе отправил запрос на включение.

Джим Солтер – 15 июня 2021 г., 17:39 UTC

Увеличить / OpenZFS поддерживает множество сложных топологий дисков, но «спиральный стек, стоящий на столе» по-прежнему не входит в их число.

комментарии читателей

Поделиться этой историей

На прошлой неделе разработчик-основатель OpenZFS Мэтью Аренс открыл PR для одной из самых востребованных функций в истории ZFS — расширения RAIDz. Новая функция позволяет пользователю ZFS увеличивать размер одного виртуального устройства RAIDz. Например, с помощью новой функции можно превратить RAIDz1 с тремя дисками в RAIDz1 с четырьмя, пятью или шестью дисками.

Дополнительная литература

OpenZFS — это сложная файловая система, и объяснение того, как работает эта функция, обязательно станет немного запутанным. Поэтому, если вы новичок в ZFS, вы можете вернуться к нашему подробному введению в ZFS 101.

Расширение хранилища в ZFS

ZFS является не только файловой системой, но и массивом хранения и менеджером томов, а это означает, что вы можете обслуживать целую кучу дисковых устройств, а не только одно. Сердцем системы хранения ZFS является zpool — это самый фундаментальный уровень хранилища ZFS. Zpool, в свою очередь, содержит vdevs, а vdevs содержат в себе фактические диски. Записи разбиваются на блоки, называемые записями или блоками , которые затем полуравномерно распределяются между виртуальными устройствами .

Виртуальное устройство хранения может быть одного из пяти типов: один диск, зеркало, RAIDz1 , RAIDz2 или RAIDz3 . Вы можете добавить больше виртуальных устройств в zpool, а также подключить больше дисков к одному или зеркальному виртуальному устройству. Но такое управление хранилищем требует предварительного планирования и составления бюджета, что часто не вызывает особого энтузиазма у любителей и самодельщиков.

Обычный RAID, не разделяющий концепцию «пула» с ZFS, обычно предлагает возможность расширения и/или изменения формы массива на месте. Например, вы можете добавить один диск к массиву RAID6 из шести дисков, тем самым превратив его в массив RAID6 из семи дисков. Преобразование в реальном времени может быть довольно болезненным, особенно для почти полных массивов; вполне возможно, что такая задача может занять неделю или больше, при этом производительность массива будет ограничена четвертью или меньше от нормальной все время.

Исторически ZFS избегала такого расширения. ZFS изначально была разработана для использования в бизнесе, и изменение формы массива в реальном времени, как правило, не является стартовым в деловом мире. Снижение производительности вашего хранилища до непригодного для использования уровня в течение нескольких дней обычно обходится дороже в плане заработной платы и накладных расходов, чем покупка совершенно нового набора оборудования. Расширение в реальном времени также потенциально очень опасно, поскольку оно включает в себя чтение и перезапись всех данных и переводит массив во временное и гораздо менее проверенное состояние «половина этого, половина этого» до его завершения.

Для пользователей с большим количеством дисков новое расширение RAIDz вряд ли существенно изменит способ использования ZFS. По-прежнему будет проще и практичнее управлять vdev как целыми единицами, а не пытаться копаться внутри них. Но любители, домашние лаборанты и мелкие пользователи, запускающие ZFS с одним виртуальным устройством, скорее всего, получат много пользы от новой функции.

Как это работает?

Увеличить / На этом слайде мы видим четырехдисковый RAIDz1 (слева), расширенный до пятидискового RAIDz1 (справа). Обратите внимание, что данные по-прежнему записываются полосами шириной четыре!

С практической точки зрения, новая функция расширения vdev от Ahrens просто добавляет новые возможности к существующей команде, а именно к zpool attach , которая обычно используется для добавления диска к однодисковому vdev (превращая его в зеркальный vdev ) или добавьте к зеркалу дополнительный диск (например, превратив зеркало с двумя дисками в зеркало с тремя дисками ).

С новым кодом вы также сможете подключать новые диски к существующему виртуальному устройству RAIDz. Это увеличивает ширину виртуального устройства, но не меняет тип виртуального устройства, поэтому вы можете превратить шестидисковый RAIDz2 vdev в семидисковый RAIDz2 vdev, но вы не можете превратить его в семидисковый vdev. -диск RAIDz3 .

После ввода команды zpool attach начинается расширение. Во время расширения каждый блок или запись считывается из расширяемого виртуального устройства, а затем перезаписывается. Сектора перезаписываемого блока распределяются по всем дискам в vdev, включая новые диски, но ширина самого страйпа не изменяется. Таким образом, RAIDz2 vdev, расширенный с шести дисков до десяти, по-прежнему будет заполнен полосами шириной шесть после завершения расширения.

Поэтому, хотя пользователь увидит дополнительное пространство, освободившееся благодаря новым дискам, эффективность хранения расширенных данных не улучшится благодаря новым дискам. В приведенном выше примере мы перешли от шестидискового RAIDz2 с номинальной эффективностью хранения 67 процентов (четыре из каждых шести секторов — данные) к десятидисковому RAIDz2.Данные, новые записанные на десятидисковый RAIDz2, имеют номинальную эффективность хранения 80 процентов — восемь из каждых десяти секторов являются данными, — но старые расширенные данные по-прежнему записываются полосами шириной шесть, поэтому они по-прежнему имеет старую эффективность хранения 67 процентов.

Стоит отметить, что это не является неожиданным или причудливым состоянием для виртуального устройства — RAIDz уже использует динамическую переменную ширину чередования для учета блоков или записей, которые слишком малы для чередования всех дисков в одном виртуальном устройстве. .

Например, если вы записываете один блок метаданных — данные, содержащие имя файла, разрешения и расположение на диске, — он помещается в один сектор на диске. Если вы записываете этот блок метаданных в RAIDz2 шириной в десять, вы не записываете полный страйп шириной в десять — вместо этого вы записываете блок меньшего размера шириной всего в три диска; один сектор данных плюс два сектора четности. Таким образом, «маленькие» блоки в недавно расширенном RAIDz vdev не являются чем-то, что может запутать ZFS. Они просто еще один день в офисе.

Есть ли долгосрочное влияние на производительность?

Как мы уже говорили выше, недавно расширенный RAIDz vdev не будет похож на тот, который был разработан таким образом с самого рождения — по крайней мере, не на первых порах. Хотя в наборе больше дисков, внутренняя структура данных не меняется.

Добавление одного или нескольких новых дисков к виртуальному устройству означает, что его пропускная способность должна быть несколько выше. Несмотря на то, что устаревшие блоки не охватывают всю ширину vdev , добавленные диски означают большее количество шпинделей для распределения работы. Это, вероятно, не приведет к ошеломляющему увеличению скорости — шесть полос ширины на семидисковом виртуальном устройстве означают, что вы все еще не можете читать или записывать два блока одновременно, поэтому любые улучшения скорости, вероятно, будут незначительными.

Чистое влияние на производительность может быть трудно предсказать. Например, если вы расширяетесь от RAIDz2 с шестью дисками до RAIDz2 с семью дисками, исходная конфигурация с шестью дисками не требовала заполнения. Блок размером 128 КБ можно равномерно разрезать на четыре части данных по 32 КБ с двумя частями четности по 32 КБ. Одна и та же запись, разделенная между семью дисками, требует заполнения, поскольку 128 КБ/пять частей данных не выходят на четное число секторов.

Аналогичным образом, в некоторых случаях, особенно при небольшом размере записи или блока, рабочая нагрузка на отдельный диск может быть значительно менее сложной в старой, более узкой схеме, чем в новой, более широкой. Блок размером 128 КБ, разделенный на части по 32 КБ для RAIDz2 шириной шесть, может быть прочитан или записан более эффективно на диск, чем, например, блок, разделенный на части по 16 КБ для RAIDz2 шириной десять, так что это немного вопрос в том, обеспечит ли большее количество дисков, но меньших по размеру, большую пропускную способность, чем меньшее количество дисков, но более крупные части.

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

Почему бы не изменить форму записей/блоков во время расширения?

Может показаться странным, что первоначальный процесс расширения не перезаписывает все существующие блоки до новой ширины во время работы — в конце концов, он все равно читает и перезаписывает данные, верно? Мы спросили Аренса, почему исходная ширина осталась прежней, и ответ сводится к тому, что "так проще и безопаснее".

Одним из ключевых факторов, который следует учитывать, является то, что технически расширение не перемещает блоки ; это просто перемещение секторов. В том виде, как он написан, коду расширения не нужно знать, где находятся границы логических блоков ZFS — процедура расширения не знает, является ли отдельный сектор четностью или данными, не говоря уже о том, к какому блоку он принадлежит.

Расширение может проходить по всем указателям блоков, чтобы найти границы блоков, и затем оно будет знать, какой сектор принадлежит какому блоку и как изменить форму блока, но, по словам Аренса, выполнение действий, которые способ был бы чрезвычайно инвазивным для формата ZFS на диске. Расширение должно будет постоянно обновлять карты пространства на метапластинах, чтобы учитывать изменения размера каждого блока на диске, а если блок является частью набора данных, а не zvol , обновлять учет пространства для каждого набора данных и каждого файла по мере необходимости. хорошо.

Если у вас действительно чешутся зубы, когда вы знаете, что у вас четыре полосы шириной на свежем пятиширинном виртуальном устройстве, вы можете просто прочитать и перезаписать свои данные самостоятельно после завершения расширения. Самый простой способ сделать это — использовать zfs snapshot, zfs send и zfs receive для репликации целых наборов данных и zvols. Если вас не беспокоят свойства ZFS, вам поможет простая операция mv.

Однако в большинстве случаев мы рекомендуем просто расслабиться и позволить ZFS делать свое дело.Ваши блоки меньшего размера из старых данных на самом деле ничему не вредят, и поскольку вы естественным образом удаляете и/или изменяете данные в течение жизни vdev , большинство из них будут переписаны естественным образом по мере необходимости, без необходимости вмешательства администратора или долгого времени. периоды высокой загрузки хранилища из-за навязчивого чтения и перезаписи всего сразу.

Когда расширение RAIDz будет запущено в производство?

Новый код Аренса еще не является частью какого-либо выпуска OpenZFS, не говоря уже о добавлении его в чьи-либо репозитории. Мы спросили Аренса, когда мы можем ожидать увидеть код в действии, и, к сожалению, это произойдет через некоторое время.

Слишком поздно для включения расширения RAIDz в грядущий выпуск OpenZFS 2.1, который ожидается очень скоро (сейчас доступен кандидат в выпуск 2.1 7). Он должен быть включен в следующий основной выпуск OpenZFS; пока рано говорить о конкретных датах, но крупные релизы обычно выходят примерно раз в год.

Вообще говоря, мы ожидаем, что расширение RAIDz будет запущено в производство в Ubuntu и FreeBSD где-то в августе 2022 года, но это всего лишь предположение. TrueNAS вполне может запустить его в производство раньше, поскольку ixSystems имеет тенденцию извлекать функции ZFS из основного устройства до того, как они официально перейдут в статус выпуска.

Мэтт Аренс представил расширение RAIDz на саммите разработчиков FreeBSD — в этом видео его выступление начинается на отметке 1 час 41 минута.

Одной из основных задач администраторов Unix будет расширение и сокращение томов/файловых систем в соответствии с требованиями команды приложения. В Veritas, который управляет томами, мы выполняем такие задачи в режиме онлайн, не размонтируя файловые системы. Чтобы увеличить или уменьшить файловую систему, вам нужно добавить или удалить диски из дисковой группы в vxvm. Но в ZFS, после того как вы добавили диск в zpool, вы не можете удалить его, если у него нет действительных vdev (виртуальных устройств) в этом zpool. Итак, суть в том, что вы не можете уменьшить размер zpool, но его можно увеличить на лету, добавив новые LUNS или DISKS в zpool.

В терминологии ZFS тома — это не что иное, как набор данных ZFS, и размер набора данных может быть увеличен или уменьшен на лету без каких-либо проблем. Ознакомьтесь с разделом Расширение и сокращение наборов данных ZFS, также называемых томами (задача: 3) .

Сначала давайте рассмотрим расширение разделенного zpool.
Зачищенный ZPOOL:

2.Расширьте zpool, добавив новый LUN.

2.Попробуем добавить диск без зеркала на zpool oracle-M.

Поэтому вы не можете добавить диск без зеркальных копий в зеркальный zpool, и это имеет смысл.

3.Расширьте зеркальный zpool с помощью действительных vdev.

2. Добавьте новый LUN/диск в oracle-RZ, чтобы увеличить размер zpool.

Подобным образом вы также можете расширить пулы raidz2 и raidz3.

Я не вижу никаких официальных документов Oracle, в которых говорится об онлайн-ретрансляторе ZFS ZFS. По моему опыту, я нашел следующие способы сделать ретрансляцию.

Скрыть чередующийся zpool в зеркальный zpool:
Это можно сделать, просто добавив к нему зеркало.
1. Перечислите полосу zpool.

2. Преобразуйте макет пула oracle-S в зеркальный с помощью команды «zpool attach».

2. Преобразуйте zpool в чередующийся макет с помощью команды «zpool detach».


Преобразование зеркального zpool в RaidZ:
Нет прямой команды для преобразования зеркального zpool в raidz.
1.Отсоедините зеркало

2.Создайте новый zpool RAIDZ, используя отсоединенный диск и два новых диска.

3. Перенесите данные из пула oracle-S в пул oracle-Z с помощью моментального снимка.

4.Проверьте данные в пуле oracle-Z.

5.После проверки данных уничтожьте пул oracle-S и освободите LUN.

Читайте также: