Если вы работаете с виртуальными дисками в 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:
Но это не решит проблему полностью — GUID всё равно будет меняться при изменении раздела.mklink /D C:mylink \?Volume{9a1b2c3d-...}
Если вы всё же хотите автоматизировать поиск, попробуйте парсить события в Event Viewer (раздел Microsoft-Windows-Storage-Storport/Operational). Там сохраняются записи о подключении образов, включая пути – но это требует настройки аудита.
И помните: даже если кажется, что система «должна» знать путь к VHDX, её логика работы с томами устроена иначе. Лучше сразу проектируйте процессы с учётом этой особенности – например, храните метаданные в отдельном конфиге или базе данных.