Proxmox физический диск для виртуальной машины

🐹 Proxmox Virtual Environment: Добавление и удаление хранилища ZFS в Proxmox VE.

Опубликовано 2020-10-04 · Обновлено 2021-01-30

Содержание:

1. Введение.

1.1. Описание файловой системы.

ZFS (Zettabyte File System) — файловая система, изначально созданная в Sun Microsystems для операционной системы Solaris. Эта файловая система поддерживает большие объёмы данных, объединяет концепции файловой системы и менеджера логических дисков (томов) и физических носителей, новаторскую структуру данных на дисках, легковесные файловые системы (англ. lightweight filesystems), а также простое управление томами хранения данных. ZFS является проектом с открытым исходным кодом и лицензируется под CDDL (Common Development and Distribution License).

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

В Proxmox VE с помощью ZFS можно позволить себе репликацию данных на другой гипервизор, миграцию виртуальной машины/LXC контейнера, доступ к LXC контейнеру с хост-системы и так далее.

1.2. Пулы хранения.

В отличие от традиционных файловых систем, которые располагаются на одном устройстве и, следовательно, при использовании более чем на одном устройстве для них требуется менеджер томов, ZFS строится поверх виртуальных пулов хранения данных, называемых zpool. Пул построен из виртуальных устройств (vdevs), каждое из которых является либо физическим устройством, либо зеркалом (RAID 1) одного или нескольких устройств, либо (RAID Z) — группой из двух или более устройств. Ёмкость всех vdevs затем доступна для всех файловых систем в zpool.

Для ограничения пространства, доступного конкретной файловой системе или тому, может быть установлена квота. Кроме того, возможно использование дискового резервирования (лимита) — это гарантирует, что всегда будет оставаться некоторый доступный объём для конкретной файловой системы или тома.

Каждый пул хранения состоит из одного или нескольких виртуальных устройств (virtual device, vdev). В свою очередь, каждый vdev включает одно или несколько реальных устройств. Большинство виртуальных устройств используются для простого хранения данных, но существует несколько вспомогательных классов vdev, включая CACHE, LOG и SPECIAL. Каждый из этих типов vdev может иметь одну из пяти топологий: единое устройство (single-device), RAIDz1, RAIDz2, RAIDz3 или зеркало (mirror).

RAIDz1, RAIDz2 и RAIDz3 — это особые разновидности того, что назовут RAID двойной (диагональной) чётности. 1, 2 и 3 относятся к тому, сколько блоков чётности выделено для каждой полосы данных. Вместо отдельных дисков для обеспечения чётности виртуальные устройства RAIDz полуравномерно распределяют эту чётность по дискам. Массив RAIDz может потерять столько дисков, сколько у него блоков чётности; если он потеряет ещё один, то выйдет из строя и заберет с собой пул хранения.

В зеркальных виртуальных устройствах (mirror vdev) каждый блок хранится на каждом устройстве в vdev. Хотя наиболее распространённые двойные зеркала (two-wide), в зеркале может быть любое произвольное количество устройств — в больших установках для повышения производительности чтения и отказоустойчивости часто используются тройные. Зеркало vdev может пережить любой сбой, пока продолжает работать хотя бы одно устройство в vdev.

Одиночные vdev по своей сути опасны. Такое виртуальное устройство не переживёт ни одного сбоя — и если используется в качестве хранилища или специального vdev, то его сбой приведёт к уничтожению всего пула. Будьте здесь очень, очень осторожны.

Читайте также:  Расход масла ниссан патрол y62

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

1.3. Встроенное сжатие.

Механизм копирования при записи также упрощает систему встроенного сжатия. В традиционной файловой системы сжатие проблематично — как старая версия, так и новая версия изменённых данных находятся в одном и том же пространстве.

Если рассмотреть фрагмент данных в середине файла, который начинает свою жизнь как мегабайт нулей от 0x00000000 и так далее — его очень легко сжать до одного сектора на диске. Но что произойдёт, если мы заменим этот мегабайт нулей на мегабайт несжимаемых данных, таких как JPEG или псевдослучайный шум? Неожиданно этому мегабайту данных потребуется не один, а 256 секторов по 4 КиБ, а в этом месте на диске зарезервирован только один сектор.

У ZFS нет такой проблемы, так как изменённые записи всегда записываются в неиспользуемое пространство — исходный блок занимает только один сектор 4 КиБ, а новая запись займёт 256, но это не проблема — недавно изменённый фрагмент из «середины» файла был бы записан в неиспользуемое пространство независимо от того, изменился его размер или нет, поэтому для ZFS это вполне штатная ситуация.

Встроенное сжатие ZFS отключено по умолчанию, и система предлагает подключаемые алгоритмы — сейчас среди них LZ4, gzip (1-9), LZJB и ZLE.

  • LZ4 — это потоковый алгоритм, предлагающий чрезвычайно быстрое сжатие и декомпрессию и выигрыш в производительности для большинства случаев использования — даже на довольно медленных CPU.
  • GZIP — почтенный алгоритм, который знают и любят все пользователи Linux-систем. Он может быть реализован с уровнями сжатия 1-9, с увеличением степени сжатия и использования CPU по мере приближения к уровню 9. Алгоритм хорошо подходит для всех текстовых (или других чрезвычайно сжимаемых) вариантов использования, но в противном случае часто вызывает проблемы c CPU — используйте его с осторожностью, особенно на более высоких уровнях.
  • LZJB — оригинальный алгоритм в ZFS. Он устарел и больше не должен использоваться, LZ4 превосходит его по всем показателям.
  • ZLE — кодировка нулевого уровня, Zero Level Encoding. Она вообще не трогает нормальные данные, но сжимает большие последовательности нулей. Полезно для полностью несжимаемых наборов данных (например, JPEG, MP4 или других уже сжатых форматов), так как он игнорирует несжимаемые данные, но сжимает неиспользуемое пространство в итоговых записях.

Рекомендуется сжатие LZ4 практически для всех вариантов использования. Штраф за производительность при встрече с несжимаемыми данными очень мал, а прирост производительности для типичных данных значителен. Копирование образа виртуальной машины для новой инсталляции операционной системы Windows (свежеустановленная операционная система, никаких данных внутри ещё нет) с compression=lz4 прошло на 27% быстрее, чем с compression=none .

1.4. Секторы.

Последний, самый базовый строительный блок — сектор. Это наименьшая физическая единица, которая может быть записана или считана с базового устройства. В течение нескольких десятилетий в большинстве дисков использовались секторы по 512 байт. В последнее время большинство дисков настроено на сектора 4 КиБ, а в некоторых — особенно SSD — сектора 8 КиБ или даже больше.

В системе ZFS есть свойство, которое позволяет вручную установить размер сектора. Это свойство ashift. Несколько запутанно, что ashift является степенью двойки. Например, ashift=9 означает размер сектора 2^9, или 512 байт.

ZFS запрашивает у операционной системы подробную информацию о каждом блочном устройстве, когда оно добавляется в новый vdev, и теоретически автоматически устанавливает ashift должным образом на основе этой информации. К сожалению, многие диски лгут о своём размере сектора, чтобы сохранить совместимость с Windows XP (которая была неспособна понять диски с другими размерами секторов).

Это означает, что администратору ZFS настоятельно рекомендуется знать фактический размер сектора своих устройств и вручную устанавливать ashift. Если установлен слишком маленький ashift, то астрономически увеличивается количество операций чтения/записи. Так, запись 512-байтовых «секторов» в реальный сектор 4 КиБ означает необходимость записать первый «сектор», затем прочитать сектор 4 КиБ, изменить его со вторым 512-байтовым «сектором», записать его обратно в новый сектор 4 КиБ и так далее для каждой записи.

Читайте также:  Схема двигателя ниссан qg15de

В реальном мире такой штраф бьёт по твёрдотельным накопителям Samsung EVO, для которых должен действовать ashift=13 , но эти SSD врут о своём размере сектора, и поэтому по умолчанию устанавливается ashift=9 . Если опытный системный администратор не изменит этот параметр, то этот SSD работает медленнее обычного магнитного HDD.

Для сравнения, за слишком большой размер ashift нет практически никакого штрафа. Реального снижения производительности нет, а увеличение неиспользуемого пространства бесконечно мало (или равно нулю при включённом сжатии). Поэтому мы настоятельно рекомендуем даже тем дискам, которые действительно используют 512-байтовые секторы, установить ashift=12 или даже ashift=13 , чтобы уверенно смотреть в будущее.

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

2. Подключаем диск в системе.

Подключаем физический диск к серверу и смотрим появился ли он в системе. Просто выполните действия в web-интерфейсе гипервизора Proxmox VE.

Инициализируем диск в GPT разметке диска.

Если всё хорошо, то преобразование может начаться сразу:

А может не начаться и выдать выдать ошибку:

Исправить ее очень просто. Переходим в консоль сервера и вводим эту команду в консоль:

# /sbin/sgdisk /dev/sdb -U R -g

Затем снова переходим в меню преобразования диска в GPT и операция завершается успешно.

3. Добавление нового хранилища.

Добавляем новое хранилище в web-панели управления Proxmox VE.

Переходим в web-интерфейс панели управления Proxmox VE, Выбираем сервер виртуальных машин и раздел «Диски» — «ZFS»:

Готово! ZFS в строю.

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

4. Удаление хранилища.

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

# zpool destroy name_of_zfs

Внимание! Удаление не предусматривает запроса на подтверждение. Имейте в виду. Удаляется сразу.

Очередная миграция PROXMOX в softRAID1, но теперь уже 3.2 и на GPT-разделах, установка FreeNAS 9.2 на виртуальную машину и проброс в него физического диска

В очередной раз мне понадобился сервер Proxmox. Железо следующее: AMD FX-4300, 4Gb, два диска 500Gb для самого proxmox и еще два для хранилища. Задачи слоял следующие: одна из машин FreeNAS, в нее хотелось пробросить несколько дисков (желательно физических), что бы на них разместить хранилище, и еще несколько ВМ не относящихся к статье.

У меня есть фишечка всегда пытаться ставить самые последнии версии, а не проверенные старые. Так произошло и в этот раз.
Скачал Proxmox VE 3.2 и FreeNAS 9.2. А вот что из этого получилось под катом.

Установив в очередной раз Proxmox (последнюю на данный момент версию 3.2) решил перевести его на SoftRAID1. Но обнаружил, что в отличии от 3.0, он (proxmox) преобразовал диск в GPT. Соответственно рекомендации в статье на которую я ориентировался не совсем актуальны. К тому же во всех статьях о переводе Proxmox в SoftRAID речь идет только о двух разделах (boot и LVM). В моем же случае разделов на диске было 3. Первый GRUB, а затем уже стандартные boot и LVM.

Это не должно нас остановить.

Перевод proxmox на softRAID на GPT разделах

Идем стандартным путем и ставим все необходимое ПО. И тут нас ждет еще один сюрприз связанный с тем, что с версии 3.1 репозиторий у Proxmox стал платным. Поэтому перед установкой нужных пакетов его нужно отключить (возможно, правильнее указать вместо него бесплатный тестовый репозитарий, но у меня получилось и просто закомментировать платный). Откройте его в любом редакторе

Читайте также:  Как называется выхлопные газы машин

и закомментируйте единственную строку.

Если вы все же хотите добавить бесплатный репозитарий, то выполните команду:
Спасибо heathen за его комментарий.

Теперь ставим необходимые пакеты:

последний нужен если вы проделываете это удаленно. Перенос LVM в RAID длится долго и желательно это делать через screen.

Проверяем что создание массивов теперь доступно:

Далее мы копируем разделы с sda на sdb. Вот тут то и начинаются отличия в MBR и GPT. Для GPT это делается так:
Присвоим новому жесткому диску случайный UUID.

Проверим что разделы созданы так как мы хотели:

диск sda диск sdb

Меняем флаги разделов sdb2 и sdb3 на raid:

Все получилось правильно.

Идем дальше и на всякий случай очищаем суперблоки:

Вывод «mdadm: Unrecognised md component device — /dev/sdb3» означает, что диск не участвовал в RAID.
Собственно, пора создавать массивы:

На вопрос «Продолжить создание массива?» отвечаем утвердительно.

Посмотрим, что у нас получилось:

В выводе видно состояние массивов — [_U]. Это обозначает, что в массиве есть лишь один диск. Так и должно быть, ведь второй (первый) мы в массив еще не включили. (missing).

Добавляем информацию о массивах в конфигурационный файл:

Скопируем раздел boot на соответствующий массив. (Добавил здесь команды отмонтирования раздела. Спасибо за информацию пользователю skazkin. Его опыт показал, что в некоторых случаях без этих действий может раздел boot оказаться пустым после перезагрузки):

Далее нам нужно закоментировать в /etc/fstab строку описывающую монтирование boot-раздела с UUID и пропишем монтирование соответствующего массива:

Должно получиться примерно так.
Перезагружаемся:

Настраиваем GRUB (делаем это абсолютно так же как и в оригинальной статье):

Теперь добавим раздел boot с первого (sda) диска в массив. Сначала пометим его флагом «raid»:

А затем и добавим:

Если посмотреть теперь состояние массивов:

то мы увидим, что md1 стал «двухдисковым» — [UU]

Теперь нужно перенести основной раздел — LVM. Тут нет никаких отличий от «оригинала», за исключением другой нумерации разделов и:

Здесь, так же по рекомендации skazkin добавил команду pvremove. Без нее (опять таки не всегда) может появиться другая проблема:

система не поймет что произошло с дисками и не загрузится дальше initramfs-консоли

Добавляем раздел sda3 в массив:

и видим, что он добавляется.

Так как я действую по оригинальной статье, то я пошел наливать кофе.

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

Для тех, кто как и я не понял почему на этом все, объясняю. Т.к. LVM том мы фактически перенесли с одного блочного устройства на другое, то и прописывать его не требуется (как это было с boot). Я на какое-то время застопорился на этом месте.

FreeNAS 9.2 на процессорах AMD

Следующим моим шагом была установка FreeNAS версии 9.2 на proxmox. Долго мучался. Пока не попробовал поставить из того же образа (FreeNAS 9.2) на другом proxmox-сервере. Он немного отличается от описываемого в статье: во-первых он на Core i7, во-вторых proxmox 3.1. И там это естественно встало на счет раз. Т.е. проблема либо в AMD (нет такого точно не может быть), либо в том, что в proxmox 3.2 поломали поддержку FreeBSD9 (бррр). Долго копал. Потом начал экспериментировать сам. В итоге все таки AMD. Что уж у них там за проблема, но как только я выставил в свойствах ВМ тип процессора Core 2 Duo FreeNAS 9.2 установился без проблем.

Проброс физического диска в KVM (proxmox)

Долго искал ответ на это вопрос на просторах Сети, но находил лишь обрывки. Может кто-то и по ним может сразу понять, что и как, но не я.
В общем делается это так (с консоли):

и добавляете в конце строку:

где sdc — это ваше устройство. Далее можно через запятую указать прочие параметры (их можно посмотреть в wiki proxmox’а).

Вот и все. Правда не знаю насколько такое подключение поднимает (или опускает) скорость дисковых операций. Тесты у меня еще впереди.

Оцените статью