Вопрос или проблема
Я собираюсь настроить виртуальную машину, начав с двух дисков: один для / и один для данных, используя пул ZFS. Не хочу создавать диски виртуальной машины слишком большими, даже в случае динамического увеличения, и предпочитаю фрагменты, например, по 250 ГиБ на диск. На мой взгляд, это упрощает резервное копирование, работу с файлами и т.д. Поэтому в какой-то момент виртуальная машина может иметь 4 виртуальных диска вместо одного большого на 1 ТиБ. Единственный недостаток такого подхода в том, что ZFS воспринимает это как 4 отдельных диска и распределяет ввод-вывод и данные по всем этим 4 дискам.
Существует ли способ предотвратить это и заставить ZFS использовать подход, похожий на JBOD? Чтобы, хотя он и использовал все диски, например, просто записывал с начала и до конца линейным образом?
Мне известны возможные обходные решения, такие как LVM внутри виртуальной машины, но это излишне сложно. Я легко могу смириться с недостатками настройки ZFS и делал это в прошлом, это не было большой проблемой, даже когда виртуальные диски были только на основе HDD.
Я не нашел ничего и wondered, пропустил ли я что-то или это просто не поддерживается.
Ответ или решение
Создать ZFS-пул, который не использует стрипинг и работает в подобии JBOD (Just a Bunch Of Disks), можно, но стоит учитывать, что ZFS изначально проектировался для обеспечения высокой производительности и надежности с использованием различных конфигураций, включая RAID-Z и зеркало. Однако, если вам нужно использовать несколько меньших дисков, и вам не нужно объединять их в пул с параллельной записью, вы можете рассмотреть следующие методы.
-
Создание ZFS пула в режиме "Зеркало" (Mirror):
Вы можете создать ZFS-пул, используя только одиночные диски в зеркале. Например, если у вас есть четыре диска, вы их не объединяете в один большой пул, а создаете отдельные зеркала для каждого. Это создаст резервные копии данных на случай сбоя одного из дисков. Однако, нужно помнить, что в этом случае вы будете терять половину емкости из-за зеркалирования.zpool create mypool mirror /dev/disk1 /dev/disk2 mirror /dev/disk3 /dev/disk4
-
Использование ZFS-массива в режиме "Сначала-запись" (Sequential Write):
К сожалению, ZFS, как было упомянуто, не поддерживает напрямую простой JBOD режим. Однако, вы можете настроить конфигурацию, которая минимизирует влияние I/O на производительность, используя комбинацию "Запись ZIL" (ZFS Intent Log) и настройки кэша. Это не даст вам чистый JBOD, но позволит лучше управлять записью данных. -
Создание ZFS пула без стрипинга:
Если ваша основная цель — это уменьшить количество сбросов в памяти и последовательная запись, вам стоит рассмотреть использование набора из нескольких пулов, каждый из которых будет отдельным ZFS-пулом. Вы можете создать индивидуальные ZFS-пулы для каждого виртуального диска, например:zpool create data1 /dev/disk1 zpool create data2 /dev/disk2 zpool create data3 /dev/disk3 zpool create data4 /dev/disk4
В этом случае, каждый из виртуальных дисков будет работать независимо, и нет никакого стрипинга.
-
Использование ZFS datasets для управления пространством:
В дополнение к созданию пулов отдельными частями, вы можете использоватьdatasets
, которые позволят вам гибко управлять пространством и функционированием файловой системы внутри каждого пула. Это поможет вам организовать хранение данных, сохраняя при этом все преимущества, которые предоставляет ZFS, такие как снимки и репликация.
В общем случае, для вашей задачи, если вы хотите избегать стрипинга и последовательность записи данных, лучше всего создать несколько отдельных ZFS-пулов или использовать зеркала, исходя из ваших требований к производительности и надежности.
Учтите, что все рекомендации требуют тщательного планирования и тестирования в вашей конкретной среде, чтобы удостовериться, что они отвечают вашим ожиданиям и требованиям.