В Windows 7 и Windows Server 2008 R2 появилась возможность создавать и подключать файлы виртуальных дисков (VHD/VHDX) прямо из консоли управления дисками (Disk Management). Такие виртуальные диски выглядят в системе как отдельные физические диски и могут использоваться для хранения произвольных данных. Существенный недостаток таких дисков — при каждой перезагрузке Windows приходится каждый раз вручную монтировать все VHD/VHDX файлы. Кроме того, право на монтирование файлов виртуальных дисков vhd есть только у администраторов компьютера, простые пользователи не могут самостоятельно подключить VHDx файл (каждый раз приходится вмешиваться администратору).
В этой статье мы покажем, как автоматически монтировать vhd/vhdx файл при загрузке системы, так, чтобы виртуальные диски были доступны и простым пользователям (не обладающих правами администратора)
В Windows отсутствует встроенная возможность автомонтирования vhd-файлов при перезагрузке системы, поэтому нам придется разработать собственный механизм монтирования. В этом нам поможет планировщик заданий Windows и утилита diskpart.
Итак, создадим текстовый файл (C:\Scripts\attach_vhd.txt) со следующим кодом:
select vdisk file="C:\vhd2\w10vhd.vhdx"
attach vdisk
select part 1
assign letter=K
exit
где:
C:\vhd2\w10vhd.vhdx – полный путь к VHD или VHDX образу диска
K –буква диска, которую нужно назначить VHD образу
Данный сценарий подключает указанный vhd файл, выбирает на нем первый раздел и назначает ему данную букву диска. Если на диске несколько разделов, измените код соответствующим образом, указав номер раздела, который нужно подключать.
Запустите Windows Task Scheduler (Taskschd.msc) и создайте новое задание планировщика (Actions -> Create Task). Настройте его следующим образом:
- Вкладка General:
- Укажите имя задания (Name):automountvhdx;
- Отметьте, что он должно запускаться независимо от того, вошел пользователь в систему или нет (Run whether user is logged on or not);
- Укажите, что задание должно запускаться с максимальными привилегиями ( Run with highest privileges);
- Вкладка Triggers:
- Добавьте новый триггер запуска при загрузке (At Startup) с настройками по-умолчанию.
- Добавьте новый триггер запуска при загрузке (At Startup) с настройками по-умолчанию.
- Вкладка Actions:
- Создадим новое действие New:
- Действие запуск программы (Start a program);
- Программа/скрипт: diskpart ;
- В качестве аргументов программы укажем: /s «C:\Scripts\attach_vhd.txt» ;
- Создадим новое действие New:
- На вкладке Conditions снимите галку у опции «Start the task only if the computer is on AC power«.
- Сохраните изменения. Система попросит вас указать данные учетной записи, из-под которой будет запускаться задание (учетная запись должна обладать правами администратора).
Чтобы задание выполнялось от имени системы, еще раз откройте его свойства и на вкладке General нажмите кнопку Change User or Group. В окне выбора пользователя укажите system и сохраните изменения.
schtasks /create /tn "automountvhdx" /tr "diskpart.exe /s 'c:\Scripts\attach_vhdx.txt'" /sc ONLOGON /ru SYSTEM
Теперь при следующей перезагрузке компьютера указанный виртуальный VHDx диск будет смонтирован автоматически.
Если вы хотите, чтобы виртуальный vhdx диск монтировался не в отдельную букву диска, а в папку, измените код в файле c:\Scripts\attach_vhd.txt на:
select vdisk file="C:\vhd2\w10vhd.vhdx"
attach vdisk
select part 1
assign mount="c:\mount"
exit
В результате выполнения данной команды виртуальный диск будет смонтирован в отдельный каталог на вашем физическом диске (в данном каталоге будет отображаться содержимое vhdx файла).
Можно смонтировать не только локальный VHD диск, но и диск из сетевого каталога через UNC путь.
select vdisk fils="\\192.168.1.100\share\shared.vhdx"
Для тестирования работы коды вашего скрипта автоматического подключения виртуальных дисков не обязательно каждый раз перезагружать компьютер, достаточно в командной строке с правами администратора выполнить команду:
diskpart /s c:\Scripts\attach_vhdx.txt
Если ваш код не содержит ошибок, то команда подключит vhdx файл и в системе появится новый диск.
Данные способы автоматического подключения виртуальных дисков работают как в Windows 10, так и в Windows 8.1 и Win 7.
Если вы больше любите PowerShell, можно автоматически смонтировать VHDX диск с помощью следующего PoSh скрипта в автозагрузке (для управления дисками изспользуются командлеты из модуля Storage):
mount-vhd -path C:\vhd2\w10vhd.vhdx –PassThru | Get-Disk | Get-Partition | Set-Partition -NewDriveLetter G
Скрипт монтирует диск к букве K:, а на фотках — диск I:
Спасибо внимательному читатели 🙂 Тут вина в невнимательности, не более того…
А я получил такую мессидж-бяку:
Ошибка в задаче automountvhd. Сообщение об ошибке: Ошибка ограниченного использования учетной записи пользователя. Возможные причины — запрещены пустые пароли или в политике включено ограничение использования.
Из-под какой учетной записи запускаете задание? Из под System не пробовали?
А как отключить созданную задачу
Находите созданную задачу в планировщике задач (Taskschd.msc), ПКМ — отключить(Disable)
В планировщике заполняем поля !!!
Программа или сценарий:
C:\Windows\explorer.exe
Добавить аргументы:
Ваш — Виртуальный XP.vhd
Рабочая папка:
Ваша — I:\! конюшня VM\Windows XP Professional
Доброе время суток.
Не подскажете из за чего может возникать ошибка «параметр задан неверно», в колонке «Результат последнего запуска»?
не сталкивался. это надо смотреть на компе.
Как всегда отличная статья, Дмитрий, спасибо!
При первом запуске задания после загрузки системы тоже столкнулся с ошибкой «Параметр задан не верно», а запуск diskpart.exe завершался с кодом возврата 2147942487.
Дело оказалось в службе «Виртуальный диск» (vds), которая по-умолчанию имеет тип запуска «Вручную». За время выполнения команды из планировщика служба не успевала запуститься и поэтому диск не подключался. При этом второй и последующий после загрузки системы запуск команды проходит успешно.
Чтобы монтирование виртуального диска всегда проходило успешно можно сделать три вещи:
1. Для службы «Виртуальный диск» (vds) установить тип запуска «Автоматически».
2. В свойствах задания планировщика на вкладке «Параметры» поставить галочку «При сбое выполнения перезапускать через 1мин.»
3. В свойствах задания планировщика на вкладке «Триггеры» поставить галочку «Отложить задачу на 1 мин.»
Спасибо за workaround.
Согласен, иногда логично отложить запуск задание подключения диска на некоторое время, чтобы дождаться загрузки всех системных служб.
Добрый вечер!
Подскажите, пожалуйста, а как таким способом подключить VHD как ntfs-папку
Добрый день. Присоединяюсь к вопросу Валерия: требуется подключать vhd-диски как ntfs-папки. Осуществима ли задача?
Да можно смонтировать содержимое vhdx диска в существующий каталог на диске, к примеру:
Выбираем vhd файл:
select vdisk file=»F:\imagedisk.vhdx»
Подключаем его:
attach vdisk
Смотрим полученный номер раздела для данного виртуального диска
list volume
Выбираем данный раздел (в моем случае это Volume 4):
select volume 4
Подключаем раздел 4 в существующий (пустой) каталог на диске с:\mount
assign mount=»c:\mount»
Теперь в папке c:\mount будет отображаться содержимое vhdx
А как надо сделать в случае если виртуальных дисков 3 штуки и надо чтобы они разу подключались при старте ОС, ОС Windows 10 Enterprise x64 v1607, как сделать так чтобы виртуальные диски подключались автоматически при запуске?
Все аналогично. В вашем случае в файле attach_vhd.txt должны быть записи формата:
select vdisk file=»C:\disk1.vhdx»
attach vdisk
assign letter=K
select vdisk file=»C:\disk2.vhdx»
attach vdisk
assign letter=L
select vdisk file=»C:\disk3.vhdx»
attach vdisk
assign letter=M
itpro У Вас есть одна маленькая, но существенная ошибка: указанная в последней строке буква назначаться не будет, т.к. не выбран диск для её назначения; а будет назначена произвольная свободная буква! :-(((
Большое благодарище !!!!!
Респект автору, хотя можно было и по проще, не все же программистами родились )) у меня такой вопрос — как сделать ( если это возможно ) чтобы при старте виндовс не отображалось окно программы DiskPart (было в фоновом режиме) авто монтирования vhd диска? заранее благодарю..
Попробуйте галочку Hidden (Скрытый) в свойствах задания.
В восьмёрке и десятке .VHD автомонтируются двойным щелчком, как настроить такое поведение в семёрке777
Вот тут похожую штуку делают с добавлением опции монтирования vhd в контекстное меню:
_https://www.howtogeek.com/51174/mount-and-unmount-a-vhd-file-in-windows-explorer-via-a-right-click/
а аргумент писать /s или сразу путь к тхт ??
Аргумент /s использовать обязательно.
mount-vhd -path C:\vhd2\w10vhd.vhdx –PassThru | Get-Disk | Get-Partition | Set-Partition -NewDriveLetter G
Такой трюк можно проделать только с установленой ролью Hyper-V.
Все можно сделать проще в планировщике через cmd.exe, вызывающий diskpart напрямую без всяких скриптов и текстовых файлов
Друзья, доброго времени суток. Может кто знает, нужен скрипт для монтирования VHD/VHDX-диска конкретному пользователю на сервере. Заранее спасибо
Команды монтирования vhfx описаны в статье. Вы хотите чтобы диск монтировался при входе?
Нужно запускать эту команду через автозапуск, стартап скрипты, задание планировщика. Вариантов много.
Укажите пожалуйста, что текст в файле скрипта должен быть в UTF-8
Иначе будет ошибка долго мучался, пока не нашел вот на Хабре об этом упоминания
qna.habr.com/q/630755
Надеюсь кому то поможет
не стартовало на Hyper-V
получилось только через задание планировщика: запуск программы powershell с аргументами
Mount-VHD –Path «D:\vhd\mesto\disk.vhd»
для diskpart лучше прописать путь полностью до C:\Windows\system32\diskpart.exe
C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup>»C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\VirDisk.bat»
C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup>select vdisk file=»C:\VirtDRV\ProgramFiles.vhdx»
«select» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup>attach vdisk
«attach» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup>select part 1
«select» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\Users\chipa\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup>assign letter=L
«assign» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C планировщиком тоже ничего не вышло.
Короче не статья, а сплошной фейк.
статья не фейк, просто у тебя руки из неправильного места выросли, запускать команду PowerShell в обычной командной строке
А как же мне надо прописать BAT файл в автозагрузку и еще от PowerShell и небось с правами администратора?
Статью внимательно читать надо.
Те команды, которые под PowerShell так и помечены в статье.