Привет, Хабр! При работе с виртуальными машинами нередко возникает необходимость просмотреть или внести изменения в содержимое диска, не запуская саму ВМ. Это может понадобиться для диагностики, восстановления данных или точечной правки конфигурационных файлов. В zVirt такая задача решается несколькими способами: например можно напрямую подключиться к диску виртуальной машины как к блочному устройству и смонтировать его на уровне хост-системы. Это позволяет получить доступ к файловой системе образа без запуска ВМ. Далее рассмотрим основные подходы к тому, как это можно сделать на практике.

Меня зовут Павел Князькин, я системный архитектор в команде zVirt Orion soft. Этот материал мы готовили вместе с моим коллегой Игорем Владимировым, системным инженером из нашей команды. Надеемся, что он окажется полезным для пользователей платформы.

Общие сведения о стенде

На стенде имеется 2 ВМ:

  1. pk-centos9-gp. На ВМ установлена centos9. ВМ содержит 3 диска:

    1. sda – 35GB, предварительно размеченный диск. На диске создано три раздела: sda1 – ext4, sda2 – lvm с xfs, sda3 – ntfs.

    2. sdb – 30 GB, тонкий диск. На диске создано три раздела: sdb1 – ext4, sdb2 – lvm с xfs, sdb3 – ntfs.

    3. sdc – 70 GB. Загрузочный диск с ОС.

  2. pk-win2019-gp. На ВМ установлена windows 2019. ВМ Содержит один тонкий диск.

Для работы с дисками виртуальных машин в zVirt важно понимать, что используется несколько типов идентификаторов, и они относятся к разным уровням представления диска. В системе присутствуют следующие ключевые параметры:

  • ID всего диска (id) — уникальный идентификатор самого диска. Он остается неизменным на протяжении всего жизненного цикла диска, включая создание и удаление контрольных точек (снимков). Это основной стабильный идентификатор объекта хранения.

  • ID слоя (image_id) — идентификатор конкретного слоя диска. Например, это может быть текущий активный слой ActiveVM. В отличие от общего ID диска, значение image_id может изменяться при работе со снимками: при создании и последующем удалении контрольных точек структура слоев пересобирается, и активный слой может получить новый идентификатор.

Таким образом, id диска используется для стабильной идентификации самого диска, а image_id — для работы с конкретным состоянием или слоем этого диска в цепочке снимков. Давайте определим для каждого диска виртуальной машины идентификатор снимка диска (активного слоя диска машины - image_id). Найти этот идентификатор можно в интерфейсе zVirt по следующему пути: Ресурсы → Виртуальные машины → Выбираем нужную ВМ → Снимки → Идентификатор диска снимка

Идентификаторы снимка диска ВМ pk-centos9-gp
Идентификаторы снимка диска ВМ pk-centos9-gp
 Идентификаторы снимка диска ВМ pk-win2019-gp
Идентификаторы снимка диска ВМ pk-win2019-gp

Для удобства дальнейшего взаимодействия со статьей мы подготовили таблицу, в которой указали, какой идентификатор снимка диска соответствует каждому диску.

Таблица 1. ВМ pk-centos9-gp

Имя диска / размер

Имя раздела

Тип диска / тип файловой системы

Идентификатор снимка диска (Активный слой диска машины) - Logical Volume

sda - 35 GB

Предварительно размеченный диск

3b36d17e-6240-4546-b8e0-11a855b0f31c

sda1

ext4

sda2

lvm с xfs

sda3

ntfs

sdb - 30 GB

Тонкий тип диска

e2f54f03-15ff-4f31-8e6b-aabbd6a96561

sdb1

ext4

sdb2

lvm с xfs

sdb3

ntfs

sdc - 70 GB (загрузочный)

Тонкий тип диска

c5046e63-0247-4aec-99b4-9cdef3431bcc

Таблица 2. ВМ pk-win2019-gp

Имя диска / размер

Имя раздела

Тип диска / тип файловой системы

Идентификатор снимка диска (Активный слой диска машины) - Logical Volume

75 GB

NTFS / тонкий тип диска

a22788a4-9341-4fe4-a82f-df67f86f77f6

Информация о домене хранения

На нашем тестовом стенде все эти ВМ (и их диски) расположены в одном домене хранения cluster-storage-400-gp .

Обзор домена хранения cluster-storage-400-gp
Обзор домена хранения cluster-storage-400-gp

Поскольку в данном примере используется домен хранения на базе блочного типа (на базе LVM), все диски виртуальных машин размещаются внутри одной Volume Group (VG). Соответственно, для дальнейшей работы необходимо определить ID. Сделать это можно через графический интерфейс zVirt: Хранилище → Домены хранения → Выбираем нужный домен → Имя домена. Для блочного типа домена хранения его идентификатор напрямую соответствует имени Volume Group (VG).  Таким образом, в случае LVM: ID домена хранения = имя Volume Group (VG).

Идентификатор домена хранения cluster-storage-400-gp
Идентификатор домена хранения cluster-storage-400-gp

Теперь посмотрим, как эта информация выглядит непосредственно на хосте. Перед началом работы с LVM напрямую необходимо отключить использование файла с фиксированным списком устройств. В противном случае LVM может «не видеть» часть томов, связанных с дисками виртуальных машин. Для этого отредактируйте конфигурационный файл LVM: nano /etc/lvm/lvm.conf

И установите следующий параметр (если он отсутствует, то его необходимо добавить в секцию devices ):use_devicesfile = 0

После этого поведение LVM изменится следующим образом:

  • LVM перестанет использовать файл /etc/lvm/devices/system.devices, в котором задан статический список устройств

  • При каждой операции будет выполняться сканирование всех доступных блочных устройств

  • Это может немного снизить производительность операций, но гарантирует, что LVM обнаружит все тома

Это особенно важно при работе с дисками виртуальных машин и их слоями, так как они могут не попадать в заранее зафиксированный список устройств.

Теперь посмотрим информацию о домене хранения непосредственно на хосте.  Для этого выполним команду, которая выводит список всех групп томов (VG - Volume Group) в системе:

[root@zvirt-43-main-host1-pk /]# vgs
  VG                                   #PV #LV #SN Attr   VSize   VFree
  165151ea-24b7-4de3-a558-df31ccd2078c   1  16   0 wz--n- 399,62g 276,12g

Столбцы содержат следующую информацию. Таблица 3. Описание вывода команды vgs

Имя

Значение

Расшифровка

VG

165151ea-24b7-4de3-a558-df31ccd2078c

Имя группы томов (Volume Group)

PV

1

Количество физических томов (Physical Volumes), входящих в эту группу

LV

16

Количество логических томов (Logical Volumes) внутри VG

SN

0

Количество снимков (snapshots)

w - writable (доступна для записи)

z - resizable (можно изменять размер)

n -  Not available for allocation, из этой Volume Group нельзя создавать новые Logical Volumes, пока пока не изменим политику распределения

Атрибуты VG

VSize

399,62g

Общий размер группы томов (сумма всех PV)

VFree

276,12g

Свободное пространство внутри VG

Также информацию можно посмотреть в другом виде. Для этого выполним команду vgdisplay имя_группы_томов

[root@zvirt-43-main-host1-pk /]# vgdisplay 165151ea-24b7-4de3-a558-df31ccd2078c
  --- Volume group ---
  VG Name               165151ea-24b7-4de3-a558-df31ccd2078c
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  324
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                16
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               399,62 GiB
  PE Size               128,00 MiB
  Total PE              3197
  Alloc PE / Size       988 / 123,50 GiB
  Free  PE / Size       2209 / 276,12 GiB
  VG UUID               ve21lF-uA8q-c1YJ-PITu-9reS-s7xd-qNkKqG

Подведем итог и сопоставим сущности zVirt с объектами LVM:

  • Домен храненияVolume Group (VG). Домен хранения в zVirt на уровне хоста представлен как группа томов LVM.

  • Диск ВМ (его слой / снимок)Logical Volume (LV). Каждый слой диска (включая активный слой ActiveVM и слои снимков) соответствует отдельному логическому тому в LVM.

  • ID диска (id) — это идентификатор диска в zVirt

  • ID слоя (image_id) — соответствует конкретному LV и может изменяться при работе со снимками

Важно учитывать, что:

  • у одной виртуальной машины может быть несколько дисков

  • эти диски могут находиться в разных доменах хранения (то есть в разных VG)

Информация о дисках ВМ (lvdisplay)

Теперь посмотрим, как на хосте выглядит информация об идентификаторе снимка диска — то есть об активном слое диска виртуальной машины, который соответствует Logical Volume (LV). Для примера возьмем запущенную виртуальную машину pk-centos9-gp. Если ВМ запущена на том же хосте, где выполняется проверка, активный слой ее диска будет доступен как обычное блочное устройство в системе. Его путь будет иметь следующий вид lvdisplay ID_vg | grep ID_lv :

[root@zvirt-43-main-host1-pk ~]# lvdisplay 165151ea-24b7-4de3-a558-df31ccd2078c | grep 3b36d17e-6240-4546-b8e0-11a855b0f31c -A 15 -B 1
  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
  LV Name                3b36d17e-6240-4546-b8e0-11a855b0f31c
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
  LV UUID                bRgRUw-LRYV-82ve-Yiy3-Wzua-awCq-iUbDLQ
  LV Write Access        read/write
  LV Creation host, time zvirt-43-main-host5-pk.work.test, 2025-10-01 11:24:12 +0300
  LV Status              available
  # open                 1
  LV Size                35,00 GiB
  Current LE             280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     131056
  Block device           253:51

Таблица 4. Описание вывода команды lvdisplay

LV Size

35,00 GiB

Размер тома

Current LE

280

В этом этом логическом томе (LV)  - 280 логических экстентов (LE — Logical Extents).

Segments              

1

Том состоит из одного непрерывного сегмента (не разбит на несколько физических областей)

Allocation

inherit

Политика выделения пространства унаследована от группы томов. Это значит, что этот том использует те же правила распределения данных, что и его группа томов

Read ahead sectors - auto

currently set to 131056

Эта настройка отвечает за то, как операционная система заранее читает данные с диска, чтобы ускорить работу. Система настроена так, чтобы при чтении данных заранее подгружать около 64 МБ информации (131056 секторов — это примерно 64 мегабайта (131056 × 512 байт ≈ 67 МБ)). Такая «предзагрузка» сильно ускоряет процесс, потому что диск не ждёт новых запросов, а уже имеет данные в памяти.

Block device          

253:51

Это внутренний «порядковый номер» этого тома в Linux. Логический том - устройство №51, управляемое драйвером №253. Проще говоря - /dev/dm-51

Если ВМ выключена (не запущена), то информация будет следующей:

[root@zvirt-43-main-host1-pk /]# lvdisplay 165151ea-24b7-4de3-a558-df31ccd2078c | grep 3b36d17e-6240-4546-b8e0-11a855b0f31c -A 15 -B 1
  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
  LV Name                3b36d17e-6240-4546-b8e0-11a855b0f31c
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
  LV UUID                bRgRUw-LRYV-82ve-Yiy3-Wzua-awCq-iUbDLQ
  LV Write Access        read/write
  LV Creation host, time zvirt-43-main-host5-pk.work.test, 2025-10-01 11:24:12 +0300
  LV Status              NOT available
  LV Size                35,00 GiB
  Current LE             280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

Если в выводе LVM для логического тома указано состояние LV Status: NOT available, это означает, что том на текущем хосте не активирован. При этом его метаданные присутствуют в системе, но само блочное устройство в /dev/mapper/<VG>-<LV> не создано, поэтому доступ к содержимому тома на данном узле отсутствует. В случае zVirt это нормальная ситуация для кластерного окружения с общим хранилищем. Даже если виртуальная машина выключена, LVM-тома могут оставаться неактивированными на конкретном хосте до момента, когда они потребуются (например, при запуске ВМ или операции доступа к диску). При этом важно учитывать, что активация логических томов в кластере контролируется системой управления виртуализацией. LVM сам по себе не управляет распределением доступа между узлами — это делает zVirt, чтобы избежать конфликтов и обеспечить корректную работу с общими дисками.

Аналогичная информация будет и по другим LV (сделать ссылку на таблицу 1 и 2 ). Посмотрим информацию о диске sdb на ВМ pk-centos9-gp. Пример команды: lvdisplay ID_vg | grep ID_lv

[root@zvirt-43-main-host1-pk /]# lvdisplay 165151ea-24b7-4de3-a558-df31ccd2078c | grep e2f54f03-15ff-4f31-8e6b-aabbd6a96561 -A 15 -B 1
  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/e2f54f03-15ff-4f31-8e6b-aabbd6a96561
  LV Name                e2f54f03-15ff-4f31-8e6b-aabbd6a96561
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
  LV UUID                fWCgNd-eCTF-vPRw-4c1G-RXdx-gKOw-RzwAc2
  LV Write Access        read/write
  LV Creation host, time zvirt-43-main-host1-pk.work.test, 2025-09-30 15:13:26 +0300
  LV Status              NOT available
  LV Size                12,50 GiB
  Current LE             100
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto

  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
  LV Name                3b36d17e-6240-4546-b8e0-11a855b0f31c
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c

Посмотрим информацию о диске sdc на ВМ pk-centos9-gp:

[root@zvirt-43-main-host1-pk /]# lvdisplay 165151ea-24b7-4de3-a558-df31ccd2078c | grep c5046e63-0247-4aec-99b4-9cdef3431bcc -A 15 -B 1
  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/c5046e63-0247-4aec-99b4-9cdef3431bcc
  LV Name                c5046e63-0247-4aec-99b4-9cdef3431bcc
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
  LV UUID                9BElCS-dD12-gReD-hNpd-Udlc-pdaH-nJbmjp
  LV Write Access        read/write
  LV Creation host, time zvirt-43-main-host1-pk.work.test, 2025-09-30 14:05:06 +0300
  LV Status              NOT available
  LV Size                10,00 GiB
  Current LE             80
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto

  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6
  LV Name                a22788a4-9341-4fe4-a82f-df67f86f77f6
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
[root@zvirt-43-main-host1-pk /]#

Посмотрим информацию о диске на ВМ pk-win2019-gp:

[root@zvirt-43-main-host1-pk /]# lvdisplay 165151ea-24b7-4de3-a558-df31ccd2078c | grep a22788a4-9341-4fe4-a82f-df67f86f77f6 -A 15 -B 1
  --- Logical volume ---
  LV Path                /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6
  LV Name                a22788a4-9341-4fe4-a82f-df67f86f77f6
  VG Name                165151ea-24b7-4de3-a558-df31ccd2078c
  LV UUID                0U9Tod-ViWC-cYTu-NBKR-jNXv-hAXh-Y4K2Cj
  LV Write Access        read/write
  LV Creation host, time zvirt-43-main-host1-pk.work.test, 2025-09-30 14:05:49 +0300
  LV Status              NOT available
  LV Size                15,00 GiB
  Current LE             120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

Информация о дисках ВМ (qemu-img)

Перейдём к сбору и проверке информации о том, какой тип диска используется для виртуальной машины — RAW или QCOW2. Для этого необходимо, чтобы ВМ была запущена на том хосте, где выполняется проверка, так как доступ осуществляется напрямую к активному блочному устройству. Выполним команду для ВМ pk-centos9-gp (пример команды qemu-img info /dev/<VG_ID>/<IMAGE_ID>) В зависимости от типа диска результат команды qemu-img info будет отличаться. Рассмотрим два варианта.

Диск формата RAW (ВМ pk-centos9-gp, диск sda)

[root@zvirt-43-main-host1-pk /]# qemu-img info /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
image: /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
file format: raw
virtual size: 35 GiB (37580963840 bytes)
disk size: 0 B

В данном случае используется виртуальный диск формата RAW с заданным размером 35 ГБ. Параметр disk size равен 0 B, что является нормальным для блочного устройства LVM, так как фактическое потребление пространства не отражается на уровне qemu-img.

Диск формата QCOW2 (ВМ pk-centos9-gp, диск sdb)

[root@zvirt-43-main-host1-pk /]# qemu-img info /dev/165151ea-24b7-4de3-a558-df31ccd2078c/e2f54f03-15ff-4f31-8e6b-aabbd6a96561
image: /dev/165151ea-24b7-4de3-a558-df31ccd2078c/e2f54f03-15ff-4f31-8e6b-aabbd6a96561
file format: qcow2
virtual size: 30 GiB (32212254720 bytes)
disk size: 0 B
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

В этом случае диск использует формат QCOW2, который поддерживает дополнительные возможности, такие как сжатие, снапшоты и управление ссылками. Несмотря на это, в данном примере фактический размер также отображается как 0 B, так как данные хранятся на уровне LVM-блока, а не в файле образа.

Таблица 5. Описание вывода команды qemu-img info

QCOW2

QEMU Copy-On-Write v2 — основной формат виртуальных дисков для QEMU/KVM.

30 GiB

Виртуальный размер диска, тот что видит гостевая ОС.

0 B

Для QCOW2, который находится на блочном устройстве, qemu-img не может определить реальное использование

cluster_size: 65536

Размер кластера (64 КБ). Это минимальная единица хранения в QCOW2 - данные и метаданные записываются блоками по 64 КБ

compat: 1.1

Версия формата QCOW2. 1.1. Поддерживает сжатие и другие улучшения

compression type: zlib

Используется стандартное zlib-сжатие для уменьшения размера данных на диске

lazy refcounts: false

Счётчик ссылок обновляется сразу. Если включить (true), QCOW2 работает быстрее при записи, но может потребовать qemu-img check после сбоя.  false - это безопасный режим, при котором данные и снапшоты не потеряются даже при аварийном отключении, но записи идут чуть медленнее.

refcount bits: 16

На каждый кластер выделяется 16 бит для счётчиков ссылок

corrupt: false

Диск не повреждён

extended l2: false

Для небольшого диска (30 ГБ) расширенные таблицы не нужны. true - добавлялся ещё один уровень таблиц, чтобы адресовать очень большой диск (несколько ТБ)

Диск формата QCOW2 (ВМ pk-centos9-gp, диск sdc)

[root@zvirt-43-main-host1-pk /]# qemu-img info /dev/165151ea-24b7-4de3-a558-df31ccd2078c/c5046e63-0247-4aec-99b4-9cdef3431bcc
image: /dev/165151ea-24b7-4de3-a558-df31ccd2078c/c5046e63-0247-4aec-99b4-9cdef3431bcc
file format: qcow2
virtual size: 70 GiB (75161927680 bytes)
disk size: 0 B
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

Диск формата QCOW2 (ВМ pk-win2019-gp)

[root@zvirt-43-main-host1-pk /]# qemu-img info /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6
image: /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6
file format: qcow2
virtual size: 75 GiB (80530636800 bytes)
disk size: 0 B
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

Чтобы посмотреть реальный размер диска, можно использовать команду lvs с дополнительными параметрами, актуальными для LVM thin pool: lvs -o+seg_monitor,segtype,data_percent | grep ….. <ID слоя диска> . Эта команда позволяет получить информацию о фактическом использовании логического тома на уровне LVM. Она применима в среде zVirt при работе с LVM.

[root@zvirt-43-main-host1-pk ~]# lvs -o+seg_monitor,segtype,data_percent | grep 3b36d17e-6240-4546-b8e0-11a855b0f31c
  3b36d17e-6240-4546-b8e0-11a855b0f31c 165151ea-24b7-4de3-a558-df31ccd2078c -wi-------  35,00g                                                                                         linear


[root@zvirt-43-main-host1-pk ~]# lvs -o+seg_monitor,segtype,data_percent | grep e2f54f03-15ff-4f31-8e6b-aabbd6a96561
  e2f54f03-15ff-4f31-8e6b-aabbd6a96561 165151ea-24b7-4de3-a558-df31ccd2078c -wi-------  12,50g                                                                                         linear


[root@zvirt-43-main-host1-pk ~]# lvs -o+seg_monitor,segtype,data_percent | grep c5046e63-0247-4aec-99b4-9cdef3431bcc
  c5046e63-0247-4aec-99b4-9cdef3431bcc 165151ea-24b7-4de3-a558-df31ccd2078c -wi-------  10,00g                                                                                         linear


[root@zvirt-43-main-host1-pk ~]# lvs -o+seg_monitor,segtype,data_percent | grep a22788a4-9341-4fe4-a82f-df67f86f77f6
  a22788a4-9341-4fe4-a82f-df67f86f77f6 165151ea-24b7-4de3-a558-df31ccd2078c -wi-ao----  15,00g                                                                                         linear

Практика. Работа с Linux и предварительно размеченными дисками

Важно: для монтирования разделов на хост необходимо выключить ВМ

В текущем разделе будем проводить работы с предварительно размеченным диском sda  на 35 GB.

Чтобы посмотреть информацию о диске на выключенной ВМ, предварительно необходимо активировать volume group, сделав все логические тома внутри нее доступными системе. Для этого выполним команду vgchange -ay <ID-домена-хранения> .

[root@zvirt-43-main-host1-pk ~]# vgchange -ay 165151ea-24b7-4de3-a558-df31ccd2078c
  16 logical volume(s) in volume group "165151ea-24b7-4de3-a558-df31ccd2078c" now active

После выполнения команды мы увидим, что все «дочерние» LV будут доступны. Для работы с RAW  дисками будем использовать инструмент losetup  . Первоначально будем работать с разделом sda1 . Данная команда выберет первое свободное loop-устройство /dev/loopX  и после подключения просканирует таблицу разделов и создаст устройства вида /dev/loopXp1 ... /dev/loopXpN   :

[root@zvirt-43-main-host1-pk ~]# losetup -fP /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c

Посмотрим информацию о структуре дисков, типах файловых систем, разметку дисков:

[root@zvirt-43-main-host1-pk ~]# lsblk -f /dev/loop0
NAME      FSTYPE      LABEL UUID                                   MOUNTPOINT
loop0
├─loop0p1 ext4              1b0d334f-7b6e-43e4-b164-8f3e5a42acb2
├─loop0p2 LVM2_member       Ey6Ttp-O8vv-dvI5-244x-yyJL-M5GX-Tt8rMj
└─loop0p3 ntfs              1D3A26241322EE0A


[root@zvirt-43-main-host1-pk ~]# fdisk -l /dev/loop0
Диск /dev/loop0: 35 GiB, 37580963840 байт, 73400320 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 8117552E-FF40-A448-9807-2B78C01BCD75

Устр-во        начало    Конец  Секторы Размер Тип
/dev/loop0p1     2048 10487807 10485760     5G Файловая система Linux
/dev/loop0p2 10487808 25167871 14680064     7G Файловая система Linux
/dev/loop0p3 25167872 44042239 18874368     9G Файловая система Linux

Видим, что есть 3 раздела на диске. Произведем монтирование sda1 (файловая система ext4) в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл:

[root@zvirt-43-main-host1-pk ~]# mount /dev/loop0p1 /test01/centos_sda1

[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sda1/
итого 20
drwx------. 2 root root 16384 сен 30 15:21 lost+found
-rw-r--r--. 1 root root    10 окт  1 11:03 sda1.txt

[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sda1/sda1-new.txt

Аналогично проведём работы с sda2 . Т.к. там используется структура lvm и файловая система xfs, то для начала выясним имя physical volumes; список всех volume groups, собранных из физических томов; список «виртуальных разделов» внутри LVM:

Информация о физических томах
[root@zvirt-43-main-host1-pk ~]# pvs
  PV                                            VG                                   Fmt  Attr PSize   PFree
  /dev/loop0p2                                  preallocated-vg-7g                   lvm2 a--   <7,00g      0


Информация о группах томов
[root@zvirt-43-main-host1-pk ~]# vgs
  VG                                   #PV #LV #SN Attr   VSize   VFree
  preallocated-vg-7g                     1   1   0 wz--n-  <7,00g      0


Информация о логических томах
[root@zvirt-43-main-host1-pk ~]# lvs
LV                                   VG                                   Attr       LSize   Pool   Origin                      
preallocated_lv-7g                   preallocated-vg-7g                   -wi-------  <7,00g

После активации всего домена хранения (эту операцию мы делали ранее - vgchange -ay <ID-домена-хранения> необходимо активировать нужный нам Volume Group (VG). Выполним активацию:

[root@zvirt-43-main-host1-pk ~]# vgchange -ay preallocated-vg-7g
  1 logical volume(s) in volume group "preallocated-vg-7g" now active

После выполнения команды мы увидим, что все «дочерние» LV будут доступны.

Произведем монтирование /dev/preallocated-vg-7g/preallocated_lv-7g/  в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл:

[root@zvirt-43-main-host1-pk ~]# mount /dev/preallocated-vg-7g/preallocated_lv-7g /test01/centos_sda2
[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sda2
[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sda2/sda2-new.txt

Аналогично проведём работы с sda3  . На нем используется файловая система NTFS. Для работы с NTFS разделами в среде Linux необходимо установить пакет ntfs-3g

[root@zvirt-43-main-host1-pk ~]# dnf install ntfs-3g

Произведем монтирование устройства /dev/loop0p3  в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл: 

[root@zvirt-43-main-host1-pk ~]# mount /dev/loop0p3 /test01/centos_sda3
[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sda3

[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sda3/sda3-new.txt

Подведем итог: мы успешно смогли записать файлы на диски с различными файловыми системами. При этом сами ВМ были выключены.

Практика. Работа с Linux и тонкие диски

Важно: для монтирования разделов на хост необходимо выключить ВМ

В текущем разделе будем проводить работы с тонким диском sdb  на 30 GB. Посмотрим на работу с ОС Linux на ВМ pk-centos9-gp. Работаем с sdb1  разделом. Рассмотрим способ с использованием механизма NBD (Network Block Device). Для дальнейшей работы нам потребуется загрузить модуль ядра (драйвер) командой:

[root@zvirt-43-main-host1-pk ~]# modprobe nbd
# В случае успешной операции - вывод команды не содержит никаких сообщений

Далее qemu-nbd будет использовать драйвер nbd для создания блочных устройств и осуществления ввода/вывода при работе с ними. Создадим новое виртуальное устройство с использованием слоя диска. Подключим диск ВМ как сетевое блочное устройство /dev/nbd2. Для этого выполним команду:

[root@zvirt-43-main-host1-pk ~]# qemu-nbd -c /dev/nbd2 /dev/165151ea-24b7-4de3-a558-df31ccd2078c/e2f54f03-15ff-4f31-8e6b-aabbd6a96561

Посмотрим информацию о структуре дисков, типах файловых систем, разметку дисков:

[root@zvirt-43-main-host1-pk ~]# fdisk -l /dev/nbd2
Диск /dev/nbd2: 30 GiB, 32212254720 байт, 62914560 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 0712C414-6EC7-5F46-9E8D-4AE9598DE0B7

Устр-во       начало    Конец  Секторы Размер Тип
/dev/nbd2p1     2048  8390655  8388608     4G Файловая система Linux
/dev/nbd2p2  8390656 20973567 12582912     6G Файловая система Linux
/dev/nbd2p3 20973568 37750783 16777216     8G Файловая система Linux


[root@zvirt-43-main-host1-pk ~]# lsblk -f /dev/nbd2
NAME                                FSTYPE      LABEL UUID                                   MOUNTPOINT
nbd2
├─nbd2p1                            ext4              74369740-c1b8-495e-b380-7ec5cfe9a14f
├─nbd2p2                            LVM2_member       EYj0DU-gEyQ-dcH0-gAbD-SqK1-fTKJ-41dUNT
│ └─dynamic--vg--6g-dynamic--lv--6g xfs               0087aa4b-3156-4c0e-ba4b-bbe0181b481c
└─nbd2p3                            ntfs              45BDA74B7EEF4276
[root@zvirt-43-main-host1-pk ~]#

Видим, что есть 3 раздела на диске. Произведем монтирование nbd2p1  (файловая система ext4) в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл:

[root@zvirt-43-main-host1-pk ~]# mount /dev/nbd2p1 /test01/centos_sdb1

[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sdb1/
итого 20
drwx------. 2 root root 16384 окт  1 11:15 lost+found
-rw-r--r--. 1 root root     9 окт  1 11:16 sdb1.txt

[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sdb1/sdb1-new.txt

Аналогично проведём работы с sdb2 . Т.к. там используется структура lvm и файловая система xfs, то для начала выясним имя physical volumes; список всех volume groups, собранных из физических томов; список «виртуальных разделов» внутри LVM:

Информация о физических тома
[root@zvirt-43-main-host1-pk ~]# pvs

PV                                            VG                                   Fmt  Attr PSize   PFree
/dev/nbd2p2                                   dynamic-vg-6g                        lvm2 a--   <6,00g      0


Информация о группах томов
[root@zvirt-43-main-host1-pk ~]# vgs

 VG                                   #PV #LV #SN Attr   VSize   VFree
  dynamic-vg-6g                          1   1   0 wz--n-  <6,00g      0


Информация о логических томах
[root@zvirt-43-main-host1-pk ~]# lvs
LV                                   VG                                   Attr       LSize   Pool   Origin
dynamic-lv-6g                        dynamic-vg-6g                        -wi-a-----  <6,00g

После активации всего домена хранения (эту операцию мы делали ране - vgchange -ay <ID-домена-хранения>) необходимо активировать нужный нам Volume Group (VG). Выполним активацию:

[root@zvirt-43-main-host1-pk ~]# vgchange -ay dynamic-vg-6g
  1 logical volume(s) in volume group "dynamic-vg-6g" now active

Произведём монтирование /dev/dynamic-vg-6g/dynamic-lv-6g  в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл:

[root@zvirt-43-main-host1-pk ~]# mount /dev/dynamic-vg-6g/dynamic-lv-6g /test01/centos_sdb2
[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sdb2
[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sdb2/sdb2-new.txt

Аналогично проведем работы с sdb3  . На нем используется файловая система NTFS. Для работы с NTFS разделами в среде Linux необходимо установить пакет ntfs-3g .

[root@zvirt-43-main-host1-pk ~]# dnf install ntfs-3g

Произведем монтирование устройства /dev/nbd2p3   в заранее созданный каталог. Далее посмотрим структуру файлов и создадим новый файл: 

[root@zvirt-43-main-host1-pk ~]# mount /dev/nbd2p3 /test01/centos_sdb3
[root@zvirt-43-main-host1-pk ~]# ll /test01/centos_sdb3
[root@zvirt-43-main-host1-pk ~]# touch /test01/centos_sdb3/sdb3-new.txt

Подведем итог: мы успешно смогли записать файлы на диски с различными файловыми системами. При этом сами ВМ были выключены.  Раздел sdc является загрузочным и в текущей статье мы не будем его рассматривать.

Практика. Работа с Windows

Важно: для монтирования разделов на хост необходимо выключить ВМ

В текущем разделе будем проводить работы с тонким диском на 75 GB. Посмотрим на работу с ВМ а базе Windows - pk-win2019-gp. Рассмотрим способ с использованием механизма NBD (Network Block Device). Для дальнейшей работы нам потребуется загрузить модуль ядра (драйвер) командой:

[root@zvirt-43-main-host1-pk ~]# modprobe nbd
# В случае успешной операции - вывод команды не содержит никаких сообщений

Далее qemu-nbd будет использовать драйвер nbd для создания блочных устройств и осуществления ввода/вывода при работе с ними. Активируем конкретный логический том (LV), относящийся к диску данной ВМ:

[root@zvirt-43-main-host1-pk ~]# lvchange -ay /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6

Создадим новое виртуальное устройство с использованием слоя диска. Подключим диск ВМ как сетевое блочное устройство /dev/nbd4. Для этого выполним команду:

[root@zvirt-43-main-host1-pk ~]# qemu-nbd -c /dev/nbd4 /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6
# В случае успешной операции - вывод команды не содержит никаких сообщений

Посмотрим информацию о структуре дисков, типах файловых систем, разметку дисков:

[root@zvirt-43-main-host1-pk ~]# fdisk -l /dev/nbd4
Диск /dev/nbd4: 75 GiB, 80530636800 байт, 157286400 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xabfdbb1a

Устр-во     Загрузочный  начало     Конец   Секторы Размер Идентификатор Тип
/dev/nbd4p1 *              2048   1126399   1124352   549M             7 HPFS/NTFS/exFAT
/dev/nbd4p2             1126400 157284351 156157952  74,5G             7 HPFS/NTFS/exFAT



[root@zvirt-43-main-host1-pk ~]# lsblk -f /dev/nbd4
NAME     FSTYPE LABEL                    UUID                                 MOUNTPOINT
nbd4
├─nbd4p1 ntfs   Зарезервировано системой 2AFC250EFC24D63B
└─nbd4p2 ntfs                            48F0284DF0284392

Видим, что есть 2 раздела на диске. Произведем монтирование nbd4p1 и nbd4p2 (файловая система ntfs) в заранее созданные каталоги. Далее посмотрим структуру файлов и создадим новый файл:

[root@zvirt-43-main-host1-pk ~]# mount /dev/nbd4p1 /test01/win_01
[root@zvirt-43-main-host1-pk ~]# cd /test01/win_01
[root@zvirt-43-main-host1-pk win_01]# ll
итого 417
drwxrwxrwx. 1 root root   8192 сен 30 12:23  Boot
-rwxrwxrwx. 1 root root 408840 янв  7  2022  bootmgr
-rwxrwxrwx. 1 root root      1 сен 15  2018  BOOTNXT
-rwxrwxrwx. 1 root root   8192 сен 30 12:23  BOOTSECT.BAK
drwxrwxrwx. 1 root root      0 сен 30 12:24  Recovery
drwxrwxrwx. 1 root root      0 сен 30 12:24 'System Volume Information'

[root@zvirt-43-main-host1-pk ~]# mount /dev/nbd4p2 /test01/win_02
[root@zvirt-43-main-host1-pk ~]# cd /test01/win_02
[root@zvirt-43-main-host1-pk win_02]# ll
итого 2490404
drwxrwxrwx. 1 root root          0 окт  1 10:39 '$Recycle.Bin'
lrwxrwxrwx. 2 root root         20 сен 30 12:25 'Documents and Settings' -> /test01/win_02/Users
-rwxrwxrwx. 1 root root 2550136832 окт  8 17:38  pagefile.sys
drwxrwxrwx. 1 root root          0 янв  7  2022  PerfLogs
drwxrwxrwx. 1 root root       4096 окт  1 10:17  ProgramData
drwxrwxrwx. 1 root root       4096 окт  1 09:47 'Program Files'
drwxrwxrwx. 1 root root       4096 янв  7  2022 'Program Files (x86)'
drwxrwxrwx. 1 root root          0 сен 30 12:25  Recovery
drwxrwxrwx. 1 root root       4096 окт  1 10:54 'System Volume Information'
drwxrwxrwx. 1 root root       4096 окт  1 10:38  Users
drwxrwxrwx. 1 root root      16384 окт  8 14:02  Windows

[root@zvirt-43-main-host1-pk win_02]# touch win_02-new.txt

Подведем итог: мы успешно смогли записать файлы на диски ОС Windows с файловой системой NTFS. При этом сама ВМ была выключена. 

Практика. Возврат в исходное состояние

После выполнения всех действий по добавлению файлов на ВМ вернем все в исходное состояние. Выясним все блочные устройства, у которых есть точка монтирования в /test01/:

[root@zvirt-43-main-host1-pk win_02]# lsblk | grep test01
├─loop0p1                                                        259:3    0    5G  0 loop  /test01/centos_sda1
│ └─preallocated--vg--7g-preallocated_lv--7g                     253:54   0    7G  0 lvm   /test01/centos_sda2
└─loop0p3                                                        259:5    0    9G  0 loop  /test01/centos_sda3
├─nbd2p1                                                         43:65   0    4G  0 part  /test01/centos_sdb1
│ └─dynamic--vg--6g-dynamic--lv--6g                              253:55   0    6G  0 lvm   /test01/centos_sdb2
└─nbd2p3                                                         43:67   0    8G  0 part  /test01/centos_sdb3
├─nbd4p1                                                         43:129  0  549M  0 part  /test01/win_01
└─nbd4p2                                                         43:130  0 74,5G  0 part  /test01/win_02

Отмонтируем все, смонтированное в /test01/*

[root@zvirt-43-main-host1-pk ~]# cd ~
[root@zvirt-43-main-host1-pk ~]# umount /test01/*

Изменим состояние Volume Group (VG), деактивировав все VG принудительно:

[root@zvirt-43-main-host1-pk ~]# vgchange -an --force preallocated-vg-7g
  0 logical volume(s) in volume group "preallocated-vg-7g" now active

[root@zvirt-43-main-host1-pk ~]# vgchange -an --force dynamic-vg-6g
  0 logical volume(s) in volume group "dynamic-vg-6g" now active

Посмотрим список loop devices с помощью команды losetup -a  и удалим все loop devices , которые сейчас настроены (deallocate all).

[root@zvirt-43-main-host1-pk ~]# losetup -a
/dev/loop0
[root@zvirt-43-main-host1-pk ~]# losetup -D
[root@zvirt-43-main-host1-pk ~]# losetup -a

Отключим все NBD устройства:

[root@zvirt-43-main-host1-pk ~]# qemu-nbd -d /dev/nbd2
/dev/nbd2 disconnected
[root@zvirt-43-main-host1-pk ~]# qemu-nbd -d /dev/nbd4
/dev/nbd4 disconnected

Деактивируем LV (Logical Volume):

[root@zvirt-43-main-host1-pk ~]# lvchange -an /dev/165151ea-24b7-4de3-a558-df31ccd2078c/3b36d17e-6240-4546-b8e0-11a855b0f31c
[root@zvirt-43-main-host1-pk ~]# lvchange -an /dev/165151ea-24b7-4de3-a558-df31ccd2078c/e2f54f03-15ff-4f31-8e6b-aabbd6a96561
[root@zvirt-43-main-host1-pk ~]# lvchange -an /dev/165151ea-24b7-4de3-a558-df31ccd2078c/c5046e63-0247-4aec-99b4-9cdef3431bcc
[root@zvirt-43-main-host1-pk ~]# lvchange -an /dev/165151ea-24b7-4de3-a558-df31ccd2078c/a22788a4-9341-4fe4-a82f-df67f86f77f6

Проверим, что подключенных нами устройств нет в списке:

[root@zvirt-43-main-host1-pk ~]# lsblk

Перед началом работы с LVM мы отключали использование файла с фиксированным списком устройств. Вернём эту настройку обратно. Для этого откроем конфигурационный файл LVM:

nano /etc/lvm/lvm.conf

И установим следующий параметр:

use_devicesfile = 1

На этом процесс возврата в исходное состояние завершён корректно. Вы можете запустить ВМ и проверить, что все файлы были успешно созданы.

Комментарии (1)


  1. Granulex
    15.05.2026 14:37

    Отличная инструкция — особенно для тех, кто впервые сталкивается с блочным доменом вместо привычного NFS. А ещё лайфхак в копилку: если у ВМ есть снапшоты, актуальные файлы живут в delta-слое. Один взгляд на снапшот-цепочку — и сразу к нужным данным, без лишних итераций.