Подключение локального диска через RDM

Филипп Зыков делится с нашими читателями, как физический диск на железе сервера превратить в RDM на vSphere:

Время от времени, особо упрямые и несогласные с предложенным функционалом Vsphere  VCenter  хотят вытворить что-то такое. А, потом, пишут про это статьи…

Итак, предыстория:

Я решил сделать супермегабюджетное решение в филиале. Там обитает админ, которого подпускать к серверам нельзя. Да, именно. Он не портит и не ломает, но придумывает такие кривые решения, что потом «нормальные» админы готовы ехать туда, чтобы обрушить на его голову свой праведный гнев. Так вот, для реализации «решения» есть DELL NF500 с 2 процами, 4Гб ОЗУ и RAID 5 2,7 Тб. Это вообще-то iSCSI-хранилище на Windows Server  2003. Нам для реализации кое-каких решений нужно завести 3 сервера Windows 2008R2. Железо покупать нельзя по целому ряду объективных и субъективных причин. Поэтому встал вопрос – как это организовать?  Поставили ESX 4.0 и встал вопрос разметки встроенного RAID. Подумав, отдали 700Гб под VM, а вот остальное решили сделать RDM*. Но через графический интерфейс Vsphere  VCenter  этого сделать нельзя, только на SAN можно делать RDM.

Прим.*:Да, пользовательские данные я храню на RDM. Vmdk я уже стирал, они у нас бились, мы долго ругались и решили что RDM это наш выбор. Бэкапить нам 2 Тб нам некуда, железа-то нет, и не будет.

Поиск решения дал ссылку на решение, которое работает в ESX 3.5.

Опытным путем было установлено, что для ESX 4.0 данные рекомендации будут выглядеть так:

  1. Создаем для VM новый диск, после этого данный диск Remove без удаления, чтобы получить vmdk-файл/заготовку для конвертации! Диск можно создавать с параметрами по умолчанию. Какие они – не важно.
  2. Открываем Putty, чтобы в  консоли написать немного команд.
  3. Смотрим  разделы  fdisk –l , находим нужный нам раздел из которого надо сделать RDM (можно опознать по размеру).
  4. Вычисляем его имя (naa.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) через  esxcfg-scsidevs -c
  5. После этого в консоли вводим команду vmkfstools -i  -d , которая делает конвертацию vmdk-файла.

Синтаксис ее такой : vmkfstools i [Путь к vmdk –файл ] –d rdm:/vmfs/devices/disks/naa.xxxxxxxxxxxxxxxxxxxxx  [vmdk-файл]

Пример: [root@dell-nf500 Arizona]# vmkfstools -i /vmfs/volumes/Local_Servers_VM/Arizona/Arizona_1.vmdk -d rdm:/vmfs/devices/disks/naa.60022190bd135e001238f9a43a44a6d8 Local_RDM.vmdk

Таким образом мы конвертируем любой vmdk-файл в RDM.

  1. После этого подключаем полученный vmdk через VC-клиент к VM и делаем с ним то, что считаем нужным.

rdm

Итак, на самом деле, это не совсем «кошер» и тянет на “грязный хак”, по меркам Vmware, но работает так как архитектура позволяет и допускает!

UPD. В комментариях Валерий Цуканов подсказывает другой работающий способ.

1. Создал из GUI обычный диск
2. Отцепил его от виртуальной машины
3. Выгнал “fdisk -l” и “ls -lh /vmfs/devices/disks/”
4. Открыл VMDK на редактирование, привел к следующему виду
————————————————————————-
# Disk DescriptorFile
version=1
encoding=”UTF-8″
CID=2fcb88a8
parentCID=ffffffff
createType=”vmfsRaw” <- новое значение

# Extent description
RW 3891167910 VMFSRAW “/vmfs/devices/disks/mpx.vmhba0:C0:T1:L0″ <- цифру брал из fdisk (Sec*Cyl*Head), путь из ls -lh

# The Disk Data Base
#DDB

ddb.longContentID = “31425c71cef152041d4c84452fcb88a8″
ddb.adapterType = “lsilogic” <- на buslogic не оживало
ddb.geometry.sectors = “63″ <- из fdisk
ddb.geometry.heads = “255″ <- из fdisk
ddb.geometry.cylinders = “242214″ <- из fdisk
ddb.virtualHWVersion = “7″
————————————————————————-
5. Подключил к vm, отформатировал, ошибок нет.

38 thoughts on “Подключение локального диска через RDM”

  1. Хм, я тут подумал, а ведь используя этот способ можно соорудить дешевое виртуальное iSCSI-хранилище.
    Т.е. добавить к этому рекомендации отсюда – http://vmpress.blogspot.com/2009/07/windows-storage-server-2008-microsoft.html и вуаля!
    В результате получаем, что железный сервер с дисками по-мимо того что он ESX, еще и диски свои отдает по iSCSI

    А можно и на линуксе через iSCSI Enterprise Target (IET).

    А если его собрать под ESX, то и виртуалка не нужна.

  2. а как esxi отнесется к смене железа ?
    если например он установлен на usb (или по pxe грузиться)
    мы отмапили RDM а после железка поменялась (usb с esxi и диски с данными RDM остались)

  3. нормально. эта процедура тока vmdk-файл меняет.
    вот если vmx грохнуть, т.е. VM, то процедуру надо повторить

  4. номер это свойство GUI от VC
    он ничего не значит, главное это то что написано в vmx
    тем более что vmdk можно подключать и отключать когда угодно

  5. Как-то очень мутно сделано.
    Зачем делать vmdk, а потом конвертировать? Зачем вычислять id?
    В vSphere Client идем в раздел Storage Adapters, там на нужном контроллере видим все диски и их Identifier.
    После этого в консоле набираем “vmkfstools -r /vmfs/devices/disks/naa.5xx {имя диска}” (если нажать tab, то id диска автоматом продолжится).
    Все. Не надо больше ничего конвертить….

  6. Я не могу проверить, так как не на чем. Но скорее всего так оно и есть.

    Авторам блога – сообщу.
    Спасибо.

  7. To Mr.Aloof:

    Вы оказались правы, коллега.
    Все проще.
    Недавно выдался случай проверить и “хак” упростился…
    Надо было тут одну машинку превратить в ESXi, чтобы решить пару вопросов, взяли обычную станцию с 3-мя дисками. Из 2-х надо было сделать RDM.
    Но 1-ый шаг все-таки:
    esxcfg-scsidevs -c или -l , а то имена бывают ну очень непонятные, особенно в случае 2-х одинаковых дисков.

    2-ой шаг:
    Синтаксис уточненный: “vmkfstools -r /vmfs/devices/disks/ {имя диска} (если нажать tab, то id диска автоматом продолжится) /vmfs/volumes/ {имя тома куда кладем полученный RDM-диск} (если нажать tab, то можно посмотреть имя тома куда кладем) {и не забываем дать имя vmdk}

    Примеры:
    1.

    vmkfstools -r /vmfs/devices/disks/t10.ATA_____WDC_WD2002FYPS2D01U1B0________________________WD2DWCAVY0654557 /vmfs/volumes/System/1.vmdk

    2.

    vmkfstools -r /vmfs/devices/disks/t10.ATA_____WDC_WD2002FYPS2D01U1B0________________________WD2DWCAVY0654557 /vmfs/volumes/System/2.vmdk

  8. Спасибо за полезную инфу.
    Только вот вопрос к спецам: скрипт выдает в результате ошибку: fault.RestrictedVersion.summary. Что ему надо, никто не подскажет?

  9. to phily

    ESX(i).
    за ссылочку спасибо – хоть знать буду куда рыть. 🙂

  10. Я так понял, что ничего из написанного никто так и не сделал…

    Железо: НР ДЛ380, Р400х512, САС 8*146Гб
    6 дисков в РАЙД5 – тут ЕСХ (4.0, 4.0У1)
    2 оставшихся – РАЙД 0+1 – заРДМить
    (о целесообразности прошу не писать – это просто тестовое железо)

    # esxcfg-scsidevs -l
    mpx.vmhba0:C0:T0:L0
    Device Type: Direct-Access
    Size: 699910 MB
    Display Name: Local VMware Disk (mpx.vmhba0:C0:T0:L0)
    Plugin: NMP
    Console Device: /dev/cciss/c0d0
    Devfs Path: /vmfs/devices/disks/mpx.vmhba0:C0:T0:L0
    Vendor: VMware Model: Block device Revis: 1.0
    SCSI Level: 2 Is Pseudo: false Status: on
    Is RDM Capable: false Is Removable: false
    Is Local: true
    Other Names:
    vml.0000000000766d686261303a303a30

    mpx.vmhba0:C0:T1:L0
    Device Type: Direct-Access
    Size: 139979 MB
    Display Name: Local VMware Disk (mpx.vmhba0:C0:T1:L0)
    Plugin: NMP
    Console Device: /dev/cciss/c0d1
    Devfs Path: /vmfs/devices/disks/mpx.vmhba0:C0:T1:L0
    Vendor: VMware Model: Block device Revis: 1.0
    SCSI Level: 2 Is Pseudo: false Status: on
    Is RDM Capable: false Is Removable: false
    Is Local: true
    Other Names:
    vml.0000000000766d686261303a313a30

    # vmkfstools -i /vmfs/volumes/Storage1/test/test_1.vmdk -d rdm:/vmfs/devices/disks/vml.0000000000766d686261303a313a30 Local_RDM.vmdk
    Destination disk format: raw disk mapping to ‘/vmfs/devices/disks/vml.0000000000766d686261303a313a30’
    Cloning disk ‘/vmfs/volumes/Storage1/test/test_1.vmdk’…
    Failed to clone disk : Invalid argument (1441801).

    # vmkfstools -i /vmfs/volumes/Storage1/test/test_1.vmdk -d rdm:/vmfs/devices/disks/vml.0000000000766d686261303a313a30:0 Local_RDM.vmdk
    Destination disk format: raw disk mapping to ‘/vmfs/devices/disks/vml.0000000000766d686261303a313a30:0’
    Cloning disk ‘/vmfs/volumes/Storage1/test/test_1.vmdk’…
    Failed to clone disk : The destination file system does not support large files (12).

    # vmkfstools -r /vmfs/devices/disks/vml.0000000000766d686261303a313a30 /vmfs/volumes/Storage1/RDM.vmdk
    Failed to create virtual disk: Invalid argument (1441801).

    # vmkfstools -r /vmfs/devices/disks/vml.0000000000766d686261303a313a30:0 /vmfs/volumes/Storage1/RDM.vmdk
    Failed to create virtual disk: The destination file system does not support large files (12).

    Т.е. вышеописанные способы не работают.

  11. Подробный ответ.
    Ок, Алексей. На неделе обязательно проверю и отпишусь!

  12. Алексей, прежде чем обвинять кого-то во лжи, потрудитесь хотя бы подумать почему у вас не получилось… или спросить что за ошибка такая?
    Дело в том, что диск у вас уже занят. Убедитесь что он не используется (У вас точно на этом диске нет datastore?).
    Для чего Вы пытаетесь замапить раздел на диске? (xxx:0) Это невозможно.
    Клонировать диск не нужно. Правильные команды для вас:

    vmkfstools -r /vmfs/devices/disks/mpx.vmhba0\:C0\:T1\:L0 /vmfs/volumes/Storage1/RDM.vmdk

    или:

    vmkfstools -r /vmfs/devices/disks/vml.0000000000766d686261303a313a30 /vmfs/volumes/Storage1/RDM.vmdk

  13. Еще добавлю для Алексея.
    В заметке по миграцию на виртуальную среду http://vmind.ru/2009/12/27/p2v-dlya-linux-s-minimalnym-prostoem как раз рассказано о одном из практических применений RDM локальных дисков. Это не “сферический конь в вакууме” а реальный проект.

  14. Та я и сам не сидел без дела, поковырял немного…
    “Failed to create virtual disk: The destination file system does not support large files (12).” – Переустановил ЕСХ на ВМФС с блоком 4 МБ – не помогло, т.е. дело не в “большом файле для файловой системы”.
    Ну и еще.
    http://download3.vmware.com/vmworld/2005/pac267-b.pdf
    стр. 15
    “RDM Disadvantages”:
    “Not available for block or RAID devices that do not report a SCSI serial number”
    Да, статья старая, но оч. точно подходит под мой случай.
    Попробую на Южном интел9Р – отпишусь (это почти уверен получится – потому что без РАЙДа)

  15. >Mr.Aloof
    Диск точно не занят (только-только создан).
    Если не указывать “:0”, то получаю ошибку “Failed to create virtual disk: Invalid argument (1441801).” (я писал выше)

  16. 1. Вот эта ошибка как раз правильная. Возникает из-за заблокированного чем-то диска.
    Еще раз повторяю, указание “:0” обозначает первый раздел на диске. Разделы НЕ ЯВЛЯЮТСЯ УСТРОЙСТВОМ, не понимают команды и для них НЕВОЗМОЖНО сделать RDM.
    Параметры vmfs, куда вы ложите vmdk-файл с конфигурацией диска(RDM.vmdk) значения не имеют.
    2. Ваш контроллер на 100% соответствует протоколу SCSI.

    У меня эта ошибка бывет только когда диск уже кем-то занят. Если вы только сделали LUN, и на нем нет vmfs-раздела, то должно все работать.

    О! Последний вопрос – у вас ESX или ESXi?

  17. Аналогичная Алексею картина. Такой же сервер, только диски вдвое меньше. Диски с нуля побиты на R1 (2) и R6 (6) . На Р1 поставлен ESXi, остальные диски прокидываю в RDM.

    # esxcfg-scsidevs -l
    mpx.vmhba1:C0:T1:L0
    Device Type: Direct-Access
    Size: 279900 MB
    Display Name: Local VMware Disk (mpx.vmhba1:C0:T1:L0)
    Plugin: NMP
    Console Device: /vmfs/devices/disks/mpx.vmhba1:C0:T1:L0
    Devfs Path: /vmfs/devices/disks/mpx.vmhba1:C0:T1:L0
    Vendor: VMware Model: Block device Revis: 1.0
    SCSI Level: 2 Is Pseudo: false Status: on
    Is RDM Capable: false Is Removable: false
    Is Local: true
    Other Names:
    vml.0000000000766d686261313a313a30

    Шустрый ESXi уже отформатировал этот раздел в VMFS. Это можно увидеть с помощью команд
    fdisk -l и df -h

    Делаю
    vmkfstools -r /vmfs/devices/disks/mpx.vmhba1\:C0\:T1\:L0 /vmfs/volumes/datastore1/RDM.vmdk
    выдает ту же ошибку, что и у вас. “Failed to create virtual disk: Invalid argument (1441801).”
    Удалил раздел VMFS через FDISK – ничего не изменилось.
    Продолжаем разбираться с Mr.Aloof

  18. >Mr.Aloof
    ЕСХ4 (писал выше)
    Пробовал то-же самое на НР МЛ350Ж5 (контроллер Е200) – аналогично.
    Если подскажете как “отключить” всё/всех от тома – с удовольствием попробую. Но судя по ошибке в случае попытки примонтировать том без “:0” – оно говорит “Invalid argument”, а не “дивайс бизи”.

  19. Понимаете, это недокументированная возможность. Не ждите адекватных сообщений об ошибке.
    Логика простая: пытаемся получить доступ к пути, указанному в параметре – не получается, значит параметр неверный.

    Отсылая команды разделу, в ответ приходит бред. И не понятно что он с ним пытается делать и почему ругается на неподдерживаемую длинну… Но так делать не нужно. Еще раз повторю – разделы это не диски, они команды SCSI не понимают!!! Как вы себе представляете рав-диск-маппинг раздела???

  20. Долгое время везло, но вот и я вступил в эту ошибку (12, 1441801). Судя по проявлениям (смотрел и на http://communities.vmware.com/message/1392809#1392809) проблема связана с контроллером (в моем случае Adaptec 5805) и версией ESX. Излечил следующим образом:
    1. Создал из GUI обычный диск
    2. Отцепил его от виртуальной машины
    3. Выгнал “fdisk -l” и “ls -lh /vmfs/devices/disks/”
    4. Открыл VMDK на редактирование, привел к следующему виду
    ————————————————————————-
    # Disk DescriptorFile
    version=1
    encoding=”UTF-8″
    CID=2fcb88a8
    parentCID=ffffffff
    createType=”vmfsRaw” <- новое значение

    # Extent description
    RW 3891167910 VMFSRAW “/vmfs/devices/disks/mpx.vmhba0:C0:T1:L0” <- цифру брал из fdisk (Sec*Cyl*Head), путь из ls -lh

    # The Disk Data Base
    #DDB

    ddb.longContentID = “31425c71cef152041d4c84452fcb88a8”
    ddb.adapterType = “lsilogic” <- на buslogic не оживало
    ddb.geometry.sectors = “63” <- из fdisk
    ddb.geometry.heads = “255” <- из fdisk
    ddb.geometry.cylinders = “242214” <- из fdisk
    ddb.virtualHWVersion = “7”
    ————————————————————————-
    5. Подключил к vm, отформатировал, ошибок нет.

  21. AddOn

    На счет без ошибок вру:
    В gui при отображении диалога Edit Settings маловразумительное сообщение:
    DiskCapControl: Minimum > Maximum in SetRange(1992277969920,274877906944)
    Так как в логах все тихо считаю что проблема где то в недрах gui.

    Так что “грязный хак” таки не сошел с рук просто так

  22. > Valeriy Tsukanov
    Спасибо, доктор,- ваш рецепт помог! 🙂
    Проверил на том-же железе.

  23. > Valeriy Tsukanov
    Большое спасибо! Ваш способ единственный из всего нета, который помог! Даже в книге М. Михеева способ оказался не рабочим. Подкл. RAID массив. Пока вроде нормально.
    Интересно что без команды vmkfstools – перепробовал кучу вариантов, а ручной правкой созд. в GUI диска .vmdk (загаловочного ф. назван. без -flat) в Putty c помощью консольного редактора vi.
    vi NAME.vmdk. По vi см. док-ю.

  24. Подключил диск к VSphere 5.0 по способу Mr.Aloof.
    При подключении к VSphere 4.1 выскакивали ошибки описанные выше, после поиска по англоязычным форумам, выявлена причина ошибки “Failed to create virtual

    disk: The destination file system does not support large files (12).” Файловая система VMFS 3 используемая в VSphere 4.1 при создании datastore запрашивает

    максимальный размер файла (по умолчанию 256ГБ, максимальный 2ТБ).
    При выполнении команды например: “vmkfstools -r /vmfs/devices/disks/mpx.vmhba0\:C0\:T1\:L0 vmfs/volumes/Storage1/RDM.vmdk” выполняется попытка создания файла

    RDM.vmdk на datastore Storage1 с размером равным размеру присоединяемого диска. Если ограничение 256ГБ, а диск больше получаем ошибку. На VSphere 5.0 можно

    использовать файловую систему VMFS 5, где нет ограничений по размеру файлов.

  25. Уважаемые спецы! Подскажите пожалуйста – при подключении iSCSI диска выпадает ошибка “Failed disk mapping”
    На 15 других компах (все 16 одинаковые) все спокойно подключилось, а на одном – нет 🙁
    Диски по сети (с рашаренных папок на других ящиках) спокойно подключаются, всякие эмуляторы типа DemoTool – аналогично, без проблем.
    Система: Windows 7 Pro x64
    Файл-сервер Dlink ShareCenter Pro 1100
    http://dlink.ru/ru/products/120/1451.html

  26. Все решилось само-собой! Оказывается не были установлены обновления (86шт)
    Спасибо.

  27. Диск размером 9TB с GPT.
    fdisk не запускается на GPT.
    vmkfstools -i и vmkfstools -r выдают:
    “Failed to create virtual disk: The destination file system does not support large files (12).”

    Помогла команда:
    vmkfstools -z /vmfs/devices/disks/mpx.vmhba0:C0:T1:L0 /vmfs/volumes/datastore1/Local_RDM_R.vmdk

    (-z –createrdmpassthru)
    Диск успешно подключился и работает в гостевой ОС.
    Подскажите, насколько это безопасно? Что такое rdmpassthru?

  28. vmkfstools -z данный параметр и отвечает за физический RDM, виртуальный не поддерживает разделы размером больше 2 ТБ (соответственно GPT).

  29. Сделал конвертацию обычного vmdk диска в RDM на Vmware ESXI 5.1 из SSH консоли в две команды.

    Предварительная подготовка (все делалось мышкой vSphere Client): Создал (добавил) в свойствах Виртуальной машины vmdk диск (любого размера – это не важно), там же в свойствах отцепил его от виртуальной машины (кнопка Remove). Через Browse Datastore нашел его в папке где лежит виртуальная машина и запомнил его имя в моем случае это: Win2003_64_R2_1.vmdk. Затем в закладке Configuration – Storage – Devices в таблице находим нужный нам диск (не должен быть подцеплен как Data storage, см. соседнюю таблицу Datastores) в моем случае это запись вида “Local LSI Disk (naa.600605b0039fd2c0189d5ea11e6cd30d)” кликаем в название левой клавишей мыши и копируем в буфер для вставки в команду конвертации.

    Далее подключаемся к SSH и вводим команды, используя скопированное выше название диска для подстановки в ключ команды конвертации. в путях фигурирует “hdd1” и “/Win2003_64_R2/” это имена моего Datastorage и папки Виртуальной машины на этом диске соответственно. В вашем случае эти пути будут отличаться.

    # vmkload_mod multiextent
    Загрузка модуля конвертации (по умолчанию в 5 версии не загружается. Выгрузка модуля командой: vmkload_mod -u multiextent)
    # vmkfstools -i /vmfs/volumes/hdd1/Win2003_64_R2/Win2003_64_R2_1.vmdk -d rdm:/vmfs/devices/disks/naa.600605b0039fd2c0189d5ea11e6cd30d /vmfs/volumes/hdd1/Win2003_64_R2/Win2003_64_R2_RDM.vmdk

    Если все прошло нормально вы увидите сообщение: “Clone: 100% done.”
    Все, диск RDM создан, можно прицеплять его чрез свойства виртуальной машины – добавить существующий диск. В моем случае это диск с именем Win2003_64_R2_RDM.vmdk

  30. Здравствуйте. Подскажите, у меня raid 5- 4Тб, в хранилище видится как 4 Тб, а “fdisk -l” показывает 2Тб

  31. “В хранилище” – это где? В программе управления вашей системой хранения данных?
    Если fdisk -l показывает этот диск как 2Тб, скорее всего:
    – версия хоста ESXi < 5.0; - раздел отформатирован в VMFS3. Тип файловой системы можно посмотреть в списке хранилищ.

Leave a Reply to Mr.Aloof Cancel reply

Your email address will not be published. Required fields are marked *