Горячее подключение устройств в Xen
Материал из Xgu.ru
Как выполнять горячее подключение блочных устройств в Xen.
Перевод и редактирование: Игорь Чубин
- Короткий URL: xen/attach
Здесь рассматривается как выполнять горячее подключение блочных, сетевых и PCI-устройств в гостевой домен Xen, и как это может пригодиться при организации резервного копирования данных из доменов domU. При написании этой страницы использовался материал письма [1].
Содержание |
[править] Горячее подключение блочных устройств
У команды xm есть подкоманды block-attach и block-detach. В man-странице по xm рассказывается детальнее об этих подкомандах (надо заметить, что описание подкоманды block-detach там не совсем верное).
Эти команды, в частности, позволяют подключать/отключать (виртуальные) блочные устройства в domU. Делается это из домена dom0.
Например:
dom0# lvcreate -L1G -s -n mydomU sata1/mydomU-snap dom0# xm block-attach amandaserver phy:sata1/mydomU-snap dom0# blkid=$(xm block-list amandaserver| tail -n 1| awk '{ print $1; }')
Команда "xm block-list" показывает список устройств, подключенных к домену. Мы делаем предположение, что последний пункт в списке это последнее добавленное устройство. Это работает, но такое поведение нигде не задокументировано, поэтому оно может измениться. Нам нужно отслеживать block id устройств, поскольку команда block-detach требует знания именно id, а не имени устройства или файла.
После этого создаётся snapshot и подсоединяется к Amanda-серверу. Backup-сервер с помощью fsck выполняет проверку на вновь подключенном устройстве, монтирует его, выполняет резервное копирование, а потом размонтирует его.
После этого в домене 0 выполняется команда:dom0# xm block-detach amandaserver $blkid dom0# lvremove -f sata1/mydomU-snap
Здесь описано как выполнять подключение устройств из командной строки. Конечно, это можно делать и скриптами.
Аналогичным образом можно выполнять горячее подключение сетевых устройств, но это отдельная история.
[править] Подкоманды xm для работы с блочными устройствами
[править] block-attach
block-attach domain-id be-dev fe-dev mode [bedomain-id]
Создать новое виртуальное блочное устройство. В результате выполняется hotplug-событие для гостевого домена.
[править] Опции
- domain-id - Номер гостевого домена, к которому будет подключаться устройство.
- be-dev - Устройство в backend-домене (обычно домен 0), которое должно экспортироваться. Его можно указать как физический раздел (phy:sda7) или как файл, который должен быть смонтирован через loopback-устройство (file://path/to/loop.iso).
- fe-dev - Как устройство должно быть представлено в гостевом домене. Параметр можно указывать или в виде символьного имени (для распространённых устройств), например как /dev/hdc, или с помощью device id, например 0x1400 (код device id для /dev/hdc в шестнадцатеричной системе).
- mode - Режим доступа из гостевого домена. Поддерживаются режимы rw (read/write) и ro (read-only). В новых версиях необходимо писать "r" вместо "ro" и "w" вместо "rw".
- bedomain-id - backend-домен, обеспечивающий устройство. По умолчанию домен 0.
[править] Примеры
Монтирование ISO-диска:
xm block-attach guestdomain file://path/to/dsl-2.0RC2.iso /dev/hdc ro
Команда подключает ISO-файл dsl как /dev/hdc в гостевом домене в режиме read/only. Возможно, гостевая система и не увидит этот файл как сетевой, но ручное монтирование точно сработает.
[править] block-detach
block-detach domain-id devid
Удалить блочное устройство из домена. В качестве devid должно быть указано устройство домена 0. Номер определяется с помощью команды xm block-list.
Сейчас эта команда сломана. Даже если устройство удалено из домена domU, оно занято в домене 0.
[править] block-list
block-list [-l|--long] domain-id
Показать список виртуальных блочных устройств для домена. Вывод представлен в виде отформатированного списка или как S-выражение (S-Expression), в том случае, если задана опция --long.
[править] Горячее подключение сетевых интерфейсов
[править] Горячая проброска PCI-устройств (PCI-passthrough)
Патч pv_pcihp_pass.patch позволяет выполнять горячее подключение PCI-устройств внутрь PCI-доменов.
This patch makes it possible to attach/detach passthrough pci devices to/from pv domains, when pciback is compiled with CONFIG_XEN_PCIDEV_BACKEND_PASS option. With BACKEND_PASS options, the virtual device name is the same as the physical device name and multiple pci roots may be exposed to the guest. In this patch, adding new pci roots is supported by publishing new xenstore root-% nodes when new pci devices are attached. However, removing pci roots is not supported because implementing such 'pci root hot-removal' would add much complication. If a pci root becomes childless as the result of pci-detach, retaining it would be harmless.
[править] Дополнительная информация
|
---|