Инструменты пользователя

Инструменты сайта


30.05.2026

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
30.05.2026 [2026/05/30 20:26] VladPolskiy30.05.2026 [2026/06/03 07:31] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
----------------------------------------------------------------------- +====== Ручная сборка Arch ISO (Headless + WebUI======
-1.3.1. Распределение ролей при работе в Hyper-V (Virtual Machine) +
-tom_1 - эталонный хост, основная тестовая ВМ в Hyper-V для сборки iso образа, с доступом в интернет, с рабочим arch linux, на котором разверачивается Nginx (порт 7000) и работает SSH для PuTTY, созданы пользователи root и eva и им заданы пороли. +
-arch-flash - виртуальный диск ы Hyper-V (носитель с записанным iso образом), куда мы через rufus записываем, созданный нами ISO-образ на tom_1 +
-tom_2 - изолированный виртуальный хост, ВМ в Hyper-V без доступа в интернет, куда мы подключим arch-flash и развернем arch linux, на котором развернут Nginx (порт 7000) и работает SSH для PuTTY, созданы пользователи root и eva и им заданы пороли. +
-Добавление ролей при работе c физическим железом +
-usb-arch-server - физический usb носитель +
-arch-server - физический сервер (supermicro/hp/no-name) +
-1.3.2. Администраторы сервера +
-root - по умолчанию в Arch linux +
-eva - из установленного Arch linux +
-admin - новый создаваемый администратор +
-~/original_iso_image/ - суда грузим из интернета оригинальный образ +
-~/new_iso/ - тут собираем новый +
----------------------------------------------------------------------- +
-                [ Этап 3. Настройка через Chroot ] +
-                                  │ +
-                                  ▼ +
-                [ Этап 4. Конфигурация loader.conf ] +
-                                  │ +
-         ┌────────────────────────┴────────────────────────┐ +
-         ▼                                                 ▼ +
-  【 ВАРИАНТ А 】                                    【 ВАРИАНТ Б 】 +
-  Сборка "на лету" из ~/new_iso/                    Сборка через копирование структуры +
-  (Быстрый метод)                                   (Классический метод) +
-         │                                                 │ +
-         ▼                                                 ▼ +
-   [ Этап 5А ]                                        [ Этап 5Б ] +
-  Генерация efi.img и                              Создание папки ~/iso_source, +
-  прямой запуск xorriso                            перенос данных и запуск скрипта +
-         │                                                 │ +
-         └────────────────────────┬────────────────────────┘ +
-                                  │ +
-                                  ▼ +
-               [ Этап 6. Экспорт и запуск в Hyper-V ] +
------------------------------------------------------------------------ +
-1. Дублирование сборки ISO (Этап 4А против Этапа 5)+
-мы влючаем 2 вида: либо Этап 4А / либо Этапа 5+
  
-2. Смешение сущностей «RootFS» и «Готовый ISO»: 
-~/new_iso/ в ней мы собираем новый образ 
-sdb1 - это boot для arch-flash 
-sdb2 - это root для arch-flash 
  
-3. Ошибки в синтаксисе путей: +===== Этап 1. Подготовка диска sdb на хосте tom_1 =====
-В пункте 3.3.4.2 в параметре Server указано: В пункте 3.3.4.2 в параметре Server указано +
-через notepad++ указанно верно  +
-Server file:///var/cache/pacman/pkg. - видимо на сайте вики отображает через * +
---------------------------------------------------------------------------- +
-Ручная сборка Arch ISO (Headless + WebUI) +
-Этап 1. Подготовка диска sdb на хосте tom_1+
 Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным  Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным 
 накопителем-донором. с доступом в интернет. накопителем-донором. с доступом в интернет.
  
-1.1 Создание рабочих директорий: +==== 1.1 Создание рабочих директорий ==== 
-mkdir -p ~/original_iso_image/ ~/new_iso/+Схема создаваемой структуры: 
 +<code> 
 +/home 
 +└── eva 
 +    ├── new_iso 
 +    │   ├── boot 
 +    │   └── etc 
 +    │       └── fstab 
 +    └── original_iso_image 
 +        └── archlinux-x86_64.iso 
 +</code> 
 + 
 +<code bash #bash> 
 +# original_iso_image - для оригинального образа iso 
 +mkdir -p ~/original_iso_image/ 
 +# new_iso - рабочай директория, где будем собирать новый образа iso 
 +mkdir -p ~/new_iso/ 
 +</code> 
 +Как это работает 
 +  * mkdir имя_папки — создает новую директорию. 
 + 
 + 
 +Проаерка создания 
 +<code bash #bash> 
 +# original_iso_image - для оригинального образа iso 
 +ls -ld ~/original_iso_image/ 
 +# new_iso - рабочай директория, где будем собирать новый образа iso 
 +ls -ld ~/new_iso/ 
 +</code> 
 +Как это работает 
 +  * ls -ld имя_папки — выводит информацию о конкретной папке и её правах без показа содержимого. 
 + 
 +==== 1.2 Разметка виртуального диска sdb (будущий arch-flash) ==== 
 + 
 +===Просмотр списка дисков и разделов=== 
 +Самый наглядный способ увидеть все подключенные накопители, их размер и структуру:
  
-1.2 Разметка виртуального диска sdb (будущий arch-flash):+<code bash #bash> 
 +lsblk 
 +</code>
  
 скрипт создаст правильную структуру для UEFI + BIOS: скрипт создаст правильную структуру для UEFI + BIOS:
-sdb1 — BIOS Boot (1 МБ) -> для загрузки старого BIOS. +<note blue> 
-sdb2 — EFI System (1 ГБ, FAT32) -> для загрузки UEFI (ваш boot).+sdb1 — BIOS Boot (1 МБ) -> для загрузки старого BIOS.\\   
 +sdb2 — EFI System (1 ГБ, FAT32) -> для загрузки UEFI (ваш boot).\\  
 sdb3 — Linux root (Все оставшееся место, BTRFS) sdb3 — Linux root (Все оставшееся место, BTRFS)
 +</note>
  
 Используйте один из следующих вариантов размеи дисков с  Используйте один из следующих вариантов размеи дисков с 
Строка 67: Строка 59:
  
 1.2.1 Использование утилиты fdisk 1.2.1 Использование утилиты fdisk
 +<code bash #bash>
 sudo fdisk /dev/sdb <<EOF sudo fdisk /dev/sdb <<EOF
 g g
Строка 89: Строка 82:
 w w
 EOF EOF
 +</code>
 +
 +
  
 1.2.2 Использование утилиты sfdisk 1.2.2 Использование утилиты sfdisk
 +<code bash #bash>
 sudo sfdisk /dev/sdb << EOF sudo sfdisk /dev/sdb << EOF
 label: gpt label: gpt
Строка 100: Строка 97:
 /dev/sdb3 : start=     2101248, size=            +, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4 /dev/sdb3 : start=     2101248, size=            +, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
 EOF EOF
 +</code>
  
 +Поверим
 +<code bash #bash>
 +lsblk
 +</code>
  
-1.3 Форматирование разделов с метками (LABEL):+==== 1.3 Форматирование разделов с метками (LABEL) ====
 1.3.1 Назначение метки ARCH_BOOT для UEFI-загрузчикаFAT32: 1.3.1 Назначение метки ARCH_BOOT для UEFI-загрузчикаFAT32:
 +<code bash #bash>
 sudo mkfs.vfat -F 32 -n "ARCH_BOOT" /dev/sdb2 sudo mkfs.vfat -F 32 -n "ARCH_BOOT" /dev/sdb2
 +</code>
 +
  
 1.3.2 Назначение метки ARCH_ROOT для корневой системы BTRFS: 1.3.2 Назначение метки ARCH_ROOT для корневой системы BTRFS:
 +<code bash #bash>
 sudo mkfs.btrfs -f -L "ARCH_ROOT" /dev/sdb3 sudo mkfs.btrfs -f -L "ARCH_ROOT" /dev/sdb3
 +</code>
 +
  
 //(Утилита isohybrid из пакета syslinux сама запишет туда MBR-загрузчик на этапе сборки ISO).// //(Утилита isohybrid из пакета syslinux сама запишет туда MBR-загрузчик на этапе сборки ISO).//
  
 +1.3.3. Проверка
 +Показывает структуру, тип файловой системы (FSTYPE) и метку (LABEL):
 +<code bash #bash>
 +lsblk -f
 +</code>
  
- +1.3.4 Проверка текущего монтирования 
-1.3.4 Проверка текущего монтированияЧтобы загрузчик установился корректно, +\\  Чтобы загрузчик установился корректно, 
 разделы должны быть смонтированы внутри вашей среды arch-chroot.  разделы должны быть смонтированы внутри вашей среды arch-chroot. 
 Обычная структура выглядит так: Обычная структура выглядит так:
-/mnt — ваш корень BTRFS (sdb3) 
-/mnt/boot — ваш boot-раздел FAT32 (sdb2) 
-Выполните команду для проверки текущего дерева монтирования:  
-lsblk -f 
  
-Что искать в выводе: +<code> 
-Убедитесь, что у /dev/sdb3 в колонке MOUNTPOINTS указан / (или /mnt, если вы ещё снаружи chroot)+NAME   FSTYPE FSVER LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS 
-Убедитесь, что у /dev/sdb2 указан /boot (или /mnt/boot). +sda 
-Раздел sdb1 (bios boot) должен оставаться пустым и не смонтированным.+├─sda1 vfat   FAT32           64D4-DC3F                             977.5M     4% /boot 
 +└─sda2 btrfs                  53b73831-4cdb-4783-8dd1-e2342ec6c2bf   42.1G    13% /var/log 
 +                                                                                  /var/cache/pacman/pkg 
 +                                                                                  /home 
 +                                                                                  / 
 +sdb 
 +├─sdb1 
 +├─sdb2 vfat   FAT32 ARCH_BOOT AAD6-B042 
 +└─sdb3 btrfs        ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26 
 +zram0  swap       zram0     2fad77bf-318e-45ee-8f60-87fee0c1c882                [SWAP]
  
 +</code>
  
 +==Структура разделов на диске sdb==
 +Для универсальной загрузки (и на старых компьютерах с BIOS, и на современных с UEFI) 
 +диск размечается в таблице GPT на три раздела:
  
-1.3.6 Автоматическая генерация fstab+<note blue> 
 +|Раздел|Назначение|Размер|Файловая система|Метка (LABEL)| 
 +|/dev/sdb1|Загрузчик BIOS Boot (нужен для Syslinux/GRUB на старом железе)|1 МБ|Нет (пустой)|Нет| 
 +|/dev/sdb2|Системный раздел EFI (EFI System Partition) для UEFI|1 ГБFAT32|ARCH_BOOT| 
 +|/dev/sdb3|Корневой раздел системы (RootFS)|Всё оставшееся|BTRFS|ARCH_ROOT| 
 +</note>
  
 +===Монтирование корневого раздела диска в домашнюю папку.===
 +
 +<code bash #bash>
 +sudo mount /dev/sdb3 ~/new_iso
 +</code> 
 +
 +Разбор команды:
 +  * sudo: запускает команду с правами администратора (root).
 +  * mount: команда для подключения файловой системы устройства к дереву папок.
 +  * /dev/sdb3: третий раздел на втором жестком диске (sdb).
 +  * ~/new_iso: целевая папка (точка монтирования) внутри вашей домашней директории.
 +Результат: 
 +  * содержимое раздела /dev/sdb3 станет доступно для чтения и записи внутри папки ~/new_iso.
 +
 +=== Проверка монтирования корневого раздела. ===
 +Найти все активные монтирования, связанные с 
 +<code bash #bash>
 +mount | grep ~/new_iso
 +</code> 
 +
 +Разбор команды:
 +  * mount: без параметров выводит список всех вообще примонтированных устройств в системе.
 +  * | (конвейер): передает этот огромный список на вход следующей команде.
 +  * grep : фильтрует строки, оставляя только те, где встречается текст .
 +Результат: 
 +  * вы увидите, примонтировано ли что-то в ~/new_iso или системный , а также узнаете параметры этого подключения (например, rw — чтение/запись, или ro — только чтение).
 +
 +=== Создать папку etc внутри точки монтирования. ===
 +<code bash #bash>
 +sudo mkdir -p ~/new_iso/etc
 +</code> 
 +
 +Разбор команды:
 +  * mkdir: команда создания директорий.
 +  * -p (parents): полезный флаг. Он создаст всю цепочку папок (~/new_iso/, ~/new_iso/ и etc), если какого-то из этих промежуточных каталогов еще не существует. Также этот флаг защищает от ошибок, если папка уже создана.
 +Результат: 
 +  * создается каталог etc. Если перед этим вы успешно выполнили первую команду (mount), то эта папка создастся прямо внутри раздела /dev/sdb3.
 +
 +=== Проверка создания папки /etc ===
 +
 +
 +<code bash #bash>
 +tree ~/new_iso
 +</code> 
 +
 +//(Команда tree ~/new_iso выведет структуру каталогов и файлов внутри этой папки в виде наглядного дерева.)//
 +
 +1.3.6 Автоматическая генерация fstab
 +Команда ls -ld ~/new_iso/etc/ выводит подробную информацию о самой папке etc, а не о файлах внутри неё.
 +<code bash #bash>
 +ls -ld ~/new_iso/etc/
 +</code>
 Важно: Эту команду нужно выполнять снаружи chroot-окружения (внутри установочной флешки),  Важно: Эту команду нужно выполнять снаружи chroot-окружения (внутри установочной флешки), 
-когда все ваши разделы уже смонтированы в папку /mnt.+когда все ваши разделы уже смонтированы в папку . 
 +\\  
 Выполните команду: Выполните команду:
-genfstab -U /mnt >> /mnt/etc/fstab+<code bash #bash> 
 +sudo genfstab -U ~/new_iso | sudo tee -a ~/new_iso/etc/fstab 
 +</code> 
 +//( 
 +  * Флаг -U указывает утилите использовать уникальные UUID разделов вместо имен вроде /dev/sdb3.  
 +Это гарантирует, что система загрузится, даже если вы вставите диск в другой ПК или другой SATA-разъем. 
 +  * Команда sudo tee запускает саму утилиту записи с правами администратора (root). Это позволяет успешно сохранить сгенерированную таблицу разделов в файл fstab 
 +  * Флаг -a (сокращение от append — добавить) переключает утилиту в режим добавления. Новый текст дописывается в самый конец файла, а старые данные не удаляются 
 +)//
  
-//(Флаг -U указывает утилите использовать уникальные UUID разделов вместо имен вроде /dev/sdb3.  +===Проверка результата===
-Это гарантирует, что система загрузится, даже если вы вставите диск в другой ПК или другой SATA-разъем.)//+
  
-Проверка результата +Откройте файл для проверки: 
-Зайдите внутрь установленной системы (если выходили)+<code bash #bash> 
-arch-chroot /mnt+cat ~/new_iso/etc/fstab 
 +</code>
  
-И откройте файл для проверки: 
-cat /etc/fstab 
  
 Если вы ставили систему без подтомов (прямо в корень BTRFS),  Если вы ставили систему без подтомов (прямо в корень BTRFS), 
 ваш файл должен выглядеть примерно так:text ваш файл должен выглядеть примерно так:text
-# /dev/sdb3 (Root-раздел BTRFS) +<code> 
-UUID=1234abcd-5678-efgh-ijkl-90abcdef1234             btrfs       rw,relatime,space_cache=v2,subvolid=5   0 0+[eva@tom1 ~]$ cat ~/new_iso/etc/fstab 
 +# /dev/sdb3 LABEL=ARCH_ROOT 
 +UUID=cb7b1794-2e34-456c-b4c6-b470a4d3df26 / btrfs rw,noatime,space_cache=v2,compress=zstd,ssd 0 0 
 +[eva@tom1 ~]$ 
 +</code>
  
-# /dev/sdb2 (Boot-раздел FAT32) +<note blue> 
-UUID=A1B2-C3D4                              /boot       vfat        rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro   0 2 +⚠️ Оптимизация для BTRFS (Рекомендуется)\\   
- +Стандартные настройки genfstab рабочие, но для BTRFS 
-⚠️ Оптимизация для BTRFS (Рекомендуется)Стандартные настройки genfstab рабочие, но для BTRFS +
 (особенно если у вас SSD-диск) крайне полезно вручную отредактировать опции монтирования  (особенно если у вас SSD-диск) крайне полезно вручную отредактировать опции монтирования 
-для корня (/). +для корня (/).\\   
-Откройте файл через  +Откройте файл через nano /etc/fstab и добавьте в строку с btrfs следующие параметры через запятую: 
-nano /etc/fstab и добавьте в строку с btrfs следующие параметры через запятую: +ssd — включает оптимизацию под твердотельные накопители (если у вас SSD).\\  
-ssd — включает оптимизацию под твердотельные накопители (если у вас SSD).+
 compress=zstd — включает прозрачное сжатие данных (сильно экономит место и продлевает жизнь SSD). compress=zstd — включает прозрачное сжатие данных (сильно экономит место и продлевает жизнь SSD).
 +</note>
 +
 +=== Редактирование файла fstab===
 +<code bash #bash>
 +sudo nano ~/new_iso/etc/fstab
 +</code>
 +
 +
 Пример оптимизированной строки: Пример оптимизированной строки:
 +<code bash fstab>
 +# /dev/sdb3 LABEL=ARCH_ROOT
 +UUID=cb7b1794-2e34-456c-b4c6-b470a4d3df26   /   btrfs   rw,noatime,discard=async,space_cache=v2,compress=zstd,ssd   0 0
 +</code>
 +//(Сохраните файл (Ctrl + O, Enter) и выйдете из nano (Ctrl + X).//
  
-UUID=...   /   btrfs   rw,noatime,compress=zstd,ssd,space_cache=v2   0 0+===Проверитьчто вы всё сделали правильно ===
  
-Этап 2. Сборка RootFS внутри нового образа (~/new_iso/)+<code bash #bash> 
 +cat ~/new_iso/etc/fstab 
 +</code>
  
-Формируем структуру будущего ISO-образа без использования утилиты archiso+Посчитайте количество элементов в строке с UUID (разделенных пробелами). Их должно быть ровно 6: 
-2.1 Монтирование нового диска для заливки системы: +  - UUID=... 
-mkdir -p ~/new_iso+  - / 
 +  - btrfs 
 +  - rw,noatime,discard=async,space_cache=v2,compress=zstd,ssd 
 +  - 0 
 +  - 0 
 + 
 +=== Отключение диска sdb3 от системы === 
 +Команда sudo umount -l /dev/sdb3 выполняет «ленивое» (lazy) размонтирование раздела диска. 
 + 
 +<code bash #bash> 
 +sudo umount -l /dev/sdb3 
 +</code>  
 + 
 +Разбор параметров команды 
 +  * sudo: запускает операцию с правами администратора. 
 +  * umount: стандартная системная команда для отключения файловой системы. 
 +  * -l (lazy): ключевой флаг, который активирует режим «ленивого» (или отложенного) отключения. 
 +  * /dev/sdb3: целевой раздел диска, который нужно отключить. 
 + 
 + 
 +===== Этап 2. Сборка RootFS внутри нового образа (~/new_iso/) ===== 
 +===🗺️ Визуальная схема структуры монтирования.=== 
 +В процессе сборки (Этап 2.1) создается иерархическая структура,  
 +где один раздел накопителя-донора монтируется внутрь другого: 
 +<code> 
 +/ (Корень хоста tom_1)         <─── раздел sda2 
 +├── boot/                      <─── загрузочный раздел хоста (/dev/sda1) 
 +├── [BIOS Boot]                <─── X (НЕ смонтирован / раздел /dev/sdb1) 
 +└── home/ 
 +    └── eva/ 
 +        └── new_iso/           <─── сюда монтируется /dev/sdb3 (ARCH_ROOT) 
 +            └── boot/          <─── сюда монтируется /dev/sdb2 (ARCH_BOOT) 
 +</code> 
 +Выполните команду для проверки текущего дерева монтирования: 
 +<code bash #bash> 
 +lsblk -
 +</code>  
 + 
 +Как выглядит идеальный результат для вашего диска: 
 +<code bash #bash> 
 +NAME   FSTYPE FSVER LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS 
 +sda 
 +├─sda1 vfat   FAT32           64D4-DC3F                             977.5M     4% /boot 
 +└─sda2 btrfs                  53b73831-4cdb-4783-8dd1-e2342ec6c2bf   42.1G    13% /var/log 
 +                                                                                  /var/cache/pacman/pkg 
 +                                                                                  /home 
 +                                                                                  / 
 +sdb 
 +├─sdb1 
 +├─sdb2 vfat   FAT32 ARCH_BOOT AAD6-B042 
 +└─sdb3 btrfs        ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26 
 +zram0  swap       zram0     2fad77bf-318e-45ee-8f60-87fee0c1c882                [SWAP] 
 + 
 +</code> 
 + 
 + 
 +Вот список из 4 ключевых вещей, которые вам нужно проверить в терминале: 
 +  - 1. Колонка **FSTYPE** (Тип файловой системы) 
 +Убедитесь, что система правильно видит форматирование ваших разделов: 
 +    - Для /dev/**sdb2** (загрузочный) там должно быть строго **vfat** (или fat32). 
 +    - Для /dev/**sdb3** (корневой) там должно быть написано **btrfs**. 
 +    - Если там пусто, значит раздел еще не отформатирован. 
 +  - 2. Колонка **LABEL** (Метка диска) 
 +Проверьте, соответствуют ли имена вашему плану: 
 +    - У загрузочного раздела должно стоять **ARCH_BOOT**. 
 +    - У корневого раздела должно стоять **ARCH_ROOT**. 
 +    - Метки помогают визуально не перепутать разделы местами
 +  - 3. Колонка **UUID** (Уникальный идентификатор) 
 +Это длинная строка из букв, цифр и дефисов. Именно её вы записывали в файл fstab. 
 +    - Убедитесь, что **UUID** для /dev/**sdb3** в выводе команды символ в символ совпадает с тем **UUID**, который вы оставили в файле **~/new_iso/etc/fstab**Если они отличаются, система выдаст ошибку при загрузке. 
 +  - 4. Колонка **MOUNTPOINTS** (Точки монтирования) 
 +    - В этой колонке напротив строк **sdb2** и **sdb3** должно быть абсолютно **пусто**. 
 + 
 +==== 2.1 Монтирование новых дисов для загрузки системы ==== 
 + 
 +Монтируются два раздела диска sdb в рабочую папку сборки (~/new_iso): 
 +<note blue> 
 +  * **sdb1** (BIOS Boot) — **не монтируется** (нужен просто как «маяк» для старого BIOS). 
 +  * **sdb2** (FAT32, метка ARCH_BOOT) — монтируется в папку **~/new_iso/boot**. Нужен для размещения файлов EFI-загрузчика (systemd-boot), ядра Linux (vmlinuz-linux) и загрузочного образа initramfs 
 +  * **sdb3** (Btrfs, метка ARCH_ROOT) — монтируется в корень сборки **~/new_iso**. Сюда через утилиту rsync копируется вся основная корневая файловая система (RootFS) с текущего рабочего хоста tom_1. 
 +</note> 
 +//////////////////////////////////////////////////////////////////// 
 +<code bash #bash> 
 +mkdir -p ~/new_iso - создана в Этап1 раздел 1.1 Создание рабочих директорий
 sudo mount /dev/sdb3 ~/new_iso       # Корень BTRFS монтируем в корень сборки sudo mount /dev/sdb3 ~/new_iso       # Корень BTRFS монтируем в корень сборки
 sudo mkdir -p ~/new_iso/boot sudo mkdir -p ~/new_iso/boot
 sudo mount /dev/sdb2 ~/new_iso/boot  # FAT32 монтируем в boot sudo mount /dev/sdb2 ~/new_iso/boot  # FAT32 монтируем в boot
 +</code>
  
 +==1. /dev/sdb1 (BIOS Boot) — НЕ МОНТИРУЕТСЯ==
 +Этот раздел действительно **остается несмонтированным** на протяжении всего процесса.
 +  * В инструкции на Этапе 1.3.4 прямо указано: «Раздел sdb1 (bios boot) должен оставаться пустым и не смонтированным».
 +  * Зачем он нужен: Этот раздел имеет крошечный размер (всего 1 МБ). Он нужен только для разметки GPT, чтобы старые материнские платы (BIOS/Legacy) могли найти загрузочный код утилиты Syslinux. Файловая система на нем не создается, файлы туда не копируются, и монтировать его в папки Linux нельзя.
 +==3. /dev/sdb3 (Корень Btrfs) — МОНТИРУЕТСЯ==
 +Этот раздел монтируется в первую очередь.
 +  * В инструкции на Этапе 2.1 выполняется команда: sudo mount /dev/sdb3 ~/new_iso.
 +  * Зачем: Это самый большой раздел, куда копируется вся операционная система (папки /etc, /usr, /var и т.д.). Папка ~/new_iso становится отображением этого диска.
 +==2. /dev/sdb2 (папка boot) — МОНТИРУЕТСЯ==
 +Этот раздел действительно **остается несмонтированным** на протяжении всего процесса.
 +  * В инструкции на Этапе 1.3.4 прямо указано: «Раздел sdb1 (bios boot) должен оставаться пустым и не смонтированным».
 +  * Зачем он нужен: Этот раздел имеет крошечный размер (всего 1 МБ). Он нужен только для разметки GPT, чтобы старые материнские платы (BIOS/Legacy) могли найти загрузочный код утилиты Syslinux. Файловая система на нем не создается, файлы туда не копируются, и монтировать его в папки Linux нельзя.
  
-2.2 копируем корень tom_1, исключая виртуальные и временные папки. +<code bash #bash> 
-sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*/.cache/*","~/new_iso/*","~/original_iso_image/*"} / ~/new_iso/+lsblk -
 +</code>
  
-=====Этап 3. Настройка системы через Chroot (chroot ~/new_iso/)+<code> 
 +[eva@tom1 ~]$ lsblk -f 
 +NAME   FSTYPE FSVER LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS 
 +sda 
 +├─sda1 vfat   FAT32           64D4-DC3F                             977.5M     4% /boot 
 +└─sda2 btrfs                  53b73831-4cdb-4783-8dd1-e2342ec6c2bf   42.1G    13% /var/log 
 +                                                                                  /var/cache/pacman/pkg 
 +                                                                                  /home 
 +                                                                                  / 
 +sdb 
 +├─sdb1 
 +├─sdb2 vfat   FAT32 ARCH_BOOT AAD6-B042                              1022M     0% /home/eva/new_iso/boot 
 +└─sdb3 btrfs        ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26   25.5G     0% /home/eva/new_iso 
 +zram0  swap       zram0     2fad77bf-318e-45ee-8f60-87fee0c1c882                [SWAP] 
 + 
 +</code> 
 + 
 +Итоговая схема п.2.1 
 +<code> 
 +[eva@tom1 ~]$ tree /home 
 +/home 
 +└── eva 
 +    └── new_iso 
 +        ├── boot 
 +        └── etc 
 +            └── fstab 
 + 
 +5 directories, 1 file 
 +</code> 
 +==== 2.2 копируем корень tom_1, исключая виртуальные и временные папки. ==== 
 +<code bash #bash> 
 +sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*/.cache/*","/home/eva/new_iso/*","/home/eva/original_iso_image/*","/etc/fstab"} / /home/eva/new_iso/ 
 +</code> 
 + 
 +===Проверим выполнение с вложенностью 3 уровня=== 
 +Выведем только интересующие нас папку /boot и файл /etc/fstab 
 +<code bash #bash> 
 +sudo find /home/eva/new_iso -maxdepth 2 \( -path "*/boot" -o -path "*/etc" -o -path "*/etc/fstab" \) | tree --fromfile 
 +</code> 
 + 
 +<code> 
 +└── home 
 +    └── eva 
 +        └── new_iso 
 +            ├── boot 
 +            └── etc 
 +                └── fstab 
 + 
 +5 directories, 2 files 
 +</code> 
 +=== Проверка файла /etc/fstab === 
 +Проверим, что файл /home/eva/new_iso/etc/fstab существует, не затерт и содержит правильные данные —  
 +выведем его содержимое на экран с помощью команды cat. 
 + 
 +<code bash #bash> 
 +cat /home/eva/new_iso/etc/fstab 
 +</code> 
 + 
 +<code> 
 +# /dev/sdb3 LABEL=ARCH_ROOT 
 +UUID=85f23d27-9469-4c60-89d5-79242d2e1e17       /               btrfs           rw,noatime,discard=async,space_cache=v2,compress=zstd,ssd        0 0 
 +</code> 
 + 
 + 
 +===== Этап 3. Настройка системы через Chroot (chroot ~/new_iso/=====
 Переходим внутрь создаваемой системы для изоляции настроек. Переходим внутрь создаваемой системы для изоляции настроек.
  
-3.1 Вход в окружение:+==== 3.1 Вход в окружение ==== 
 +<code bash #bash>
 sudo arch-chroot ~/new_iso/ sudo arch-chroot ~/new_iso/
 +</code>
 +<code>
 +[eva@tom1 ~]$ sudo arch-chroot ~/new_iso/
 +[root@tom1 /]#
 +</code>
  
-3.2 Время и Офлайн-режим + 
-3.2.1 Настройка времени (Универсальное UTC + запрет синхронизации):+==== 3.2 Время и Офлайн-режим ==== 
 +Во время установки Arch Linux с помощью скрипта archinstall или официального образа служба  
 +синхронизации времени включается автоматически. По умолчанию за это отвечает служба systemd-timesyncd 
 + 
 + 
 +===3.2.1 Настройка времени (Универсальное UTC + запрет синхронизации):=== 
 +Эти команды используются для настройки системного времени и управления синхронизацией часов в Linux. 
 +\\   
 +Обычно такой набор команд применяется в изолированных окружениях, контейнерах или при сборке  
 +кастомных ISO-образов, где нужно жестко зафиксировать всемирное время (UTC) и отключить  
 +фоновые сетевые службы времени. 
 +== 1. Устанавливаем часовой пояс UTC / Europe/Moscow внутри chroot == 
 +<code bash #bash>
 ln -sf /usr/share/zoneinfo/UTC /etc/localtime ln -sf /usr/share/zoneinfo/UTC /etc/localtime
 +</code>
 +или<code bash #bash>
 +ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
 +</code>
 +
 +Установка системного часового пояса в UTC / Europe/Moscow.
 +  * ln: утилита для создания ссылок между файлами.
 +  * -s (symbolic): создает символическую ссылку (ярлык), а не жесткую копию.
 +  * -f (force): принудительно перезаписывает старую ссылку /etc/localtime, если она уже существовала.
 +Как это работает: 
 +  * файл /etc/localtime указывает операционной системе, какое локальное время отображать. 
 +Эта команда привязывает вашу систему к эталонному всемирному времени UTC (Zero timezone). 
 +Все логи и системные часы теперь будут работать без смещения на зимнее/летнее время или региональные пояса.
 +
 +== Проверка часового пояса (UTC / Europe/Moscow) ==
 +Выполните команду ls -l для файла /etc/localtime. Она должна показать, что этот файл 
 +является символической ссылкой, указывающей именно на файл UTC / Europe/Moscow:
 +<code bash #bash>
 +ls -l /etc/localtime
 +</code>
 +Идеальный вывод:
 +<code>
 +# UTC
 +lrwxrwxrwx 1 root root 23 May 31 19:08 /etc/localtime -> /usr/share/zoneinfo/UTC
 +# Europe/Moscow
 +lrwxrwxrwx 1 root root 33 May 31 22:35 /etc/localtime -> /usr/share/zoneinfo/Europe/Moscow
 +</code>
 +Также можно запустить команду date -u — она покажет текущее системное время в формате UTC / Europe/Moscow.
 +
 +== 2. Переносим системное время в аппаратное ==
 +
 +<code bash #bash>
 hwclock --systohc hwclock --systohc
-systemctl disable systemd-timesyncd +</code> 
-systemctl mask systemd-timesyncd+ 
 +Запись текущего системного времени в аппаратные часы материнской платы. 
 +  * hwclock: утилита для работы с аппаратными часами (RTC — Real Time Clock),  
 +которые питаются от батарейки на материнской плате вашего компьютера. 
 +  * --systohc (System to Hardware Clock): берет точное время из операционной памяти  
 +(которое настроено в Linux) и принудительно записывает его в чип BIOS/UEFI. 
 +Зачем это нужно:  
 +  * чтобы при следующей перезагрузке компьютера материнская плата сразу передала ядру  
 +Linux правильное время, даже если не будет интернета. 
 + 
 +== Проверка переноса времени в аппаратное == 
 +Чтобы убедиться, что время успешно записалось в аппаратную часть, просто вызовите утилиту чтения часов без флагов: 
 +<code bash #bash> 
 +hwclock --show 
 +</code> 
 +Идеальный вывод: 
 +<code> 
 +2026-05-31 19:49:22.992460+00:00 
 +</code> 
 +Идеальный вывод: Команда должна вывести актуальную дату и точное время  
 +(обычно с припиской .000000+00:00), не выдавая ошибок доступа к устройству /dev/rtc. 
 + 
 +== 3. Ручной "mask" службы — связываем её с /dev/null == 
 +<code bash #bash> 
 +ln -sf /dev/null /etc/systemd/system/systemd-timesyncd.service 
 +</code> 
 + 
 +Полная блокировка («замораживание») службы синхронизации времени. 
 +  * mask: это самая сильная форма отключения сервиса в Systemd. Она связывает файл службы с пустой директорией /dev/null. 
 +Результат:  
 +  * службу systemd-timesyncd теперь невозможно запустить вообще никак — ни автоматически,  
 +ни вручную, ни в качестве зависимости для других программ. Любая попытка включить  
 +её вызовет ошибку. Это гарантирует, что интернет-соединение во время работы системы  
 +случайно не изменит зафиксированное вами время. 
 + 
 +==Как это сработает на конечной машине?== 
 +Когда ваш кастомный образ загрузится на компьютере без интернета,  
 +systemd попытается прочитать конфигурацию службы systemd-timesyncd.service,  
 +наткнется на пустышку /dev/null и просто проигнорирует её запуск,  
 +вообще не тратя системные ресурсы. 
 + 
 +== Проверка ручной блокировки службы (mask) == 
 +Проверьте, куда указывает созданный ярлык службы. Для этого выведите информацию о файле сервиса: 
 +<code bash #bash> 
 +ls -l /etc/systemd/system/systemd-timesyncd.service 
 +</code> 
 +Идеальный вывод: 
 +<code> 
 +lrwxrwxrwx 1 root root 9 May 31 19:44 /etc/systemd/system/systemd-timesyncd.service -> /dev/null 
 +</code> 
 +Идеальный вывод: systemd-timesyncd.service -> /dev/null 
 + 
 + 
 +==== 3.3 Настройка статического офлайн-репозитория ==== 
 + 
 +Для настройки статического офлайн-репозитория на Arch Linux скачайте  
 +нужные .pkg.tar.zst пакеты и их зависимости, поместите их в отдельную  
 +папку (например, /var/local/repo), создайте базу данных утилитой repo-add,  
 +а затем добавьте полученный путь в конфигурационный файл /etc/pacman.conf  
 +перед официальными репозиториями.
  
-3.3 Настройка статического офлайн-репозитория: 
 3.3.1 Создаем локальный репозиторий внутри образа из кэша tom_1, 3.3.1 Создаем локальный репозиторий внутри образа из кэша tom_1,
 База пакетов уже скопирована вместе с /var/cache/pacman/pkg/ База пакетов уже скопирована вместе с /var/cache/pacman/pkg/
-Создаем локальную БД:+ 
 +\\  Перейдем в папку /var/cache/pacman/pkg/ 
 +<code bash #bash>
 cd /var/cache/pacman/pkg/ cd /var/cache/pacman/pkg/
 +</code>
 +
 +вывод
 +<code>
 +[root@tom1 /]# cd /var/cache/pacman/pkg/
 +[root@tom1 pkg]#
 +</code>
 +
 +Создаем локальную БД:
 +<code bash #bash>
 repo-add custom.db.tar.gz *.pkg.tar.zst repo-add custom.db.tar.gz *.pkg.tar.zst
 +</code>
 +
 +вывод
 +<code>
 +[root@tom1 pkg]# repo-add custom.db.tar.gz *.pkg.tar.zst
 +
 +  -> Computing checksums...
 +  -> Creating 'desc' db entry...
 +  -> Creating 'files' db entry...
 +==> Creating updated database file 'custom.db.tar.gz'
 +[root@tom1 pkg]#
 +
 +</code>
  
 3.3.2 Настройка секции [custom] в pacman.conf для полной изоляции 3.3.2 Настройка секции [custom] в pacman.conf для полной изоляции
Строка 205: Строка 602:
 в локальный кэш: в локальный кэш:
 3.3.3.1 Откройте конфигурационный файл: 3.3.3.1 Откройте конфигурационный файл:
 +<code bash #bash>
 sudo nano /etc/pacman.conf sudo nano /etc/pacman.conf
 +</code>
  
 3.3.4 Настройка файла: 3.3.4 Настройка файла:
Строка 216: Строка 614:
 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom]. 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom].
 Итоговый блок репозиториев в /etc/pacman.conf должен выглядеть строго так: Итоговый блок репозиториев в /etc/pacman.conf должен выглядеть строго так:
-#ini+<code bash pacman.conf>
 # Полностью отключаем внешние репозитории # Полностью отключаем внешние репозитории
 #[core] #[core]
Строка 228: Строка 626:
 SigLevel = Optional TrustAll SigLevel = Optional TrustAll
 Server = file:///var/cache/pacman/pkg Server = file:///var/cache/pacman/pkg
 +</code>
  
 +После правки
 +<code>
 +#[core]
 +#Include = /etc/pacman.d/mirrorlist
 +
 +#[extra-testing]
 +#Include = /etc/pacman.d/mirrorlist
 + 
 +#[extra]
 +#Include = /etc/pacman.d/mirrorlist
 +
 +# Добавляем изолированный локальный репозиторий
 +[custom]
 +SigLevel = Optional TrustAll
 +Server = file:///var/cache/pacman/pkg
 +</code>
 +//(Нажмите сочетание клавиш Ctrl + O, 
 +затем Enter для подтверждения записи файла, 
 +и наконец Ctrl + X для выхода)//
  
-3.3.5 Проверка внутри Chroot:+==== 3.3.5 Проверка внутри Chroot ====
 После сохранения файла обязательно обнови локальную базу данных,  После сохранения файла обязательно обнови локальную базу данных, 
 чтобы проверить работу: чтобы проверить работу:
 +<code bash #bash>
 pacman -Sy pacman -Sy
 +</code>
 +
 +вывод
 +<code>
 +[root@tom1 pkg]# pacman -Sy
 +:: Synchronizing package databases...
 + custom                                 148.1 KiB   145 MiB/s 00:00 [######################################] 100%
 +[root@tom1 pkg]#
 +</code>
  
 //(Результат: Система должна моментально считать базу данных  //(Результат: Система должна моментально считать базу данных 
 custom.db напрямую из папки без единого сетевого запроса.)// custom.db напрямую из папки без единого сетевого запроса.)//
  
-3.4 Настройка сети (Статический IP флешки в ОЗУ): +==== 3.4 Настройка сети (Статический IP флешки в ОЗУ) ==== 
-Прописываем параметры для работы в ОЗУ (IP: 192.168.1.150).  +===Прописываем параметры для работы в ОЗУ (IP: 192.168.1.150).===  
-Создаем профиль systemd-networkd: +Т.к. файл профиля systemd-networkd скопирован с основной системы 
-rm -f /etc/systemd/network/*+tom_1 и имеет IP:192.168.1.72, то откроем его для редактирования
 +<code bash #bash>
 nano /etc/systemd/network/20-wired.network nano /etc/systemd/network/20-wired.network
 +</code>
  
-Содержимое:+ 
 +Изменим одержимое: 
 +<code bash 20-wired.network>
 [Match] [Match]
 Name=en* Name=en*
Строка 253: Строка 685:
 Gateway=192.168.1.1 Gateway=192.168.1.1
 DNS=1.1.1.1 DNS=1.1.1.1
 +</code>
 +
 +!!!!!!!!!!!!!!!!!!!!!Я ТУТ!!!!!!!!!!!!!!!!!!!!!!!!!\\  
 +!!!!!!!!!!!!!!!!!!!!!Я ТУТ!!!!!!!!!!!!!!!!!!!!!!!!!
 +==== 3.5 Включение сервисов (Nginx порт 7000 + SSH) ====
 +
 +===Настройка SSH===
 +Убедитесь, что служба OpenSSH включена, чтобы иметь возможность удаленного подключения:
 +<code bash #bash>
 +systemctl enable sshd
 +</code>
 +
 +
 +По умолчанию Nginx слушает 80-й порт. Чтобы изменить его на 7000:
 +Откройте конфигурационный файл в текстовом редакторе (например, nano):
  
-3.5 Включение сервисов (Nginx порт 7000 + SSH): 
 3.5.1 Правим порт Nginx:  3.5.1 Правим порт Nginx: 
-nano /etc/nginx/nginx.conf +<code bash #bash> 
 +nano /etc/nginx/nginx.conf 
 +</code> 
 + 
 +Найдите блок server { ... } и проверьте/ измените директиву listen:
  
 +<code bash nginx.conf>
 listen       7000; listen       7000;
 server_name  localhost; server_name  localhost;
 +</code>
 +
 +//Сохраните изменения (в nano: нажмите Ctrl + O, затем Enter, для выхода — Ctrl + X).//
 +\\  
 +Включите службу Nginx
 +
 +<code bash #bash>
 +systemctl enable nginx
 +</code>
 +
 +==1. systemd-networkd==
 +Это системный демон для управления сетевыми интерфейсами и подключениями
 +
 +
 +==2. systemd-resolved==
 +Это локальный кэширующий DNS-клиент (распознаватель)
 +
 +
 +==Как они работают вместе:==
 +systemd-networkd поднимает соединение и получает от 
 +провайдера IP-адрес и адреса DNS-серверов. Затем он передает эти DNS-адреса 
 +службе systemd-resolved, которая берет на себя всю обработку запросов от 
 +ваших приложений (например, браузера).
 +
 +
  
 3.5.2 Активируем автозапуск: 3.5.2 Активируем автозапуск:
-systemctl enable systemd-networkd systemd-resolved sshd nginx+<code bash #bash> 
 +systemctl enable systemd-networkd systemd-resolved 
 +</code>
  
-3.6 Настройка Swap в ОЗУ (zram-generator):+Вывод: 
 +<code> 
 +[root@tom1 ~]# systemctl enable systemd-networkd systemd-resolved sshd nginx 
 +Created symlink '/etc/systemd/system/dbus-org.freedesktop.resolve1.service' → '/usr/lib/systemd/system/systemd-resolved.service'
 +Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-resolved.service' → '/usr/lib/systemd/system/systemd-resolved.service'
 +Created symlink '/etc/systemd/system/sockets.target.wants/systemd-resolved-varlink.socket' → '/usr/lib/systemd/system/systemd-resolved-varlink.socket'
 +Created symlink '/etc/systemd/system/sockets.target.wants/systemd-resolved-monitor.socket' → '/usr/lib/systemd/system/systemd-resolved-monitor.socket'
 +[root@tom1 ~]#  
 +</code> 
 + 
 + 
 +===Проверка автозапуска служб=== 
 +В среде chroot команда systemctl status  
 +может работать некорректно из-за отсутствия запущенного менеджера  
 +инициализации (systemd). Чтобы гарантировать, что службы добавлены  
 +в автозагрузку, выполните: 
 + 
 +<code bash #bash> 
 +systemctl is-enabled sshd 
 +systemctl is-enabled nginx 
 +systemctl is-enabled systemd-networkd 
 +systemctl is-enabled systemd-resolved 
 +</code> 
 + 
 +Если службы добавлены в автозагрузку, все команды вернут ответ enabled. 
 +\\   
 + 
 +Вывод: 
 +<code> 
 +[root@tom1 ~]# systemctl is-enabled sshd 
 +enabled 
 +[root@tom1 ~]# systemctl is-enabled nginx 
 +enabled 
 +[root@tom1 ~]# systemctl is-enabled systemd-networkd 
 +enabled 
 +[root@tom1 ~]# systemctl is-enabled systemd-resolved 
 +enabled 
 +[root@tom1 ~]# 
 +</code> 
 + 
 + 
 +==== 3.6 Настройка Swap в ОЗУ (zram-generator) ==== 
 +<code bash #bash>
 nano /etc/systemd/zram-generator.conf nano /etc/systemd/zram-generator.conf
 +</code>
 +
  
 Содержимое: Содержимое:
-ini+<code bash zram-generator.conf>
 [zram0] [zram0]
 zram-size = ram / 2 zram-size = ram / 2
 compression-algorithm = zstd compression-algorithm = zstd
 +</code>
  
 +
 +
 +==== 3.7 Перезапись fstab под новые метки (LABEL) ====
 +<code bash #bash>
 +# Так как rsync скопировал реальный fstab с UUID хоста tom_1,
 +# мы полностью очищаем его внутри chroot, чтобы Live-система на tom_2 работала в ОЗУ без привязки к дискам.
 +true > /etc/fstab
 +</code>
 +
 +
 +( Если система при загрузке в ОЗУ затребует UUID дисков, то пробуем этот пункт
 3.7 Перезапись fstab под новые метки (LABEL): 3.7 Перезапись fstab под новые метки (LABEL):
 +<code bash #bash>
 cat <<EOF > /etc/fstab cat <<EOF > /etc/fstab
 LABEL=ARCH_ROOT    /        btrfs    defaults,noatime,compress=zstd    0 0 LABEL=ARCH_ROOT    /        btrfs    defaults,noatime,compress=zstd    0 0
-LABEL=ARCH_BOOT    /boot    vfat     defaults,noatime                  0 2+LABEL=ARCH_BOOT    /boot  vfat  defaults,fmask=0077,dmask=0077   2
 EOF EOF
 +</code>
 +)
  
-3.8 Установка и обновление EFI-загрузчика:+nano /etc/fstab 
 + 
 + 
 + 
 + 
 + 
 + 
 +==== 3.8 Установка и обновление EFI-загрузчика ==== 
 + 
 +Перемонтируйте раздел повторно 
 +Теперь примените новые параметры монтирования  
 +из обновленного fstab: 
 + 
 +mount -o remount /boot 
 + 
 +Смонтируйте вручную с правильными правами 
 + 
 +mount -t vfat -o fmask=0077,dmask=0077 /dev/disk/by-label/ARCH_BOOT /boot 
 + 
 + 
 +<code bash #bash>
 bootctl install bootctl install
 +</code>
 +
  
 Выход из chroot: Выход из chroot:
 +<code bash #bash>
 exit exit
 +</code>
  
  
  
-Этап 4. Конфигурация загрузчика systemd-boot  и Syslinux+ 
 +===== Этап 4. Конфигурация загрузчика systemd-boot  и Syslinux =====
 Установка загрузчика (Выполняется на хосте tom_1. На этом этапе разделы  Установка загрузчика (Выполняется на хосте tom_1. На этом этапе разделы 
 диска sdb все еще примонтированы в ~/new_iso/!): диска sdb все еще примонтированы в ~/new_iso/!):
  
-4.1 Настройка параметров загрузки (loader.conf):+==== 4.1 Настройка параметров загрузки (loader.conf) ==== 
 +<code bash #bash>
 sudo nano ~/new_iso/boot/loader/loader.conf sudo nano ~/new_iso/boot/loader/loader.conf
 +</code>
 +
  
 Содержимое (выбор 3 секунды): Содержимое (выбор 3 секунды):
 +<code bash loader.conf>
 inidefault arch inidefault arch
 timeout 3 timeout 3
 console-mode max console-mode max
 editor no editor no
 +</code>
  
-4.2 Настройка записи загрузки параметры ядра (arch.conf):+ 
 +==== 4.2 Настройка записи загрузки параметры ядра (arch.conf) ====
 Привязка к глобальной метке ARCH_ROOT, COM-порт и отключение прерываний Hyper-V: Привязка к глобальной метке ARCH_ROOT, COM-порт и отключение прерываний Hyper-V:
 +<code bash #bash>
 sudo nano ~/new_iso/boot/loader/entries/arch.conf sudo nano ~/new_iso/boot/loader/entries/arch.conf
 +</code>
 +
  
 Содержимое: Содержимое:
-ini +<code bash ini
-title Arch Linux Custom Headless+# Для ~/new_iso/boot/loader/entries/arch.conf и isolinux.cfg 
 +title Arch Linux Custom Live (SquashFS Manual)
 linux /vmlinuz-linux linux /vmlinuz-linux
 initrd /initramfs-linux.img initrd /initramfs-linux.img
-options root=LABEL=ARCH_ROOT rw console=ttyS0,115200n8 earlyprintk=ttyS0,115200 hv_utils.disable_gpadl_match=1+options archisolabel==ARCH_202605 archisobasedir=/arch/x86_64/airootfs.sfs rw console=ttyS0,115200n8 earlyprintk=ttyS0,115200 hv_utils.disable_gpadl_match=1 
 +</code>
  
- +==== 4.3 Подготовка Syslinux (BIOS) для физического железа ==== 
-4.3 Подготовка Syslinux (BIOS) для физического железа:+<code bash #bash>
 sudo pacman -S syslinux --noconfirm sudo pacman -S syslinux --noconfirm
 sudo mkdir -p ~/new_iso/boot/syslinux sudo mkdir -p ~/new_iso/boot/syslinux
 sudo cp /usr/lib/syslinux/bios/{isolinux.bin,ldlinux.c32,libcom.c32,libutil.c32,vesamenu.c32} ~/new_iso/boot/syslinux/ sudo cp /usr/lib/syslinux/bios/{isolinux.bin,ldlinux.c32,libcom.c32,libutil.c32,vesamenu.c32} ~/new_iso/boot/syslinux/
 +</code>
  
 +<code bash #bash>
 sudo nano ~/new_iso/boot/syslinux/isolinux.cfg sudo nano ~/new_iso/boot/syslinux/isolinux.cfg
 +</code>
  
  
-Содержимое:ini+Содержимое: 
 +<code bash ini>
 UI vesamenu.c32 UI vesamenu.c32
 PROMPT 0 PROMPT 0
Строка 327: Строка 904:
  
 LABEL arch LABEL arch
-    LINUX /boot/vmlinuz-linux +LINUX /vmlinuz-linux 
-    INITRD /boot/initramfs-linux.img +INITRD /initramfs-linux.img 
-    APPEND root=LABEL=ARCH_ROOT rw console=ttyS0,115200n8 earlyprintk=ttyS0,115200 hv_utils.disable_gpadl_match=1+APPEND archisolabel==ARCH_202605 archisobasedir=/arch/x86_64/airootfs.sfs rw console=ttyS0,115200n8 earlyprintk=ttyS0,115200 hv_utils.disable_gpadl_match=1
  
-─── ВЫБЕРИТЕ ОДИН ИЗ ВАРИАНТОВ СБОРКИ ─── +</code>
-【 ВАРИАНТ А 】 Сборка "на лету" прямо из ~/new_iso/ (Быстрый метод) +
-Метод собирает ISO прямо из рабочей директории, где смонтирован диск sdb. Идеально для быстрых тестов.+
  
-Этап 5А Генерация UEFI-образа и сборка ISO через xorriso +==== 4.4. Настройка родного initramfs для поддержки SquashFS и OverlayFS ==== 
-Финальный аккорд.  +Чтобы система загрузилась в режиме «только чтение» из SquashFS, но позволяла изменять файлы в ОЗУ (принцип LiveCD),  
-Создаем efi.img прямо внутри структурычтобы xorriso  +стандартный initramfs должен  
-собрал правильный образ. +уметь работать с модулями loop и overlay. 
-5А.Создание внутреннего efi.img внутри структуры + 
-# 1. Создаем образ efi.img во временной папке хоста /tmp (а не в ~/new_iso/boot!) +Выполните следующие действия на хосте tom_1: 
-sudo dd if=/dev/zero of=/tmp/efi.img bs=1M count=64 status=none +Зайдите в окружение Chroot: 
-sudo mkfs.vfat -F 16 -n "ARCH_202605" /tmp/efi.img > /dev/null+<code bash #bash> 
 +sudo arch-chroot ~/new_iso/ 
 +</code> 
 + 
 + 
 +Включите поддержку модулей в конфигурации сборщика: 
 +<code bash #bash> 
 +nano /etc/mkinitcpio.conf 
 +</code> 
 + 
 + 
 +Найдите строку MODULES=(...) и добавьте туда модули для работы с петлевыми устройствами и  
 +сжатыми файловыми системами: 
 +<code bash #bash> 
 +MODULES=(loop overlay squashfs vfat btrfs) 
 +</code> 
 + 
 + 
 +Проверьте хуки: 
 +В строке HOOKS=(...) убедитесь, что присутствуют systemd и block: 
 +<code bash #bash> 
 +HOOKS=(base udev modconf memdisk archiso_loop_mnt archiso archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard) 
 +</code> 
 + 
 + 
 +Пересоберите initramfs: 
 +Генерируем новый образ загрузки, который теперь аппаратно готов смонтировать наш будущий .sfs файл: 
 +<code bash #bash> 
 +mkinitcpio -p linux 
 +</code> 
 + 
 + 
 +Выйдите из chroot: 
 +<code bash #bash> 
 +exit 
 +</code> 
 + 
 +===== Этап 5. Выбор варианта Генерация UEFI-образа, SquashFS и сборка ISO для через xorriso ===== 
 +【 ВАРИАНТ А 】  
 +\\   
 +Сборка "на лету" прямо из ~/new_iso/ (Быстрый метод)\\   
 +Метод собирает ISO прямо из рабочей директории, где смонтирован диск sdb. \\    
 +//(Идеально для быстрых тестов.)// 
 +\\   
 +【 ВАРИАНТ Б 】 
 +\\   
 +Сборка через изолированную структуру  
 +~/iso_source (Классический метод
 + 
 +                [ Этап 3Настройка через Chroot ] 
 +                                  │ 
 +                                  ▼ 
 +                [ Этап 4. Конфигурация loader.conf ] 
 +                                  │ 
 +         ┌────────────────────────┴────────────────────────┐ 
 +         ▼                                                 ▼ 
 +  【 ВАРИАНТ А 】                                    【 ВАРИАНТ Б 】 
 +  Сборка "на лету" из ~/new_iso/                    Сборка через копирование структуры 
 +  (Быстрый метод)                                   (Классический метод) 
 +         │                                                 │ 
 +         ▼                                                 ▼ 
 +   [ Этап 5А ]                                        [ Этап 5Б ] 
 +  Генерация efi.img и                              Создание папки ~/iso_source, 
 +  прямой запуск xorriso                            перенос данных и запуск скрипта 
 +         │                                                 │ 
 +         └────────────────────────┬────────────────────────┘ 
 +                                  │ 
 +                                  ▼ 
 +               [ Этап 6. Экспорт и запуск в Hyper-V ] 
 + 
 + 
 + 
 +===== Этап 5А. Генерация UEFI-образа, SquashFS и сборка ISO для через xorriso ===== 
 +【 ВАРИАНТ А 】  
 +\\   
 +Сборка "на лету" прямо из ~/new_iso/ (Быстрый метод)\\   
 +Метод собирает ISO прямо из рабочей директории, где смонтирован диск sdb. 
 +\\    
 +//(Идеально для быстрых тестов.)// 
 +  
 +==== 5А.1 Создание внутренней структуры Arch ISO и сжатие RootFS ==== 
 +# 1. Создаем целевой каталог внутри сборки 
 +<code bash #bash> 
 +mkdir -p ~/new_iso/arch/x86_64/ 
 +</code> 
 + 
 + 
 +# 2. Упаковываем RootFS во временный файл в /tmp/ хоста 
 +<code bash #bash> 
 +sudo mksquashfs ~/new_iso /tmp/airootfs.sfs -comp zstd -noappend -e arch tmp lost+found 
 +</code> 
 + 
 +# 3. Перемещаем готовый изолированный образ внутрь структуры 
 +<code bash #bash> 
 +sudo mv /tmp/airootfs.sfs ~/new_iso/arch/x86_64/airootfs.sfs 
 +</code> 
 + 
 +==== 5А.Создание внутреннего efi.img внутри структуры ==== 
 +# 1. Создаем образ efi.img во временной папке хоста в ~/new_iso/boot 
 +<code bash #bash> 
 +sudo dd if=/dev/zero of=~/new_iso/boot/efi.img bs=1M count=64 status=none 
 +sudo mkfs.vfat -F 16 -n "ARCH_202605" ~/new_iso/boot/efi.img > /dev/null 
 +</code>
  
 # 2. Монтируем его для наполнения # 2. Монтируем его для наполнения
 +<code bash #bash>
 mkdir -p /tmp/efi_mnt mkdir -p /tmp/efi_mnt
 sudo mount -o loop /tmp/efi.img /tmp/efi_mnt sudo mount -o loop /tmp/efi.img /tmp/efi_mnt
 +</code>
  
 # 3. Копируем файлы загрузчика ИЗ смонтированного диска во временный efi.img # 3. Копируем файлы загрузчика ИЗ смонтированного диска во временный efi.img
 +<code bash #bash>
 sudo mkdir -p /tmp/efi_mnt/EFI/BOOT /tmp/efi_mnt/loader/entries sudo mkdir -p /tmp/efi_mnt/EFI/BOOT /tmp/efi_mnt/loader/entries
 sudo cp ~/new_iso/boot/EFI/BOOT/BOOTX64.EFI /tmp/efi_mnt/EFI/BOOT/ sudo cp ~/new_iso/boot/EFI/BOOT/BOOTX64.EFI /tmp/efi_mnt/EFI/BOOT/
 sudo cp ~/new_iso/boot/loader/loader.conf /tmp/efi_mnt/loader/ sudo cp ~/new_iso/boot/loader/loader.conf /tmp/efi_mnt/loader/
 sudo cp ~/new_iso/boot/loader/entries/arch.conf /tmp/efi_mnt/loader/entries/ sudo cp ~/new_iso/boot/loader/entries/arch.conf /tmp/efi_mnt/loader/entries/
 +</code>
  
 # 4. Размонтируем и удаляем точку монтирования # 4. Размонтируем и удаляем точку монтирования
 +<code bash #bash>
 sudo umount /tmp/efi_mnt sudo umount /tmp/efi_mnt
 rmdir /tmp/efi_mnt rmdir /tmp/efi_mnt
 +</code>
  
 +==== 5А.3  Прямой запуск xorriso сборки гибридного ISO ====
 +# Запускаем сборку из директории ~/new_iso/. Результат положим в корень домашней директории.
  
-5А.2  Прямой запуск xorriso сборки гибридного ISO для Варианта А: +<code bash #bash>
-Запускаем сборку прямо из директории ~/new_iso/. Результат положим рядом с  +
-папками в корень домашней директории.+
 sudo xorriso -as mkisofs \ sudo xorriso -as mkisofs \
--iso-level 3 \ +  -iso-level 3 \ 
--full-iso9660-filenames \ +  -full-iso9660-filenames \ 
--volid "ARCH_202605"+  -volid "ARCH_202605"
--eltorito-boot boot/syslinux/isolinux.bin \ +  -eltorito-boot boot/syslinux/isolinux.bin \ 
--eltorito-catalog boot/syslinux/boot.cat \ +  -eltorito-catalog boot/syslinux/boot.cat \ 
--no-emul-boot -boot-load-size 4 -boot-info-table \ +  -no-emul-boot -boot-load-size 4 -boot-info-table \ 
--isohybrid-mbr /usr/lib/syslinux/bios/isohdpfx.bin \ +  -isohybrid-mbr /usr/lib/syslinux/bios/isohdpfx.bin \ 
--eltorito-alt-boot \ +  -eltorito-alt-boot \ 
--e /tmp/efi.img \ +  -e boot/efi.img \ 
--no-emul-boot -isohybrid-gpt-basdat \ +  -no-emul-boot -isohybrid-gpt-basdat \ 
--output ~/ARCH_202605.iso \ +  -hide EFI \ 
-~/new_iso/ +  -hide loader \ 
 +  -output ~/ARCH_202605.iso \ 
 +  ~/new_iso/ 
 +</code>
  
-5А.Безопасное размонтирование диска донора +==== 5А.Безопасное размонтирование диска донора ==== 
-//(Только теперь, когда ISO-образ успешно создан, освобождаем накопитель:)// +Только теперь, когда ISO-образ успешно создан, освобождаем накопитель: 
-Размонтируем разделы диска sdb, чтобы пересобрать их в структуру ISO.+<code bash #bash> 
 +Размонтируем разделы диска sdb, которые были подключены к хосту tom_1
 sudo umount ~/new_iso/boot sudo umount ~/new_iso/boot
 sudo umount ~/new_iso sudo umount ~/new_iso
 rm -f /tmp/efi.img rm -f /tmp/efi.img
 +</code>
  
 +<note blue>
 Примечание: «Этап сборки завершен. Пропустите Вариант Б и переходите сразу к Этапу 6». Примечание: «Этап сборки завершен. Пропустите Вариант Б и переходите сразу к Этапу 6».
 +</note>
  
  
  
 +===== Этап 5Б. Подготовка структуры и сборка ISO через xorriso =====
 【 ВАРИАНТ Б 】Сборка через изолированную структуру  【 ВАРИАНТ Б 】Сборка через изолированную структуру 
 ~/iso_source (Классический метод) ~/iso_source (Классический метод)
-Примечание:«Выполнять только в том случае, если НЕ выполнялся Вариант А.  
-Директории ~/new_iso на этот момент должны оставаться смонтированными!» 
  
-Этап 5Б. Подготовка структуры и сборка ISO через xorriso+<note blue> 
 +Этот этап применяется, если не использовался Вариант А,  
 +позволяя упаковать систему в SquashFS и создать гибридный  
 +ISO-образ, используя временную директорию ~/iso_source. 
 +</note>
  
 //(Метод копирует все данные в отдельную директорию на хосте,  //(Метод копирует все данные в отдельную директорию на хосте, 
 освобождая диск донор sdb сразу.)// освобождая диск донор sdb сразу.)//
  
-5Б.1 Создание чистой директории со структурой диска и  +==== 5Б.1 Создание структуры и копирование данных ==== 
-копирование данных в директорию сборки.+Создаем рабочую директорию и синхронизируем в нее данные, исключая временный образ EFI:
 # Создаем чистую директорию # Создаем чистую директорию
 +
 +<code bash #bash>
 mkdir -p ~/iso_source mkdir -p ~/iso_source
 +</code>
  
 # Синхронизируем содержимое sdb в папку сборки для xorriso # Синхронизируем содержимое sdb в папку сборки для xorriso
 +
 +<code bash #bash>
 sudo rsync -aAXv --exclude={"/boot/efi.img"} ~/new_iso/ ~/iso_source/ sudo rsync -aAXv --exclude={"/boot/efi.img"} ~/new_iso/ ~/iso_source/
 +</code>
  
-5Б.2 Размонтируем sdb (он больше не нужен, данные у нас в iso_source)+==== 5Б.2 Освобождение диска-донора ====  
 +Размонтируем исходный диск sdbтак как данные уже скопированы в iso_source
 + 
 +<code bash #bash>
 sudo umount ~/new_iso/boot sudo umount ~/new_iso/boot
 sudo umount ~/new_iso sudo umount ~/new_iso
 +</code>
  
 +==== 5Б.3 Упаковка RootFS в SquashFS ====
 +Упаковываем файловую систему в сжатый образ airootfs.sfs с использованием zstd, 
 +исключая служебные каталоги:
  
-.Создаем финальный загрузочный ISOбраз с глобальной меткой ARCH_202605+# 1. Создаем целевой каталог внутри изолированной структуры 
-5Б.3.1 Скрипт автоматизации сборки ISO через xorriso+ 
 +<code bash #bash> 
 +mkdir -p ~/iso_source/arch/x86_64/ 
 +</code> 
 + 
 +# 2. Упаковываем RootFS во временный файл из папки ~/iso_source, исключая arch, tmp и lost+found 
 + 
 +<code bash #bash> 
 +sudo mksquashfs ~/iso_source /tmp/airootfs.sfs -comp zstd -noappend -e arch tmp lost+found 
 +</code> 
 + 
 +# 3. Перемещаем готовый изолированный образ внутрь правильной структуры 
 + 
 +<code bash #bash> 
 +sudo mv /tmp/airootfs.sfs ~/iso_source/arch/x86_64/airootfs.sfs 
 +</code> 
 + 
 + 
 + 
 + 
 + 
 +==== 5Б.Создание скрипта сборки ISO глобальной меткой ARCH_202605. ====
 Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso),  Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso), 
 нам нужен готовый скрипт, который соберет структуру папки ~/iso_source/  нам нужен готовый скрипт, который соберет структуру папки ~/iso_source/ 
Строка 419: Строка 1144:
 Выполняется на хосте tom_1, вне Chroot. Выполняется на хосте tom_1, вне Chroot.
  
-5Б.3.1.Создай файл скрипта:+==== 5Б.4.1. Создай файл скрипта ==== 
 +<code bash #bash>
 nano ~/build_iso.sh nano ~/build_iso.sh
 +</code>
  
-5.2.1.2 Вставь в него следующий код:+==== 5Б.4.2. Вставь в него следующий код ==== 
 +<code bash #bash>
 #!/bin/bash #!/bin/bash
  
Строка 429: Строка 1157:
 OUTPUT_ISO="$HOME/ARCH_202605.iso" OUTPUT_ISO="$HOME/ARCH_202605.iso"
 VOLUME_ID="ARCH_202605" VOLUME_ID="ARCH_202605"
 +TMP_EFI_MNT="/tmp/efi_mnt"
  
 echo "=== Старт автоматической сборки гибридного ISO (BIOS + UEFI) ===" echo "=== Старт автоматической сборки гибридного ISO (BIOS + UEFI) ==="
Строка 438: Строка 1167:
 fi fi
  
-# 2. Генерация EFI-образа для загрузки UEFI +# 2. Безопасный бэкап файлов загрузчика перед операциями, если sdb2 еще примонтирован 
-echo "-> Подготовка EFI boot image..."+# Если sdb2 уже размонтирован, скрипт возьмет файлы из структуры копии 
 +echo "→ Синхронизация файлов загрузчика..." 
 +mkdir -p /tmp/loader_backup/EFI/BOOT 
 +mkdir -p /tmp/loader_backup/loader/entries 
 + 
 +if mountpoint -q ~/new_iso/boot; then 
 +    cp -r ~/new_iso/boot/EFI /tmp/loader_backup/ 
 +    cp -r ~/new_iso/boot/loader /tmp/loader_backup/ 
 +else 
 +    if [ -d "$SOURCE_DIR/boot/EFI" ]; then 
 +        cp -r "$SOURCE_DIR/boot/EFI" /tmp/loader_backup/ 
 +        cp -r "$SOURCE_DIR/boot/loader" /tmp/loader_backup/ 
 +    else 
 +        echo "Критическая ошибка: Файлы UEFI-загрузчика не найдены ни в ~/new_iso/boot, ни в $SOURCE_DIR/boot!" 
 +        exit 1 
 +    fi 
 +fi 
 + 
 +# 3. Генерация EFI-образа для загрузки UEFI 
 +echo "→ Подготовка EFI boot image...
 +rm -f "$SOURCE_DIR/boot/efi.img"
 dd if=/dev/zero of="$SOURCE_DIR/boot/efi.img" bs=1M count=64 status=none dd if=/dev/zero of="$SOURCE_DIR/boot/efi.img" bs=1M count=64 status=none
 mkfs.vfat -F 16 -n "ARCH_202605" "$SOURCE_DIR/boot/efi.img" > /dev/null mkfs.vfat -F 16 -n "ARCH_202605" "$SOURCE_DIR/boot/efi.img" > /dev/null
  
-3. Монтируем efi.img и копируем туда файлы загрузчика systemd-boot+4. Монтируем efi.img и копируем туда файлы загрузчика systemd-boot
 mkdir -p /tmp/efi_mnt mkdir -p /tmp/efi_mnt
-sudo mount -o loop "$SOURCE_DIR/boot/efi.img" /tmp/efi_mnt+sudo mount -o loop "$SOURCE_DIR/boot/efi.img" $TMP_EFI_MNT
  
  
-4. Проверяем успешность монтирования перед тем, как работать с директорией +5. Проверяем успешность монтирования перед тем, как работать с директорией 
-if mountpoint -q /tmp/efi_mnt; then +if mountpoint -q $TMP_EFI_MNT; then 
-    sudo mkdir -p /tmp/efi_mnt/EFI/BOOT +    echo "→ Наполнение efi.img файлами загрузчика..." 
-    sudo cp "$SOURCE_DIR/boot/EFI/BOOT/BOOTX64.EFI" /tmp/efi_mnt/EFI/BOOT/ +    sudo mkdir -p $TMP_EFI_MNT/EFI/BOOT 
-    sudo mkdir -p /tmp/efi_mnt/loader/entries +    sudo mkdir -p $TMP_EFI_MNT/loader/entries
-    sudo cp "$SOURCE_DIR/boot/loader/loader.conf" /tmp/efi_mnt/loader/ +
-    sudo cp "$SOURCE_DIR/boot/loader/entries/arch.conf" /tmp/efi_mnt/loader/entries/+
          
-    sudo umount /tmp/efi_mnt +    # Копируем из гарантированного бэкапа 
-    ИСПРАВЛЕНО: Безопасное удаление точки монтирования (rmdir вместо опасного rm -rf) +    sudo cp /tmp/loader_backup/EFI/BOOT/BOOTX64.EFI $TMP_EFI_MNT/EFI/BOOT/ 
-    rmdir /tmp/efi_mnt+    sudo cp /tmp/loader_backup/loader/loader.conf $TMP_EFI_MNT/loader/ 
 +    sudo cp /tmp/loader_backup/loader/entries/arch.conf $TMP_EFI_MNT/loader/entries/ 
 +     
 +    sudo umount $TMP_EFI_MNT 
 +    rmdir $TMP_EFI_MNT 
 +    rm -rf /tmp/loader_backup
 else else
     echo "Критическая ошибка: Не удалось примонтировать efi.img!"     echo "Критическая ошибка: Не удалось примонтировать efi.img!"
-    rmdir /tmp/efi_mnt+    rmdir $TMP_EFI_MNT
     exit 1     exit 1
 fi fi
  
-5. Сборка полноценного гибридного ISO через xorriso +6. Безопасная проверка готовности каталога boot перед сборкой ISO 
-echo "-> Запуск xorriso (Сборка гибридного образа)..."+# Вместо деструктивного удаления файлов, мы просто проверяем наличие efi.img 
 +echo "→ Проверка загрузочной структуры в boot..." 
 +if [ ! -f "$SOURCE_DIR/boot/efi.img" ]; then 
 +    echo "Критическая ошибка: efi.img отсутствует в $SOURCE_DIR/boot/!" 
 +    exit 1 
 +fi 
 + 
 +# Чтобы xorriso не затягивал дублирующие папки EFI и loader в корень ISO  
 +# (они уже упакованы внутрь efi.img), мы укажем утилите xorriso исключить их  
 +# прямо во время сборки на Шаге 7 с помощью флага -hide. 
 + 
 +# 7. Сборка полноценного гибридного ISO через xorriso 
 +echo "→ Запуск xorriso (Сборка гибридного образа)..."
 xorriso -as mkisofs \ xorriso -as mkisofs \
   -iso-level 3 \   -iso-level 3 \
Строка 478: Строка 1242:
   -e boot/efi.img \   -e boot/efi.img \
   -no-emul-boot -isohybrid-gpt-basdat \   -no-emul-boot -isohybrid-gpt-basdat \
 +  -hide EFI \
 +  -hide loader \
   -output "$OUTPUT_ISO" \   -output "$OUTPUT_ISO" \
   "$SOURCE_DIR/"   "$SOURCE_DIR/"
 +
  
 if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
Строка 489: Строка 1256:
     exit 1     exit 1
 fi fi
 +</code>
  
-5Б.4 Сделай скрипт исполняемым и запусти его:+==== 5Б.5 Запуск сборки ==== 
 +Делаем скрипт исполняемым и запускаем его для создания финального образа: 
 + 
 +<code bash #bash>
 chmod +x ~/build_iso.sh chmod +x ~/build_iso.sh
 ~/build_iso.sh ~/build_iso.sh
 +</code>
  
 //(Примечание: Параметры xorriso могут адаптироваться под структуру папки boot вашего диска sdb).// //(Примечание: Параметры xorriso могут адаптироваться под структуру папки boot вашего диска sdb).//
Строка 501: Строка 1272:
 в твою домашнюю директорию. в твою домашнюю директорию.
  
-Этап 6. Экспорт ISO в Windows и монтирование в CD-привод Hyper-V (tom_2) +===== Этап 6. Экспорт ISO в Windows и монтирование в CD-привод Hyper-V (tom_2) ===== 
-6.1 Передача файла на Windows-хост:+==== 6.1 Передача файла на Windows-хост ====
 Используте WinSCP  на Windows: Используте WinSCP  на Windows:
-#cmd+ 
 +<code bash cmd>
 pscp eva@192.168.1.72:/home/eva/ARCH_202605.iso C:\ISO\ pscp eva@192.168.1.72:/home/eva/ARCH_202605.iso C:\ISO\
 +</code>
  
-6.2 Запись на arch-flash (опционально, для физ. теста):+==== 6.2 Запись на arch-flash (опционально, для физ. теста) ====
 Открываешь Rufus, выбираешь флешку, выбираешь созданный ARCH_202605.iso Открываешь Rufus, выбираешь флешку, выбираешь созданный ARCH_202605.iso
  и пишешь в режиме DD/ISO.  и пишешь в режиме DD/ISO.
  
-6.3 Монтирование нового ISO-образа в CD-привод Hyper-V (для tom_2): +==== 6.3 Монтирование нового ISO-образа в CD-привод Hyper-V (для tom_2) ==== 
-Открой Диспетчер Hyper-V. +  Открой Диспетчер Hyper-V. 
-Выбери изолированную виртуальную машину tom_2. +  Выбери изолированную виртуальную машину tom_2. 
-Нажми Параметры (Settings) -> vIDE-контроллер или SCSI-контроллер (в зависимости от поколения ВМ Gen1/Gen2). +  Нажми Параметры (Settings) -> vIDE-контроллер или SCSI-контроллер (в зависимости от поколения ВМ Gen1/Gen2). 
-Выбери Накопитель DVD (DVD Drive). +  Выбери Накопитель DVD (DVD Drive). 
-Установи переключатель в положение Файл образа (ISO) (Image file). +  Установи переключатель в положение Файл образа (ISO) (Image file). 
-Нажми Обзор (Browse) и укажи путь к скачанному файлу C:\ISO\ARCH_202605.iso. +  Нажми Обзор (Browse) и укажи путь к скачанному файлу C:\ISO\ARCH_202605.iso. 
-Нажми Применить (Apply) и запусти ВМ tom_2.+  Нажми Применить (Apply) и запусти ВМ tom_2.
30.05.2026.1780161966.txt.gz · Последнее изменение: VladPolskiy

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki