Как найти путь к отсоединенному VHDX через точку монтирования в Windows

Если вы работаете с виртуальными дисками в Windows, наверняка сталкивались с ситуацией, когда после отсоединения VHDX-образа точка монтирования остаётся «висеть» в системе. Казалось бы – вот она, папка C:mymountpoint, но как найти исходный файл, если он уже отключён? Сейчас разберёмся, почему это происходит и какие есть варианты действий.

Как Windows управляет точками монтирования VHDX

Когда вы монтируете VHDX-диск через PowerShell или Disk Management, система создаёт не прямую связь между файлом и папкой, а junction point (точку соединения). Это специальная ссылка, которая перенаправляет запросы к папке на конкретный том.

Проверить это можно командой:

Get-Item C:mymountpoint | Select-Object Target

В выводе вы увидите что-то вроде \?Volume{9a1b2c3d-0000-0000-0000-100000000000}. Это GUID тома, который генерируется на основе данных раздела внутри VHDX (а не имени файла или пути).

Здесь кроется ключевой момент: Windows опирается на идентификаторы раздела, а не на расположение VHDX-файла. Даже если вы переместите mydisk.vhdx в другую папку или переименуете его, точка монтирования продолжит работать при повторном подключении – но отследить исходный путь через неё невозможно.

Почему так сделано? Чтобы монтирование оставалось стабильным при изменении структуры дисков. Представьте, что вы подключили внешний накопитель с VHDX – система не «сломается», если файл перемещён.

Шаги для проверки связи между точкой монтирования и томом

Чтобы убедиться в отсутствии прямой привязки к пути VHDX, выполните:

1. Создайте тестовый образ:

New-VHD -Path C:test.vhdx -SizeBytes 1GB -Dynamic  
Mount-VHD -Path C:test.vhdx  
Initialize-Disk -Number 1  
New-Partition -DiskNumber 1 -UseMaximumSize  
Format-Volume -DriveLetter Z -FileSystem NTFS

2. Назначьте точку монтирования:

Add-PartitionAccessPath -DiskNumber 1 -PartitionNumber 1 -AccessPath C:mymount

3. Отсоедините VHDX:

Dismount-VHD -Path C:test.vhdx

Теперь попробуйте найти связь через PowerShell:

Get-Volume | Where-Object { $_.Path -like "*mymount*" }

Результат будет пустым – система «забыла» оригинальный путь, сохранив только ссылку на GUID тома.

Важно: Если вы переименуете VHDX-файл и снова смонтируете его, точка C:mymount заработает как ни в чём не бывало. Но узнать, откуда именно был взят образ, через стандартные средства не выйдет.

Кстати, это частая причина путаницы: админы ожидают, что точка монтирования хранит путь к VHDX, но на практике она лишь перенаправляет к тому (который, в свою очередь, привязан к разделу, а не файлу).

Что делать, если нужно восстановить путь?

Увы, штатными методами – никак. Но есть обходные варианты:

  • Ведите журнал операций с VHDX (например, через Register-ScheduledJob для логирования команд Diskpart).
  • Используйте symbolic links вместо junction points:
    mklink /D C:mylink \?Volume{9a1b2c3d-...}
    Но это не решит проблему полностью — GUID всё равно будет меняться при изменении раздела.

Если вы всё же хотите автоматизировать поиск, попробуйте парсить события в Event Viewer (раздел Microsoft-Windows-Storage-Storport/Operational). Там сохраняются записи о подключении образов, включая пути – но это требует настройки аудита.

И помните: даже если кажется, что система «должна» знать путь к VHDX, её логика работы с томами устроена иначе. Лучше сразу проектируйте процессы с учётом этой особенности – например, храните метаданные в отдельном конфиге или базе данных.

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное