igor@0: \section{Подключениё устройств} igor@0: igor@0: \textbf{Как выполнять горячее подключение блочных устройств в Xen.}
igor@0: Перевод и редактирование: Игорь Чубин
igor@0: Короткая ссылка: http://xgu.ru/wiki/xen/block-attach
igor@0: Оригинал: \url{http://lists.xensource.com/archives/html/xen-users/2007-03/msg01024.html} igor@0: igor@0: Здесь рассматривается как выполнять горячее подключение устройств Xen, igor@0: и как это может пригодиться при организации резервного копирования igor@0: данных из доменов domU. igor@0: igor@0: \subsection{Горячее подключение устройств} igor@0: У команды \textit{xm} есть подкоманды \textit{block-attach} и \textit{block-detach}. igor@0: В man-странице по \textit{xm} рассказывается детальнее об этих подкомандах (надо заметить, что описание подкоманды \textit{block-detach} там не совсем верное). igor@0: igor@0: Эти команды, в частности, позволяют подключать/отключать (виртуальные) блочные устройства в domU. Делается это из домена dom0. igor@0: igor@0: Например: igor@0: \begin{verbatim} igor@0: igor@0: \end{verbatim} igor@0: \begin{verbatim} igor@0: igor@0: \end{verbatim} igor@0: igor@0: Команда \dq{}xm block-list\dq{} показывает список устройств, подключенных к домену. igor@0: Мы делаем предположение, что последний пункт в списке это последнее igor@0: добавленное устройство. igor@0: Это работает, но такое поведение нигде не задокументировано, igor@0: поэтому оно может измениться. igor@0: Нам нужно отслеживать block id устройств, поскольку команда \textit{block-detach} требует знания именно id, а не имени устройства или файла. igor@0: igor@0: \subsection{Резервное копирование данных домена} igor@0: После этого создаётся snapshot и подсоединяется к Amanda-серверу. igor@0: Backup-сервер с помощью fsck выполняет проверку на вновь подключенном устройстве, монтирует его, выполняет резервное копирование, а потом размонтирует его. igor@0: igor@0: После этого в домене 0 выполняется команда: \begin{verbatim} igor@0: block-attach domain-id be-dev fe-dev mode [bedomain-id] igor@0: \end{verbatim} igor@0: igor@0: Здесь описано как выполнять подключение устройств из командной строки. igor@0: Конечно, это можно делать и скриптами. igor@0: \begin{verbatim} igor@0: igor@0: \end{verbatim} igor@0: Аналогичным образом можно выполнять горячее подключение сетевых устройств, igor@0: но это отдельная история. igor@0: igor@0: \subsection{Подкоманды xm для работы с блочными устройствами} igor@0: \subsubsection{block-attach} igor@0: \begin{verbatim} igor@0: block-attach domain-id be-dev fe-dev mode [bedomain-id] igor@0: \end{verbatim} igor@0: igor@0: Создать новое виртуальное блочное устройство. igor@0: В результате выполняется hotplug-событие для гостевого домена. igor@0: igor@0: \paragraph{Опции} igor@0: \begin{itemize} igor@0: \item \textit{domain-id} -- Номер гостевого домена, к которому будет подключаться устройство. igor@0: \item \textit{be-dev} -- Устройство в backend-домене (обычно домен 0), которое должно экспортироваться. Его можно указать как физический раздел (phy:sda7) или как файл, который должен быть смонтирован через loopback-устройство (file://path/to/loop.iso). igor@0: \item \textit{fe-dev} -- Как устройство должно быть представлено в гостевом домене. Параметр можно указывать или в виде символьного имени (для распространённых устройств), например как /dev/hdc, или с помощью device id, например 0x1400 (код device id для /dev/hdc в шестнадцатеричной системе). igor@0: \item \textit{mode} -- Режим доступа из гостевого домена. Поддерживаются режимы rw (read/write) и ro (read-only). igor@0: \item \textit{bedomain-id} -- backend-домен, обеспечивающий устройство. По умолчанию домен 0. igor@0: \end{itemize} igor@0: igor@0: \paragraph{Примеры} igor@0: Монтирование ISO-диска: igor@0: \begin{verbatim} igor@0: xm block-attach guestdomain file://path/to/dsl-2.0RC2.iso /dev/hdc ro igor@0: \end{verbatim} igor@0: igor@0: Команда подключает ISO-файл dsl как /dev/hdc в гостевом домене в режиме read/only. Возможно, гостевая система и не увидит этот файл как сетевой, igor@0: но ручное монтирование точно сработает. igor@0: igor@0: \subsubsection{block-detach} igor@0: \begin{verbatim} igor@0: block-detach domain-id devid igor@0: \end{verbatim} igor@0: igor@0: Удалить блочное устройство из домена. igor@0: В качестве \textit{devid} должно быть указано устроство домена 0. igor@0: Номер определяется с помощью команды \textit{xm block-list}. igor@0: igor@0: Сейчас эта команда сломана. igor@0: Даже если устройство удалено из домена domU, igor@0: оно занято в домене 0. igor@0: igor@0: \subsubsection{block-list} igor@0: \begin{verbatim} igor@0: block-list [-l|--long] domain-id igor@0: \end{verbatim} igor@0: igor@0: Показать список виртуальных блочных устройств для домена. igor@0: Вывод представлен в виде отформатированного списка или как S-выражение (S-Expression), в том случае, если задана опция --long. igor@0: igor@0: \subsection{Дополнительная информация} igor@0: \begin{itemize} igor@0: \item xm(1) -- man-страница по \textbf{xm} igor@0: \item Amanda -- система для резервного копирования по сети igor@0: \end{itemize} igor@0: