Установка linux на виртуальный жесткий диск
В этом разделе предполагается, что вы уже установили на виртуальный жесткий диск (VHD) операционную систему Debian Linux из ISO-файла, полученного с веб-сайта Debian. Существует несколько средств для создания VHD-файлов. Hyper-V — это лишь один из примеров. Инструкции по работе с Hyper-V см. в разделе Установка роли Hyper-V и настройка виртуальной машины.
Общие системные требования для Linux
Кроме того, мы рекомендуем удалить следующие параметры (если они заданы).
Графическая и "тихая" загрузка бесполезны в облачной среде, в которой требуется, чтобы все журналы отправлялись на последовательный порт. При желании можно настроить параметр crashkernel , однако учитывайте, что он сокращает объем доступной памяти в виртуальной машине на 128 МБ или более, что может оказаться проблемой в виртуальных машинах небольшого размера.
Установите агент Linux для Azure.
Агент Linux для Azure необходим для подготовки образа Linux в Azure. Во многих дистрибутивах агент предоставляется в виде пакета RPM или deb (такой пакет обычно называется WALinuxAgent или walinuxagent). Агент также можно установить вручную, как описано в руководстве по агенту Linux.
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Как правило, эта конфигурация используется по умолчанию.
Не создавайте пространство подкачки на диске с ОС.
Агент Linux для Azure может автоматически настраивать пространство подкачки с использованием диска на локальном ресурсе, подключенном к виртуальной машине после подготовки для работы в среде Azure. Локальный диск ресурсов является временным и может быть очищен при отмене подготовки виртуальной машины. После установки агента Linux для Azure (см. шаг 2) измените следующие параметры в /etc/waagent.conf соответствующим образом.
Выполните следующие команды, чтобы отозвать виртуальную машину.
Рекомендации по ядру Linux
Драйверы Linux Integration Services (LIS) для Hyper-V и Azure встраиваются непосредственно в основное ядро Linux. Во многих дистрибутивах, которые включают последнюю версию ядра Linux (например, 3.x), эти драйверы уже доступны, или же в ядре предоставляются их более ранние версии. Эти ядра в основном ядре постоянно обновляются с помощью новых исправлений и функций, поэтому по возможности рекомендуется использовать рекомендованный дистрибутив, включающий все исправления и обновления.
Если вы работаете с одним из вариантов Red Hat Enterprise Linux версий 6.0–6.3, вам потребуется установить последние драйверы LIS для Hyper-V. Начиная с RHEL 6.4 и более поздних версий (и его производных вариантов), драйверы LIS уже включены в ядро. Поэтому дополнительные пакеты установки не требуются.
Если необходимо собственное ядро, рекомендуется использовать одну из последних версий (то есть 3.8 или более позднюю). Для дистрибутивов или поставщиков, предоставляющих собственное ядро, рекомендуется регулярно переносить драйверы LIS из основного ядра в собственное. Даже если вы работаете с относительно свежей версией ядра, настоятельно рекомендуется отслеживать исправления драйверов LIS в основном ядре и по мере необходимости обновлять драйверы. Расположение файлов исходного кода драйверов LIS указано в файле MAINTAINERS в дереве исходного кода ядра Linux:
Ядро должно включать следующие исправления. Этот список не является исчерпывающим для всех дистрибутивов.
Установка Linux на VHD
Есть два ключевых отличия от варианта для BIOS:
1) в настройках VirtualBox необходимо установить опцию "Enable EFI";
2) при установке Debian диск был разбит на два раздела: ESP (EFI system partition) размером ~100 Мб, отформатированный в FAT32, и EXT4, занимающий всё оставшееся место.
Возможны и другие варианты разбиения. Раздел ESP при желании можно вынести за пределы VHD (он нам нужен только для загрузки на виртуальной машине), но все дальнейшие настройки сделаны исходя из того, что на VHD будет два раздела.
Изменение размера VHD
В таком случае вы можете изменить размер виртуальной машины с помощью консоли диспетчера Hyper-V или командлета Powershell Resize-VHD. Если вы работаете не в среде Windows, воспользуйтесь командой qemu-img для преобразования (если необходимо) и изменения размера VHD.
В команде qemu-img версии >=2.2.1 есть ошибка, которая приводит к созданию неверного формата VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать либо версию qemu-img 2.2.0 или более раннюю, либо версию 2.6 или более позднюю.
Изменение размера VHD с непосредственным использованием таких инструментов, как qemu-img или vbox-manage , может привести к сбою загрузки VHD. Мы советуем сначала преобразовать VHD в образ необработанного диска. Если образ виртуальной машины был создан в качестве образа необработанного диска (по умолчанию для некоторых гипервизоров, например, KVM), вы можете пропустить этот шаг.
Рассчитайте необходимый размер образа диска, чтобы округлить размер виртуальной памяти до 1 МБ. Следующий скрипт для оболочки Bash использует qemu-img info для определения виртуального размера образа диска и вычисляет размер с округлением до 1 МБ в большую сторону.
Измените размер необработанного диска с помощью $rounded_size , как показано выше.
А теперь преобразуйте необработанный диск обратно в VHD с фиксированным размером памяти.
Или с помощью qemu версии 2.6 или выше добавьте параметр force_size .
Создание виртуальных жестких дисков Debian с помощью Azure-Manage
Создавать виртуальные жесткие диски Debian для Azure можно с помощью скриптов azure-manage от Credativ. Рекомендуется использовать их, а не создавать образ с нуля. Например, чтобы создать виртуальный жесткий диск Debian 8, выполните следующие команды для скачивания средства azure-manage (и зависимостей) и выполнения скрипта azure_build_image :
Пример скрипта для настройки образа:
Обратите внимание, что важно добавлять ко всем командам, с помощью которых требуется настроить образ, префикс $ROOTCMD , поскольку используется псевдоним chroot $target .
В результате в текущий каталог будут записаны несколько файлов, в частности файл образа image_buster_azure_amd64.raw .
Чтобы преобразовать образ в формате RAW в формат VHD для Azure, выполните следующие действия:
Будет создан виртуальный жесткий диск (VHD) image_buster_azure_amd64.vhd с округленным размером, чтобы этот диск можно было успешно скопировать на диск Azure.
Теперь нужно создать ресурсы Azure для этого образа (используется переменная $rounded_size_adjusted , поэтому это действие нужно выполнять в том же процессе оболочки, что и выше).
Если из-за низкой пропускной способности обработка отправки с локального компьютера на диск Azure с помощью azcopy занимает слишком много времени, для ускорения процесса можно использовать jumpbox виртуальной машины Azure. Это можно реализовать следующим образом:
- Создайте tarball виртуального жесткого диска на локальном компьютере: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd .
- Создайте виртуальную машину Linux в Azure (дистрибутив по вашему усмотрению). При создании обязательно укажите достаточно большой размер диска для хранения извлеченного виртуального жесткого диска.
- Скачайте служебную программу azcopy на виртуальную машину Linux в Azure. Ее можно получить здесь.
- Скопируйте tarball на виртуальную машину: scp ./image_buster_azure_amd64.vhd.tar.gz :~ .
- Извлеките виртуальный жесткий диск на виртуальной машине: tar -xf ./image_buster_azure_amd64.vhd.tar.gz (это займет некоторое время, учитывая размер файла).
- Наконец, на виртуальной машине скопируйте виртуальный жесткий диск на диск Azure с помощью команды azcopy (см. выше).
Следующие шаги. Теперь виртуальный жесткий диск Debian Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.
Загрузка Linux с VHD может пригодиться в различных сценариях, например, когда на компьютере установлена Windows и есть необходимость в Linux, но WSL или виртуальной машины с Linux недостаточно, а разбивать диск на разделы нет желания. Microsoft позволяет грузить Windows с VHD «из коробки» начиная со старших редакций Windows 7. Но что делать, если возникла необходимость загрузить таким способом Linux?
На форумах часто можно встретить мнение, что загрузить Linux с VHD либо нельзя, либо очень сложно. Полезной информации в интернете на эту тему действительно мало. Базовая идея, как это осуществить, описана тут. Суть в следующем:
Необходимо убедиться в поддержке NTFS на всех этапах.
Необходимо убедиться в поддержке loop-устройств.
Добавить в загрузочные скрипты ОС команду монтирования loop-устройства.
Убедиться, что все необходимые утилиты добавлены в образ, обновить initramfs внутри VHD.
В случае legacy-зарузки (BIOS) и использования штатного загрузчика Windows добавить grub4dos в меню bootmgr, а в меню grub4dos добавить пункт для загрузки с VHD.
Практическое применение этой идеи для Arch Linux описано тут. В этой статье я проведу аналогичный эксперимент с Debian. Предполагается, что читатель имеет представление о работе с консолью в Windows и в Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п. — элементарные вещи подробно не расписаны.
Процесс загрузки будет выглядеть так: bootmgr -> grub4dos -> initramfs -> debian. Рассмотрим подготовку каждого этапа справа налево.
Установка Linux на VHD
Для начала необходимо создать пустой образ VHD с фиксированным размером. Если нужно минимизировать размер образа, то для экспериментов с CLI достаточно создать диск объемом ~1,5 Гб. Для рабочей системы с GUI можно ограничиться объемом 10 Гб (с условием хранения пользовательских данных вне VHD).
Создадим VHD с помощью diskpart.exe:
Далее необходимо установить Debian на VHD. Я для этого воспользовался VirtualBox 6.1, устанавливал debian-10.8.0-amd64-netinst.iso. Параметры виртуальной машины — по умолчанию, новый диск создавать не надо, достаточно подключить ранее созданный debian.vhd.
Установка Debian стандартна, обращу внимание только на некоторые моменты.
При разметке диска я создал один загрузочный раздел ext4. Раздел подкачки на VHD я делать не стал, после установки можно разместить файл или раздел подкачки в удобном месте.
При выборе дополнительного ПО для установки я оставил только SSH-сервер и стандартные системные утилиты. Всё остальное можно поставить потом, по необходимости. GRUB установлен в MBR. Если при установке была выбрана русская локаль, то после установки можно добавить локаль en_US командой dpkg-reconfigure locales .
Подготовка Linux к загрузке с VHD
В установленную систему необходимо добавить поддержку NTFS и утилиту partprobe, которая позволяет сообщить ядру ОС о необходимости повторного чтения таблицы разделов жёсткого диска.
Затем надо подготовить скрипты для initramfs.
initramfs — это начальная файловая система в оперативной памяти, которая содержит утилиты и скрипты, требуемые для монтирования файловых систем перед вызовом init, располагающегося в корневой файловой системе.
Скрипты для initramfs созданы на основе документации. Наши дополнения для initramfs мы будем размещать в следующих каталогах.
/etc/initramfs-tools/hooks/ — здесь размещаются скрипты, которые запускаются при генерации initramfs-образа. Тут мы разместим скрипт для добавления в initramfs утилиты partprobe с необходимыми библиотеками.
/etc/initramfs-tools/scripts/local-top/ — после выполнения этих скриптов загрузчик считает, что root-устройство смонтировано. Т.е. здесь будет скрипт для монтирования VHD.
Скрипт для добавления partprobe в initramfs возьмем из этой статьи с добавлением еще одной библиотеки. Надо создать файл partcopy и сделать его исполняемым:
Скрипт для монтирования VHD сделан на основе скрипта для Arch Linux с учетом особенностей выбранного дистрибутива Linux. Скрипт необходимо сохранить под именем loop_boot_vhd и сделать исполняемым:
Немного подробнее поясню логику работы скрипта. Обработка prereqs рекомендована в документации. В переменную cmdline попадает строка инициализации из grub4dos, например, root=/dev/loop0p1 loop_file_path=/debian.vhd loop_dev_path=/dev/sda2 . Далее идет разбор этой строки и из нее определяется номер партиции на loop-устройстве, а в переменные loop_dev_path и loop_file_path сохраняются путь к устройству, на котором хранится VHD-файл, и путь к VHD-файлу на устройстве. Если данные для этих переменных не переданы, то скрипт прекращает работу и система пытается загрузиться в обычном режиме. Если переменные определены, то загружается модуль ядра для подержки loop-устройств с указанием в параметрах максимального количества loop-устройств и максимального количества таблиц разделов на loop-устройстве. Затем командой blkid определяется тип файловой системы диска, на котором хранится VHD-файл. Если VHD лежит на NTFS, то монтирование производится с помощью команды ntfs-3g , иначе — командой mount . Монтирование производится в каталог /host (который при необходимости предварительно создается). После этого VHD подключается в систему командой losetup , а затем partprobe сообщает ядру о новом диске.
После размещения скриптов в нужные каталоги ( /etc/initramfs-tools/scripts/local-top/loop_boot_vhd и /etc/initramfs-tools/hooks/partcopy ) необходимо пересобрать initramfs командой:
Для дальнейшей настройки надо запомнить номер версии ядра: /boot/initrd.img-4.19.0-14-amd64 и /boot/vmlinuz-4.19.0-14-amd64.
На этом образ готов к запуску на реальном железе, можно выключать виртуальную машину и приступать к подготовке загрузчика. Готовый образ debian.vhd надо скопировать в корень диска C:, дальнейшие скрипты написаны исходя из предположения, что VHD находится в корне NTFS-раздела.
Настройка grub4dos
Для начала надо скачать актуальную версию grub4dos. Работа с этой утилитой в различных источниках описана достаточно подробно. Настройка сводится к следующему:
необходимо найти раздел, в корне которого лежит VHD-файл, и сделать его корневым для всех команд в текущем пункте меню (команда find --set-root );
затем загрузить образ жесткого диска (команды map . vhd и map --hook );
далее подключенный образ указать как корневое устройство (команда root );
и указать параметры запуска Linux ( kernel и initrd ).
Получается файл menu.lst с таким содержимым:
Тут надо обратить внимание на один момент: в команде kernel инициализируются переменные, которые передаются в initramfs и используются в ранее созданном скрипте loop_boot_vhd .
В моем примере переменные заполнены исходя из моей конфигурации компьютера: один диск с Windows, разбитый на два раздела (загрузочный "System Reserved" и основной NTFS), а внутри VHD — один раздел ext4.
Настройка загрузчика bootmgr
Обратите внимание: в зависимости от версии Windows и особенностей установки ОС возможны незначительные отличия.
Первое, что надо сделать, — подключить скрытый раздел с bootmgr, в примере ниже я подключаю скрытый раздел "System Reserved" в каталог C:\mnt (каталог должен быть предварительно создан). Команды выполняются в diskpart.exe:
После этого надо распаковать в каталог C:\mnt\ файлы из архива с grub4dos: grldr и grldr.mbr . В этот же каталог надо скопировать файл menu.lst , созданный на предыдущем шаге. После этого раздел можно отключить в diskpart.exe:
Чтобы настроить отображение пункта меню при загрузке Windows, надо сделать следующее:
В ответ будет сообщен GUID нового пункта меню. Полученный GUID используется в следующих командах:
Тут подробно не останавливаюсь, все команды очевидны и хорошо описаны в документации. Ну, и чтобы не переключаться лишний раз между графическим и текстовым режимами:
На этом всё: можно перезагрузить компьютер, выбрать в меню загрузки grub4dos, затем Debian, после чего должен загрузиться Linux.
Что делать, если не грузится?
В этом случае, скорее всего, неверно указаны параметры с путями к устройству, на котором находится VHD-файл, или раздел на loop-устройстве. Если загрузка останавливается на уровне grub4dos, то в консоли надо последовательно вводить команды, перечисленные в menu.lst , и смотреть на результаты, в зависимости от которых правильно указать параметры для загрузки Linux. Если загрузка останавливается в initramfs, то надо проверить доступность необходимых устройств на этом этапе. Проверить можно, последовательно вводя команды из скрипта loop_boot_vhd (основное: смонтировать нужные разделы, найти VHD, подключить его, проверить присвоенный номер партиции с Linux, в моем примере — loop0p1).
А как же UEFI?
Это немного другая история, надеюсь, позже найду время и проведу аналогичный эксперимент с UEFI.
В статье о возможности загружать Linux с VHD был предложен способ загружать Linux на машине с Windows без необходимости разбивать диск на разделы. Но было одно существенное ограничение: рассматривался только вариант загрузки BIOS, т.е. legacy-загрузки. Сейчас появляется всё больше устройств без поддержки режима legacy (например, многие ноутбуки, выпущенные в 2020 году). Поэтому в этой статье будет рассмотрена загрузка Linux с VHD на компьютерах с UEFI.
В чём отличия UEFI от BIOS, в интернете описано достаточно подробно, можно посмотреть, например, в этой статье. Для нас наиболее важным будет необходимость использовать разметку GPT для загрузочного диска и при создании разделов на VHD. Эксперименты проводились при отключенном Secure Boot. Не буду подробно останавливаться на моментах, описанных в предыдущей части. Как и ранее, предполагается, что читатель имеет представление о работе с консолью в Windows и Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п.
Предварительно отмечу еще ряд моментов. Можно было бы рассмотреть загрузку системы с внутреннего жесткого диска компьютера, но мы немного усложним задачу и будем загружать систему со съемного USB-диска, на котором будет располагаться VHD-файл. Все действия применимы и для внутреннего жесткого диска, а некоторые особенности будут отмечены в отдельном разделе.
Разработчики grub4dos недавно выпустили версию своего загрузчика для UEFI. При использовании версии grub4dos-for_UEFI-2021-02-10.7z на виртуальной машине у меня не возникло особых проблем при загрузке Linux с VHD, но на реальном железе при работе с тем же самым образом VHD была получена ошибка: Error 24: Attempt to access block outside of partition. С учетом простоты, с которой UEFI позволяет заменить загрузчик (простая замена файла), было решено воспользоваться загрузчиком grub2 из дистрибутива Debian debian-10.8.0-amd64-netinst.iso.
Особенности настройки параллельно с Windows bootloader
Disclaimer: дальнейшие действия могут привести к невозможности загрузить компьютер штатными средствами, все действия вы выполняете на свой страх и риск. Перед экспериментом проверьте, контролирует ли установленное антивирусное ПО целостность загрузчика. И не забывайте о возможных побочных эффектах.
Я опишу один из вариантов реализации выбора между загрузкой Windows и Linux: с помощью замены загрузчика на GRUB2. Загрузка EFI-систем по умолчанию начинается с файла \EFI\Boot\BOOTX64.EFI, в Windows 10 используется \EFI\Microsoft\Boot\bootmgfw.efi. Заменить загрузчик Microsoft на GRUB2 можно просто заменив файл. Необходимо быть внимательным, если сомневаетесь в получении результата с первого раза, то лучше сначала поэкспериментируйте на виртуальной машине. С помощью diskpart.exe надо подключить EFI-раздел Windows, на котором необходимо:
переименовать/перенести файл \EFI\Microsoft\Boot\bootmgfw.efi в \EFI\boot\ms.efi;
файл bootx64.efi из ISO-образа Debian переименовать в \EFI\Microsoft\Boot\bootmgfw.efi;
grubx64.efi разместить в \EFI\Microsoft\Boot\grubx64.efi;
probe.mod разместить в \EFI\debian\x86_64-efi\probe.mod;
ранее созданный grub.cfg скопировать в \EFI\debian\grub.cfg и добавить пункт для передачи управления загрузчику Microsoft:
Теперь при загрузке сначала будет появляться меню GRUB2 с выбором загрузки Windows ("ms") или Linux ("vhdUUID").
Если на каком-то из этапов загрузки возникают ошибки, то (как и с grub4dos) необходимо попытаться вводить команды вручную и смотреть, какие ошибки выдает система, как и куда монтируются разделы, доступны ли все необходимые файлы и т.п.
В реале, время от времени, мне приходится общаться с людьми, которые хотели бы попробовать ОС Linux, но боятся каким-то непредсказуемым образом повлиять на работу, столь любезной их сердцу Windows.
Тогда я объясняю им, что существует безболезненный способ установить Linux на свой компьютер, никоим образом не влияя на уже установленную операционную систему и не выделяя под него специальные разделы на диске. Для этого нужно просто установить в Windows специальную программу называемую виртуальной машиной, а уже в нее устанавливать Linux.
Некоторые из них считают сложным и это, хотя казалось бы,чего уж проще и безопаснее. Поэтому я решил написать небольшую инструкцию как все это делается.
Однако, прежде чем создавать виртуальную машину нужно определиться какую же операционную систему мы будем на нее устанавливать. На сегодняшний день существует огромная масса самых различных дистрибутивов Linuх. Наиболее популярным на сегодняшний день является Ubuntu, так что я беру для примера ее, но это не важно, можете взять любой другой доступный вам дистрибутив.
Итак, считаем, что дистрибутив у нас уже есть, переходим непосредственно к виртуальной машине.
Виртуальная машина это программа, внутри которой можно создать виртуальную платформу (грубо говоря компьютер) с заданными параметрами и устанавливать на него различное программное обеспечение. Все действия, которые вы совершаете внутри виртуальной машины никак не влияют на вашу основную операционную систему, за исключением того, что она отбирает у нее ресурсы, впрочем, как и любая другая программа.
Виртуальных машин, как и любого другого типа программ, достаточно много, но я пользуюсь VirtualBox, поэтому буду приводить примеры именно на этой программе. Почему именно на ней? Потому что она бесплатная и имеет простой понятный русскоязычный интерфейс.
После закачки начинаем установку, которая ничем не отличается от установки других программ.
1. В настройках установки нет необходимости что либо менять. Просто нажимаем «Next (Далее)» и «Install (Установить)». Также устанавливаем все службы, которые предлагает программа установки.
2. После завершения установки запускаем программу.
3. Как видим, у нас пока активна только одна кнопка «Создать», с помощью которой мы можем создать одну или несколько виртуальных машин.
4. Итак, нажимаем кнопку «Создать», после чего запуститься мастер создания новой виртуальной машины. В открывшемся окне даем машине любое имя (я не был оригинален и обозвал ее Ubuntu), выбираем из выпадающего списка операционную систему (Linux) и ее версию (Ubuntu) и жмем «Next».
5. В следующем окне нам нужно выбрать объем оперативной памяти, который будет выделен для виртуальной машины. Какой объем лучше всего выбрать? Если выберите мало, то ваша виртуальная машины получиться маломощной. Но сильно большой объем выбирать тоже нежелательно, так как виртуальная машина отбирает память от машины реальной (не беспокойтесь, только на время своей работы), поэтому я, как правило, выбираю объем оперативки для виртуальной машины в половину реального объема ОЗУ. Если кто не понял о чем речь, то просто в этом окне поставьте бегунок на середину.
6. В следующем окне мы выбираем виртуальный жесткий диск. В нашем случае мы просто создаем новый.
7. В этом окне оставляем все без изменений.
8. В этом окне выбираем динамический жесткий диск.
10. Смотрим, что у нас получилось и создаем виртуальный диск, нажав кнопку «Создать».
11. Проверяем параметры нашей виртуальной машины и создаем ее с помощью кнопки «Create».
Вот и все, машина создана, осталась только установить на нее операционную систему.
12. Приступим. Выделяем необходимую нам виртуальную машину (в нашем примере она одна, но вообще их может быть несколько) и нажимаем кнопку «Старт». Во всех случаях сразу же начнет загружаться установленная ОС, но при первом старте откроется несколько дополнительных диалоговых окон.
13. Тут внимательно читаем и нажимаем «Ок».
14. Далее идут окна мастера первого запуска. Читаем и жмем «Next».
15. А вот тут внимание, в качестве носителя необходимо выбрать образ, скачанного нами дистрибутива Ubuntu (нажимаем на желтую папочку с зеленой стрелочкой и выбираем файл образа).
16. Должно получится вот так.
16. Читаем и жмем на «Ок».
17. Linux стартовал. Когда видим такое окошко с маленькой клавиатурой и человечком внизу нажимаем клавишу «Enter».
18. После чего попадаем в меню выбора языка установки, где и выбираем нужный нам язык. Как видим Linux имеет множество локализаций. Однако, для того чтобы она прошла полностью у вас должен работать интернет, так как соответствующие пакеты будут скачаны из сети. Я выбираю русский и нажимаю «Enter».
19. Затем мы попадаем в меню установки, где выбираем второй пункт «Установить Ubuntu» и жмем «Enter».
20. После этого начнется установка выбранной нами операционной системы. Линукс устанавливается не сложнее чем Windows, поэтому описывать установку я не буду. Хотя если будут соответствующие пожелания то сделаю описание в следующей части. Имейте ввиду, что в окне виртуальной машины вы можете экспериментировать безбоязненно, в самом крайнем случае созданную нами виртуальную машину можно будет удалить и создать новую.
21. В заключении отмечу еще один важный момент. После установки любой системы она будет открываться в небольшом окне. Чтобы иметь возможность переключаться на полноэкранный режим вам необходимо установить дополнения гостевой ОС. Для этого заходим в меню «Устройства» и выбираем пункт «Установить Дополнения гостевой ОС».
Вот собственно и все. Как видим, приобщится к свободному программному обеспечению можно без особых жертв и рисков.
Соглашение об уровне обслуживания для платформы Azure применяется для виртуальных машин с ОС Linux, только если используется один из рекомендованных дистрибутивов. Для рекомендованных дистрибутивов предоставляются предварительно настроенные образы Linux, представленные в коллекции в Azure Marketplace.
К любым дистрибутивам, выполняющимся в Azure, предъявляются определенные требования. Поскольку каждый дистрибутив имеет свои особенности, привести исчерпывающую информацию в рамках одной статьи невозможно. Даже при соблюдении всех приведенных ниже условий для надлежащей работы может потребоваться масштабная настройка системы Linux.
В этой статье приводятся общие рекомендации по работе с дистрибутивом Linux в Azure.
Настройка grub.cfg
В GRUB2 можно получить UUID раздела с помощью модуля probe, поэтому он должен быть в сборке. За основу была взята сборка GRUB2 с установочного диска Debian, для загрузки нам понадобятся следующие файлы:
Их необходимо скопировать на EFI-раздел USB-диска:
Далее необходимо создать конфигурационный файл \EFI\debian\grub.cfg.
В cfg-файле всё достаточно очевидно, только обращу внимание, что VHD-файл имеет название debefi.vhd, и система будет искать его в корне всех найденных разделов. Для исключения ошибок название файла необходимо сделать уникальным для загружаемой системы. Ну и "gpt2" используется потому, что Linux установлен на втором разделе внутри VHD.
Общие замечания по установке Linux
Azure не поддерживает формат виртуального жесткого диска Hyper-V (VHDX) и может работать только с фиксированными виртуальными жесткими дисками. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета Convert-VHD. Если вы используете VirtualBox, при создании диска нужно выбрать фиксированный размер вместо динамически выделяемого, который используется по умолчанию.
Azure поддерживает виртуальные машины 1-го поколения (загрузка в BIOS) и 2-го поколения (загрузка в UEFI).
Максимально допустимый размер виртуального жесткого диска составляет 1023 ГБ.
При установке системы Linux рекомендуется использовать стандартные разделы, а не диспетчер логических томов (LVM), который часто используется по умолчанию при установке. Это позволит избежать конфликта имен LVM c клонированными виртуальными машинами, особенно если диск с OC может быть подключен к другой идентичной виртуальной машине в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
Требуется поддержка ядра для монтирования файловых систем UDF. При первой загрузке в Azure конфигурация подготовки передается в виртуальную машину Linux через UDF-носитель, подключенный к гостевой машине. Агент Azure Linux должен подключить файловую систему UDF для считывания конфигурации и подготовки виртуальной машины.
Версии ядра Linux ниже 2.6.37 не поддерживают NUMA в Hyper-V с виртуальными машинами большего размера. Эта проблема влияет в основном на дистрибутивы более ранних версий, в которых используется исходное ядро Red Hat 2.6.32, и была исправлена в Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504). В системах под управлением модифицированных ядер старше версии 2.6.37 или ядер RHEL старше 2.6.32-504 в командной строке ядра необходимо задать параметр загрузки numa=off в файле grub.conf. Дополнительные сведения см. в статье базы знаний Red Hat 436883.
Не настраивайте раздел подкачки на диске с ОС. Можно настроить агент Linux для создания файла подкачки на временном диске ресурсов, как описывается на следующих шагах.
Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ (1024 × 1024 байт). Перед конвертацией диска RAW в формат VHD убедитесь, что размер диска RAW в несколько раз превышает 1 МБ, как описывается на следующих шагах.
Убедитесь, что модули 'udf' (cloud-init >= 21.2) и 'vfat' включены. Добавление модуля udf в список блокировок вызовет сбой подготовки, а добавление в этот список модуля vfat приведет к сбоям в подготовке и загрузке. Cloud-init < 21.2 не затрагивается и не требует этого изменения.
Подготовка Linux к загрузке с VHD
Скрипт из предыдущей статьи нам подходит для загрузки на локальном компьютере, где состав дисков меняется редко и заранее известно, на каком диске хранится VHD-файл. Но мы себе поставили новую цель: иметь возможность загружаться с USB-носителя на любом компьютере с любой конфигурацией жестких дисков. Загрузчики grub4dos и grub2 умеют искать файлы на доступных разделах и работать с UUID разделов. Мы этим воспользуемся при создании конфигурационного файла загрузчика, а пока добавим обработку UUID в скрипт loop_boot_vhd.
В скрипт добавлено считывание нового параметра loop_dev_uuid . В нём ожидается UUID раздела, на котором находится VHD-файл (путь к нему передается, как и раньше, в параметре loop_file_path ). Если задан loop_dev_uuid , то значение, переданное в loop_dev_path , игнорируется и заменяется на найденный по UUID путь к устройству. Кроме того, если диск подключен по USB, то он может определяться в системе с задержкой. Поэтому добавлено ожидание (до 10 секунд), во время которого выполняется ежесекундная проверка, появилось нужное устройство или нет. Мы ищем раздел по UUID с помощью утилиты findfs. Она не входит в образ initramfs, для её добавления необходимо создать скрипт /etc/initramfs-tools/hooks/copyfindfs (не забывайте делать скрипты исполняемыми).
Скрипт loop_boot_vhd необходимо расположить, как и ранее, в /etc/initramfs-tools/scripts/local-top/. После чего пересобрать initramfs, и VHD-образ можно считать готовым.
Замечания по установке
- См. дополнительные сведения о подготовке Linux для Azure.
- Более новый формат VHDX не поддерживается в Azure. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета convert-vhd .
- При установке Linux рекомендуется использовать стандартные разделы, а не LVM — значение по умолчанию во многих дистрибутивах. Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой ВМ в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
- Не настраивайте раздел подкачки на диске с ОС. Можно настроить агент Linux для Azure для создания файла подкачки на временном диске ресурсов. Дополнительные сведения можно найти в инструкциях ниже.
- Размер виртуальной памяти всех VHD в Azure должен быть округлен до 1 МБ. При конвертации неподготовленного диска в формат VHD убедитесь, что размер этого диска в несколько раз превышает 1 МБ. См. дополнительные сведения об установке Linux.
Агент Linux для Azure
- Агент Linux выпускается по лицензии Apache 2.0. Многие дистрибутивы уже предоставляют пакеты RPM или deb для этого агента, поэтому вы легко сможете установить и обновить такие пакеты.
- Для работы агента Linux для Azure требуется Python v2.6+.
- Для агента также необходим модуль python-pyasn1. В большинстве дистрибутивов он предоставляется в виде отдельно устанавливаемого пакета.
- В некоторых случаях агент Linux для Azure может быть несовместим с NetworkManager. Многие предоставляемые в дистрибутивах пакеты RPM или Deb настраивают NetworkManager, в результате чего возникает конфликт с пакетом waagent. В таких случаях при установке пакета агента Linux удаляется NetworkManager.
- Версия агента Linux для Azure должна быть выше минимальной поддерживаемой версии.
Подготовка образа Debian для Azure
Вы можете создать базовый облачный образ Debian для Azure с помощью конструктора облачных образов FAI.
(Следующие команды git clone и apt install извлечены из репозитория облачных образов Debian.) Начните с клонирования репозитория и установки зависимостей:
При необходимости настройте сборку, добавив скрипты (например, скрипты оболочки) в ./config_space/scripts/AZURE .
Установка модулей ядра без Hyper-V
Так как Azure запускается на гипервизоре Hyper-V, Linux требует определенные модули ядра для запуска в Azure. При наличии виртуальной машины, созданной вне Hyper-V, установщики Linux могут не включать драйверы для Hyper-V в начальный электронный диск (initrd или initramfs), если только виртуальная машина не обнаружит, что он работает в среде Hyper-V. Если для подготовки образа Linux используется другая система виртуализации (например, Virtualbox или KVM), вам может потребоваться выполнить повторную сборку initrd, чтобы на начальном электронном диске были доступны по крайней мере модули ядра hv_vmbus и hv_storvsc. Это известная проблема встречается по крайней мере в системах на основе предшествующего дистрибутива Red Hat. Также она может встречаться в других версиях.
Механизм повторной сборки образа initrd или initramfs может отличаться в зависимости от дистрибутива. Чтобы узнать правильную процедуру для вашего дистрибутива, см. документацию по дистрибутиву или раздел поддержки. Ниже приведен пример выполнения повторной сборки initrd с помощью служебной программы mkinitrd :
Создайте резервную копию существующего образа initrd:
Выполните повторную сборку initrd с использованием модулей ядра hv_vmbus и hv_storvsc:
Читайте также: