:userdoc. :title.Справочник по библиотеке RxLVM .****************************************************************************** :h1 x=left y=bottom width=100% height=100% id=about.Уведомления :p.:hp2.Справочник по библиотеке RxLVM .br версия 0.5.1 - 18 марта 2007:ehp2. :p.Авторские права (C) 2006 Alex Taylor на библиотеку RxLVM (RXLVM.DLL и связанный с ней исходный код) и этот документ. Следующие условия лицензии применяются к обоим. :p.Распространение и использование в исходной и двоичной формах, с модификациями или без них, разрешены при соблюдении следующих условий&colon. :ol. :li.При повторном распространении исходного кода должно сохраняться указанное выше уведомление об авторских правах, этот список условий и следующий отказ от ответственности. :li.Распространение в двоичной форме должно воспроизводить указанное выше уведомление об авторских правах, этот список условий и следующий отказ от ответственности в документации и/или других материалах, поставляемых при распространении. :li.Имя автора не может использоваться для поддержки или продвижения продуктов, созданных на основе этого программного обеспечения, без специального предварительного письменного разрешения. :eol. :p.ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ &osq.&osq.КАК ЕСТЬ&csq.&csq., БЕЗ КАКИХ-ЛИБО ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО КОНКРЕТНОЙ ЦЕЛИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОР НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА КАКИЕ-ЛИБО ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, ОСОБЫЕ ИЛИ ТИПОВЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ЗАКУПКОЙ ЗАМЕНЯЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; ПОТЕРЕЙ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПРЕРЫВАНИЕМ БИЗНЕСА), НЕЗАВИСИМО ОТ ТОГО, БЫЛИ ЛИ ОНИ ВЫЗВАНЫ ПО КАКОЙ-ЛИБО ТЕОРИИ ОТВЕТСТВЕННОСТИ, БУДЬ ТО В КОНТРАКТЕ, СТРОГОЙ ОТВЕТСТВЕННОСТИ ИЛИ ДЕЛИКТЕ (ВКЛЮЧАЯ ХАЛАТНОСТЬ ИЛИ ИНОЕ), ВОЗНИКШЕМ КАКИМ-ЛИБО ОБРАЗОМ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА. .****************************************************************************** :h1 x=left y=bottom width=100% height=100% id=using.Использование API RxLVM :p.RxLVM (RXLVM.DLL) - это библиотека функций REXX для взаимодействия с Менеджером логических томов (LVM). :p.Поскольку REXX - язык с высокой доступностью, а LVM - потенциально разрушительный инструмент при неосторожном использовании, RxLVM разрешает доступ только к относительно небольшому подмножеству функций LVM. Эти функции носят исключительно информационный характер&colon. никаких средств для внесения изменений в систему не предусмотрено. :p.Используя функции RxLVM, Вы можете получить доступ к информации о дисках, томах и/или разделах, запросить Менеджер загрузки и проверить наличие съёмных носителей. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=registering.Регистрация и отмена регистрации функций :p.Как и в случае с любой библиотекой функций REXX, Вы должны зарегистрировать функции RxLVM, прежде чем сможете их использовать. :p.Функция :link reftype=hd refid=rxlvmloadfuncs.RxLvmLoadFuncs:elink. автоматически зарегистрирует все остальные функции RxLVM&colon. :xmp. CALL RxFuncAdd 'RxLvmLoadFuncs', 'RXLVM', 'RxLvmLoadFuncs' CALL RxLvmLoadFuncs :exmp. :p.Точно так же Вы можете отменить регистрацию всех функций RxLVM с помощью :link reftype=hd refid=rxlvmdropfuncs.RxLvmDropFuncs:elink.&colon. :xmp. CALL RxLvmDropFuncs :exmp. :nt.Рекомендуется, чтобы Ваши программы REXX всегда вызывали RxLvmDropFuncs после завершения использования RxLVM API. Это связано с тем, что время от времени могут выпускаться новые версии RxLVM, и если RXLVM.DLL обновляется, а функции из более старой версии всё ещё регистрируются, результаты могут быть непредсказуемыми.:ent. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=opening.Открытие и закрытие движка (механизма) LVM :p.Функциональный компонент подсистемы управления логическими томами называется :hp2.движком (механизмом) LVM:ehp2.. RxLVM использует механизм LVM (через интерфейс приложения LVM.DLL) для всех функций LVM. :p.В общем, прежде чем какая-либо программа сможет получить доступ к LVM, она должна :hp2.открыть:ehp2. механизм LVM. Движок LVM может быть доступен одновременно только для одной программы. :p.Следовательно, прежде чем Вы сможете использовать любую функцию RxLVM, кроме RxLvmLoadFuncs, RxLvmDropFuncs, RxLvmVersion, RxLvmEngineOpen и RxLvmRediscoverPRM (что является особым случаем), Вы должны сначала открыть механизм LVM с помощью функции :link reftype=hd refid=rxlvmengineopen.RxLvmEngineOpen:elink.. Например&colon. :xmp. opened = RxLvmEngineOpen() :exmp. :p.RxLvmEngineOpen возвращает пустую строку в случае успешного завершения или :link reftype=hd refid=errorstrings.строку ошибки:elink., если механизм LVM не может быть открыт. Наиболее частая причина сбоя - это если в другой программе уже открыт механизм LVM. (Дополнительную информацию смотрите в :link reftype=hd refid=rxlvmengineopen.описании функции:elink..) :p.Точно так же, как только Вы закончили работу с LVM, Вы должны :hp2.закрыть:ehp2. механизм LVM, используя функцию :link reftype=hd refid=rxlvmengineclose.RxLvmEngineClose:elink., например :xmp. CALL RxLvmEngineClose :exmp. :p.Обычно, механизм LVM должен автоматически закрываться при завершении текущей программы, но Вы, тем не менее, должны закрыть его явно, как только Вам больше не потребуется доступ к функциям LVM. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=handles.Использование дескрипторов :p.:hp2.Дескриптор:ehp2. - это уникальный идентификатор, поддерживаемый механизмом LVM для каждого тома, раздела и диска. Это четырехбайтовое значение, которое RxLVM представляет как восьмизначную шестнадцатеричную строку. :p.Различные функции RxLVM используют эти дескрипторы как способ однозначной идентификации тома, раздела или диска. Поскольку буквы дисков не являются обязательными (и могут быть изменены), это наиболее надёжный доступный способ идентификации. :nt.После закрытия механизма LVM (т.е. с помощью :link reftype=hd refid=rxlvmengineclose.RxLvmEngineClose:elink.) дескрипторы могут остаться действительными при следующем открытии механизма LVM (даже в рамках того же процесса).:ent. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=errorstrings.Строки ошибок LVM :p.Помимо возвращаемых значений, перечисленных в описании функций, все функции RxLVM, кроме RxLvmLoadFuncs, RxLvmDropFuncs, RxLvmVersion и RxLvmEngineClose могут также возвращать строку ошибки в формате ":hp2.ОШИБКА&colon.:ehp2. :hp3.n:ehp3.", где n - код ошибки, возвращаемый механизмом LVM. :p.Если получена ошибка в такой форме, это означает, что произошла ошибка при вызове функции в LVM.DLL (интерфейс движка LVM). Поэтому любая программа REXX должна проверять наличие таких ошибок при каждом вызове функции RxLVM. :p.Полный список кодов ошибок, которые может возвращать механизм LVM, можно найти :link reftype=hd refid=lvmcodes.здесь:elink.. .****************************************************************************** :h1 x=left y=bottom width=100% height=100%.Функции RxLVM :p.В этом разделе описаны все функции, доступные в библиотеке RxLVM. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmbootmgrinfo.RxLvmBootMgrInfo :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmBootMgrInfo──────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Запрашивает наличие и состояние IBM Boot Manager. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmBootMgrInfo возвращает пустую строку (""), если Менеджер загрузки не установлен. Если Менеджер загрузки был обнаружен, возвращает строку формата&colon. :p.:hp1.disk active timeout deftype defhandle:ehp1. :p.Значения различных полей&colon. :dl break=none tsize=12. :dt.:hp1.disk:ehp1. :dd.Номер физического диска (где 1 - первый диск), на котором установлен Менеджер загрузки. :dt.:hp1.active:ehp1. :dd.Флаг, показывающий, активен ли Менеджер загрузки (запускается). Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.1 :dd.Менеджер загрузки установлен и активен :dt.0 :dd.Менеджер загрузки установлен и не активен :edl. :dt.:hp1.timeout:ehp1. :dd.Текущее значение тайм-аута Менеджера загрузки (количество секунд до автоматической загрузки пункта меню указанного по умолчанию в :hp1.defhandle:ehp1., при запуске системы). Значение будет равно 0, если функция тайм-аута отключена. :dt.:hp1.deftype:ehp1. :dd.Флаг, указывающий на тип записи указанной по умолчанию в :hp1.defhandle:ehp1.. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.1 :dd.Запись по умолчанию - том :dt.0 :dd.Запись по умолчанию - раздел без тома :edl. :dt.:hp1.defhandle:ehp1. :dd.Дескриптор входа в меню по умолчанию. Это пункт меню Менеджера загрузки, который будет загружаться автоматически при запуске системы по истечении времени ожидания, которое указано в :hp1.timeout:ehp1.. :edl. :p.Если движок LVM обнаружит ошибку, будет возвращено сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. bmgr = RxLvmBootMgrInfo() SELECT WHEN bmgr == '' THEN SAY 'Boot Manager is not installed.' WHEN LEFT( bmgr, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR bmgr 'ERROR&colon.' lvm_error SAY 'Boot Manager state could not be determined. LVM.DLL returned error code' lvm_error RETURN lvm_error END OTHERWISE SAY 'Current Boot Manager configuration&colon.' bmgr END :exmp. :p.Ниже приведен образец вывода из этого примера&colon. :xmp. Current Boot Manager configuration&colon. 1 1 30 1 FC04D5A7 :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmbootmgrmenu.RxLvmBootMgrMenu :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.──RxLvmBootMgrMenu( stem )───────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Запрашивает содержание меню Менеджера загрузки. :p. :p.:hp7.Параметры:ehp7. :parml break=all. :pt.stem :pd.Имя переменной основы (массива), в которой будет храниться список пунктов меню Менеджера загрузки. После успешного завершения RxLvmBootMgrMenu, :hp1.stem:ehp1..0 будет содержать целое число :hp1.n:ehp1., указывающее количество найденных пунктов меню; а элементы с :hp1.stem:ehp1..1 по :hp1.stem.n:ehp1. будут содержать данные, описывающие один пункт меню, в формате&colon. :p.:hp1.handle type name:ehp1. :p.Значения различных полей&colon. :dl break=fit tsize=13. :dt.:hp1.handle:ehp1. :dd.Дескриптор загрузочного тома или раздела (уникальная 8-значная шестнадцатеричная строка). :dt.:hp1.type:ehp1. :dd.Флаг, указывающий, описывает ли пункт меню том или раздел без тома. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.1 :dd.Пункт соотносится с томом :dt.0 :dd.Пункт соотносится с разделом без тома :edl. :dt.:hp1.name:ehp1. :dd.Имя загрузочного тома или раздела. Это строка длиной до 20 символов, которая может содержать пробелы и знаки препинания. :edl. :eparml. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmBootMgrMenu возвращает 1 или сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. qm = RxLvmBootMgrMenu('menu.') IF LEFT( qm, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR qm 'ERROR&colon. ' lvm_error SAY 'LVM.DLL returned error code' lvm_error RETURN lvm_error END SAY 'Boot Manager menu contains' menu.0 'entries&colon.' DO i = 1 TO menu.0 SAY ' ' menu.i END :exmp. :p.Ниже приведен образец вывода из этого примера&colon. :xmp. The Boot Manager menu contains 3 entries&colon. FC04D5A7 1 System FC047F87 0 Windows 2000 FC04D4E7 1 Maintenance :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmdropfuncs.RxLvmDropFuncs :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmDropFuncs────────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Отменяет регистрацию всех функций API RxLVM. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmDropFuncs возвращает пустую строку (""). :p. :p.:hp7.Пример:ehp7. :xmp. CALL RxLvmDropFuncs :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmengineclose.RxLvmEngineClose :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmEngineClose──────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Закрывает движок LVM. Всегда вызывайте эту функцию после того, как Ваша программа REXX закончит работу с LVM. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmEngineClose возвращает пустую строку (""). :p. :p.:hp7.Пример:ehp7. :xmp. CALL RxLvmEngineClose :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmengineopen.RxLvmEngineOpen :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmEngineOpen───────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Открывает движок LVM. Механизм LVM должен быть открыт для использования любой другой функции RxLVM, кроме RxLvmLoadFuncs, RxLvmDropFuncs, RxLvmVersion и RxLvmRediscoverPRM. :p.Движок LVM может быть открыт одновременно только для одного процесса. RxLvmEngineOpen вернёт ошибку (см. ниже), если движок LVM уже открыт. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmEngineOpen возвращает пустую строку ("") или сообщение об ошибке LVM. :p.Код ошибки LVM обычно равен 5, если механизм LVM уже открыт в текущем процессе; или 9, если он открыт в рамках другого процесса. :p. :p.:hp7.Пример:ehp7. :xmp. open = RxLvmEngineOpen() IF open \= '' THEN DO PARSE VAR open 'ERROR&colon. ' lvm_error IF lvm_error \= '' THEN SAY 'LVM returned error code' lvm_error RETURN lvm_error END :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmgetdisks.RxLvmGetDisks :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.──RxLvmGetDisks( stem )──────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Получает список всех физических дисков, распознаваемых системой. :p. :p.:hp7.Параметры:ehp7. :parml break=all. :pt.stem :pd.Имя переменной основы (массива), в которой будет храниться список дисков. После успешного завершения RxLvmGetDisks, :hp1.stem:ehp1..0 будет содержать целое число :hp1.n:ehp1., указывающее количество найденных дисков; а элементы с :hp1.stem:ehp1..1 по :hp1.stem.n:ehp1. будут содержать данные, описывающие каждый диск, в формате&colon. :p.:hp1.handle number size unuseable corrupt removeable serial name:ehp1. :p.Значения различных полей&colon. :dl break=fit tsize=13. :dt.:hp1.handle:ehp1. :dd.Дескриптор диска (уникальная 8-значная шестнадцатеричная строка). :dt.:hp1.number:ehp1. :dd.Номер, который LVM присваивает дисководу. Это положительное целое число, где 1 представляет первый диск. :dt.:hp1.size:ehp1. :dd.Общий размер диска в мегабайтах (1 мегабайт = 1 048 576 байт). :dt.:hp1.unuseable:ehp1. :dd.Флаг, указывающий, считается ли диск непригодным для использования (т.е. недоступным) LVM. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.0 :dd.Диск пригодный для использования :dt.1 :dd.Диск в настоящее время считается как непригодный для использования. :edl. :dt.:hp1.corrupt:ehp1. :dd.Флаг, указывающий, есть ли на диске повреждённая таблица разделов (по сообщению LVM). Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.0 :dd.Таблица разделов правильная :dt.1 :dd.Таблица разделов определяется как повреждённая :edl. :dt.:hp1.removeable:ehp1. :dd.Этот флаг указывает, является ли диск съёмным носителем. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.0 :dd.Обычный дисковод :dt.1 :dd.Съёмный носитель с разделами :dt.2 :dd.Съёмный носитель типа "большая дискета" (например, супер-дискета LS-120) :edl. :dt.:hp1.serial:ehp1. :dd.Серийный номер, сообщаемый дисководом. Это целое число. :dt.:hp1.name:ehp1. :dd.Имя диска. Это строка длиной до 20 символов, которая может содержать пробелы и знаки препинания. :edl. :eparml. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmGetDisks возвращает 1 или сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. qd = RxLvmGetDisks("disks.") IF LEFT( qd, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR qd 'ERROR&colon. ' lvm_error SAY 'LVM.DLL returned error code' lvm_error RETURN lvm_error END SAY disks.0 'disks found&colon.' DO i = 1 TO disks.0 SAY ' ' disks.i END :exmp. :p.Ниже приведен образец вывода из этого примера&colon. :xmp. 3 volumes found&colon. FC047717 1 156327 0 0 0 890692272 [ D1 ] FC047767 2 156327 0 0 0 700276006 [ D2 ] FC0477B7 3 0 1 0 1 0 [ D3 ] :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmgetpartitions.RxLvmGetPartitions :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead. ──RxLvmGetPartitions( handle, stem )────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Получает список всех разделов на указанном диске или в указанном томе. Обратите внимание, что термин "раздел" в этом контексте включает непрерывные области свободного пространства, а также выделенные разделы. :p. :p.:hp7.Параметры:ehp7. :parml break=all. :pt.handle :pd.Дескриптор тома или диска, разделы которого нужно вернуть. :pt.stem :pd.Имя переменной основы (массива), в которой будет храниться список разделов. После успешного завершения RxLvmGetPartitions, :hp1.stem:ehp1..0 будет содержать целое число :hp1.n:ehp1., указывающее количество найденных разделов; а элементы с :hp1.stem:ehp1..1 по :hp1.stem.n:ehp1. будут содержать данные, описывающие каждый раздел, в формате&colon. :p.:hp1.handle diskhandle volhandle status filesystem size OS bootable name:ehp1. :p.Значения различных полей&colon. :dl break=fit tsize=13. :dt.:hp1.handle:ehp1. :dd.Дескриптор раздела (уникальная 8-значная шестнадцатеричная строка). :dt.:hp1.diskhandle:ehp1. :dd.Дескриптор диска, на котором расположен раздел (уникальная 8-значная шестнадцатеричная строка). :dt.:hp1.volhandle:ehp1. :dd.Дескриптор тома, которому принадлежит раздел (уникальная 8-значная шестнадцатеричная строка). Это будет 00000000, если раздел не принадлежит какому-либо тому. :dt.:hp1.status:ehp1. :dd.Флаг, указывающий на статус раздела. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.F :dd.Свободное пространство :dt.A :dd.Доступен, т.е. Раздел в данный момент не принадлежит ни одному тому. :dt.U :dd.Раздел не принадлежит тому, но помечен механизмом LVM как "используемый" (обычно это относится к разделу Менеджера загрузки). :dt.C :dd.Раздел представляет собой том стандартного типа (или "совместимый"). :dt.L :dd.Раздел относится к тому расширенного типа (или "LVM"). :dt.? :dd.Статус раздела определить не удалось. :edl. :dt.:hp1.filesystem:ehp1. :dd.Файловая система, которая в данный момент используется на этом разделе, или ? если файловую систему определить не удалось (например, в случае свободного пространства). :nt.Чтобы обеспечить правильный синтаксический анализ, RxLVM заменит любые пробелы в имени файловой системы байтовым значением 0xFF (что соответствует "неразрывному пробелу" для большинства системных кодовых страниц).:ent. :dt.:hp1.size:ehp1. :dd.Доступный размер раздела в мегабайтах (1 мегабайт = 1 048 576 байт). :dt.:hp1.OS:ehp1. :dd."Флаг операционной системы" (также известный как флаг "типа раздела"), сообщаемый разделом. Это двухзначное шестнадцатеричное байтовое значение. :dt.:hp1.bootable:ehp1. :dd.Флаг загрузочного раздела. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.B :dd.Загрузочный (раздел присутствует в меню Менеджера загрузки либо сам по себе, либо как том) :dt.S :dd.Стартовый (раздел является загрузочным или "активным") :dt.I :dd.Инсталлируемый (раздел сообщает о флаге "возможность установки", установленном инсталлятором IBM OS/2) :dt.N :dd.Пустой (раздел не является загрузочным) :edl. :dt.:hp1.name:ehp1. :dd.Имя раздела. Это строка длиной до 20 символов, которая может содержать пробелы и знаки препинания. :edl. :eparml. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmGetPartitions возвращает пустую строку ("") или сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. qd = RxLvmGetDisks('disks.') IF LEFT( qd, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR qd 'ERROR&colon. ' lvm_error SAY 'LVM.DLL returned error code' lvm_error RETURN lvm_error END DO i = 1 TO disks.0 SAY 'Partitions on Disk' i'&colon.' PARSE VAR disks.i handle . pd = RxLvmGetPartitions( handle, 'parts.') IF LEFT( pd, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR pd 'ERROR&colon. ' lvm_error SAY 'LVM.DLL returned error code' lvm_error RETURN lvm_error END DO j = 1 TO parts.0 SAY ' ' parts.j END END :exmp. :p.Ниже приведен образец вывода из этого примера&colon. :xmp. Partitions on Disk 1&colon. FC177D47 FC177717 00000000 U Boot&house.Manager 7 0A S [ BOOT MANAGER ] FC177C67 FC177717 FC179B17 C HPFS 2047 07 B OS/2 FC177F87 FC177717 00000000 A NTFS-H 19092 17 B Windows 2000 FC176197 FC177717 FC1788D7 L JFS 102404 35 N PROGRAMS FC1776F7 FC177717 FC178B77 L HPFS 32771 35 N FILES Partitions on Disk 2&colon. FC176297 FC177767 FC179BB7 C FAT16-H 2000 16 N SADUMP FC1765B7 FC177767 FC179A57 C FAT16 2000 06 B SERVICE FC1767C7 FC177767 FC178BD7 L JFS 136001 35 N WORKING FC1768F7 FC177767 00000000 F ? 16321 00 N [ FS1 ] Partitions on disk 3&colon. FC177B37 FC1777B7 00000000 F ? 96 00 N [ FS2 ] :exmp. :nt.Символ &house. используется для представления байта 0xFF, который обычно отображается на экране как пробел.:ent. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmgetvolumes.RxLvmGetVolumes :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.──RxLvmGetVolumes( stem )────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Получает список всех томов, определённых в системе. :p. :p.:hp7.Параметры:ehp7. :parml break=all. :pt.stem :pd.Имя переменной основы (массива), в которой будет храниться список томов. После успешного завершения RxLvmGetVolumes, :hp1.stem:ehp1..0 будет содержать целое число :hp1.n:ehp1., указывающее количество найденных томов; а элементы с :hp1.stem:ehp1..1 по :hp1.stem.n:ehp1. будут содержать данные, описывающие каждый том, в формате&colon. :p.:hp1.handle letter prefletter filesystem size device type bootable name:ehp1. :p.Значения различных полей&colon. :dl break=fit tsize=13. :dt.:hp1.handle:ehp1. :dd.Дескриптор тома (уникальная 8-значная шестнадцатеричная строка). :dt.:hp1.letter:ehp1. :dd.Буква диска, присвоенная тому в данный момент. Это одна буква от A до Z без двоеточия в конце. Если у тома нет буквы диска (что имеет место для скрытых томов), то вместо этого появится ?. :dt.:hp1.prefletter:ehp1. :dd.Буква диска без двоеточия, которую предпочитает иметь том (т.е. присвоенная ему пользователем). В случае конфликта это может отличаться от фактической буквы диска. Как указано выше, ? появится для скрытых томов. Если тому присвоена буква диска, которая не находится под контролем LVM (как, например, для компакт-дисков или сетевых дисков), вместо этого появится *. :dt.:hp1.filesystem:ehp1. :dd.Файловая система, используемая в данный момент на томе. :nt.Чтобы обеспечить правильный синтаксический анализ, RxLVM заменит любые пробелы в имени файловой системы байтовым значением 0xFF (что соответствует "неразрывному пробелу" для большинства системных кодовых страниц).:ent. :dt.:hp1.size:ehp1. :dd.Общий размер тома в мегабайтах (1 мегабайт = 1 048 576 байт). :dt.:hp1.device:ehp1. :dd.Тип устройства, на котором находится том. Это одно из следующих значений&colon. :dl compact tsize=6 break=none. :dt.HDD :dd.Привод жёсткого диска :dt.PRM :dd.Съёмный носитель с разделами :dt.CD :dd.CD/DVD привод (не контролируется LVM) :dt.LAN :dd.Сетевой диск (не контролируется LVM) :dt.? :dd.Неизвестный тип устройства (не контролируется LVM) :edl. :dt.:hp1.type:ehp1. :dd.Флаг, указывающий тип тома. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.0 :dd.Стандартный (или "совместимый") том :dt.1 :dd.Расширенный (или "LVM") том :edl. :dt.:hp1.bootable:ehp1. :dd.Флаг загрузочного тома. Это одно из следующих значений&colon. :dl compact tsize=4 break=none. :dt.B :dd.Загрузочный (том присутствует в меню Менеджера загрузки) :dt.S :dd.Стартовый (том является загрузочным или "активным") :dt.I :dd.Инсталлируемый (том сообщает о флаге "возможность установки", установленном инсталлятором IBM OS/2) :dt.N :dd.Пустой (том не является загрузочным) :edl. :dt.:hp1.name:ehp1. :dd.Имя тома. Это строка длиной до 20 символов, которая может содержать пробелы и знаки препинания. :edl. :eparml. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmGetVolumes возвращает 1 или сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. qv = RxLvmGetVolumes("vols.") IF LEFT( qv, 6 ) == 'ERROR&colon.' THEN DO PARSE VAR qv 'ERROR&colon. ' lvm_error SAY 'LVM.DLL returned error code' lvm_error RETURN lvm_error END SAY vols.0 'volumes found&colon.' DO i = 1 TO vols.0 SAY ' ' vols.i END :exmp. :p.Ниже приведен образец вывода из этого примера&colon. :xmp. 4 volumes found&colon. FC04D5A7 C C HPFS 2047 HDD 0 B System FC04D4E7 D D FAT16 2000 HDD 0 B Maintenance FC04C567 E E JFS 102404 HDD 1 N Applications FC04B0C7 H * CDFS 527 CD 0 N [ CDROM 1 ] :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmloadfuncs.RxLvmLoadFuncs :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmLoadFuncs────────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Регистрирует все остальные функции API RxLVM. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmLoadFuncs возвращает пустую строку (""). :p. :p.:hp7.Пример:ehp7. :xmp. CALL RxFuncAdd 'RxLvmLoadFuncs', 'RXLVM', 'RxLvmLoadFuncs' CALL RxLvmLoadFuncs :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmrediscoverprm.RxLvmRediscoverPRM :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.───RxLvmRediscoverPRM────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Проверяет, были ли подключены какие-либо съёмные носители с разделами (например, Zip-диски или USB-накопители) с момента последней такой проверки. :p.Проверка съёмных носителей выполняется при каждом вызове этой функции, при загрузке системы или при открытии механизма LVM. :nt.RxLvmRediscoverPRM требует чтобы механизм LVM был закрыт. Это может не сработать, если движок LVM уже открыт (любой программой).:ent. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmRediscoverPRM возвращает пустую строку ("") или сообщение об ошибке LVM. :p. :p.:hp7.Пример:ehp7. :xmp. discovery = RxLvmRediscoverPRM() IF discovery \= '' THEN DO PARSE VAR discovery 'ERROR&colon. ' lvm_error IF lvm_error \= '' THEN SAY 'LVM returned error code' lvm_error END :exmp. .* ---------------------------------------------------------------------------- :h2 x=left y=bottom width=100% height=100% id=rxlvmversion.RxLvmVersion :p.:hp7.Синтаксис:ehp7. :cgraphic. ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ &rahead.&rahead.──RxLvmVersion───────────────────────────────────────────────────────&rahead.&lahead. │ │ │ └───────────────────────────────────────────────────────────────────────────┘ :ecgraphic. :p.:hp7.Описание:ehp7. :p.Запрашивает текущую версию библиотеки RxLVM. :p. :p.:hp7.Параметры:ehp7. :p.Нет. :p. :p.:hp7.Возвращаемое значение:ehp7. :p.RxLvmVersion возвращает строку версии в форме ":hp1.x:ehp1..:hp1.y:ehp1..:hp1.z:ehp1.", где :hp1.x:ehp1., :hp1.y:ehp1., и :hp1.z:ehp1. положительное число, которое соответственно указывает основную версию, вспомогательную версию и уровень обновления библиотеки RxLVM. Обратите внимание, что :hp1.x:ehp1., :hp1.y:ehp1., и :hp1.z:ehp1. могут содержать любое количество цифр. :p. :p.:hp7.Пример:ehp7. :xmp. PARSE VALUE RxLvmVersion() WITH major '.' minor '.' refresh SAY 'Current RXLVM.DLL version is' major'.'minor 'refresh level' refresh :exmp. .****************************************************************************** :h1 x=left y=bottom width=100% height=100% id=lvmcodes.Коды ошибок, возвращаемые LVM :p.Интерфейс приложения к механизму LVM находится в системной библиотеке LVM.DLL и используется RxLVM для всех функций, связанных с LVM. :p.LVM.DLL определяет почти 50 различных кодов возврата для различных условий ошибки. При возникновении ошибки LVM, RxLVM возвращает :link reftype=hd refid=errorstrings.сообщение об ошибке:elink. в специальном формате, содержащее код возврата LVM. Различные коды перечислены ниже. :nt.Поскольку RxLVM не реализует большое количество функций LVM, многие из этих ошибок никогда не встретятся. Однако для полноты сюда включены все известные коды ошибок.:ent. :table cols='6 74'. :row. :c.ОШИБКА :c.ПРЕДПОСЫЛКА (СОСТОЯНИЕ) :row. :c.0 :c.Без ошибок (Операция прошла успешно) :row. :c.1 :c.Недостаточно памяти :row. :c.2 :c.Ошибка ввода-вывода :row. :c.3 :c.Недопустимый дескриптор :row. :c.4 :c.Внутренняя ошибка :row. :c.5 :c.Движок системы LVM уже открыт (то есть текущим процессом) :row. :c.6 :c.Движок системы LVM не открыт :row. :c.7 :c.Имя превышает максимально допустимую длину :row. :c.8 :c.Операция не разрешена :row. :c.9 :c.Сбой открытия диска (движок LVM может быть открыт другим приложением) :row. :c.10 :c.Неверный раздел :row. :c.11 :c.Не удаётся создать основной раздел с использованием запрошенных параметров :row. :c.12 :c.Слишком много первичных разделов :row. :c.13 :c.Не удаётся создать логический раздел с использованием запрошенных параметров :row. :c.14 :c.Запрошенный размер слишком велик :row. :c.15 :c.Система не сообщает о совместимости загрузки INT13X :row. :c.16 :c.Ошибка выравнивания раздела :row. :c.17 :c.Запрашиваемый размер слишком мал :row. :c.18 :c.Недостаточно свободного пространства :row. :c.19 :c.Неверный алгоритм распределения :row. :c.20 :c.Повторяющееся имя :row. :c.21 :c.Недопустимое имя :row. :c.22 :c.Неверное назначение буквы диска :row. :c.23 :c.Приводы не найдены :row. :c.24 :c.Неправильный тип тома :row. :c.25 :c.Том слишком маленький :row. :c.26 :c.Менеджер загрузки уже установлен :row. :c.27 :c.Менеджер загрузки не найден :row. :c.28 :c.Неверный параметр :row. :c.29 :c.Неверный набор функций :row. :c.30 :c.Выбрано слишком много разделов :row. :c.31 :c.Тома LVM (Расширенные) нельзя сделать загрузочными :row. :c.32 :c.Раздел уже используется :row. :c.33 :c.Не удалось сделать раздел загрузочным :row. :c.34 :c.Том не найден :row. :c.35 :c.Привод не найден :row. :c.36 :c.Раздел не найден :row. :c.37 :c.Слишком много активных функций :row. :c.38 :c.Раздел слишком маленький :row. :c.39 :c.Максимальное количество разделов уже используется :row. :c.40 :c.Запрос ввода-вывода вне диапазона :row. :c.41 :c.Раздел не может быть стартовым :row. :c.42 :c.Том не может быть стартовым :row. :c.43 :c.Сбой операции ExtendFS :row. :c.44 :c.Требуется перезагрузка :row. :c.45 :c.Не удаётся открыть файл журнала :row. :c.46 :c.Не удаётся выполнить запись в файл журнала :row. :c.47 :c.Повторное открытие не удалось :etable. .****************************************************************************** .* :h1 x=left y=bottom width=100% height=100% id=glossary.Глоссарий .* :dl. .* :dt.Загрузочный .* :dt.Привод (диск) .* :dt.Буква диска .* :dt.ExtendFS .* :dt.Дескриптор .* :dt.Инсталлируемый .* :dt.Раздел .* :dt.PRM .* :dt.Стартовый, запускается .* :dt.Том .* :dd. .* :edl. .* ---------------------------------------------------------------------------- .* :h2 x=left y=bottom width=100% height=100% id=. .* :p.:hp7.Синтаксис:ehp7. .* :cgraphic. .* ┌───────────────────────────────────────────────────────────────────────────┐ .* │ │ .* │ &rahead.&rahead.── ─────────────────────────────────────────────────────&rahead.&lahead. │ .* │ │ .* └───────────────────────────────────────────────────────────────────────────┘ .* :ecgraphic. .* .* :p.:hp7.Описание:ehp7. .* :p. .* .* :p. .* :p.:hp7.Параметры:ehp7. .* :p. .* .* :p. .* :p.:hp7.Возвращаемое значение:ehp7. .* :p. возвращает пустую строку ("") или сообщение об ошибке LVM. .* .* :p. .* :p.:hp7.Пример:ehp7. .* :xmp. .* :exmp. :euserdoc.