본문 바로가기

디스크와 파티션

VHD, VHDX 가상 디스크를 윈도우를 시작할 때마다 자동으로 연결시키기 - 부팅시 VHD 연결

가상 디스크를 자동으로 연결하는 배치 파일 만들기

윈도우의 VHD, VHDX 를 통해 생성된 가상 디스크는 윈도우가 종료되면 자동으로 시스템과 연결이 해제됩니다. 그래서 이후 다시 해당 가상 디스크를 사용하기 위해선 사용자가 해당 가상 디스크 파일을 다시 시스템에 연결해줘야 하죠. [부팅용 가상 디스크는 이 작업이 자동으로 이루어집니다.]

가상 디스크를 부팅용으로 사용하는 경우를 제외하면 임시 용도의 성격이 강하지만, 분명 어떠한 가상 디스크는 일반적인 물리 디스크처럼 항상 시스템에 연결시켜서 사용하고자 하는 사용자들도 많을 것이라고 생각합니다. 이러한 용도로 가상 디스크를 사용 중이라면 시스템을 재시작할 때마다 매번 다시 가상 디스크를 연결해야 한다는 것은 분명 큰 불편으로 다가오겠죠. 그래서 이런 생각을 하게 됩니다.


"윈도우가 시작될 때마다 내가 사용하는 가상 디스크를 자동으로 연결시켰으면 좋겠다."


윈도우에서 가상 디스크를 시스템에 연결하는 것은 디스크 관리DiskPart 를 통해 가능하고, 이 중에서 DiskPart 는 스크립트 작업이 가능합니다. 즉, 이는 지정한 가상 디스크를 시스템에 연결하는 DiskPart 스크립트용 배치 파일을 준비하고 이를 시작 프로그램 또는 작업 스케줄러에 등록하면 매번 윈도우가 시작될 때마다 가상 디스크가 자동으로 연결되게 만드는 것이 가능하다는 소리죠.

일단 DiskPart 를 스크립트로 활용하는 것과 이를 통해 배치 파일을 짜는 것의 기본은 아래의 글에서 확인하실 수 있습니다.



간단하게 가상 디스크를 자동으로 시스템에 연결하는 배치 파일은 아래와 같은 식으로 만들면 됩니다.

@echo off

rem --- 가상 디스크 연결 시작 ---

echo select vdisk file="D:\VHD\Example.vhd" > "%temp%\DP-Script.txt"
echo attach vdisk >> "%temp%\DP-Script.txt"

diskpart /s "%temp%\DP-Script.txt" > nul
del "%temp%\DP-Script.txt" /q

rem --- 가상 디스크 연결 끝 ---

exit


만약에 하나가 아닌 여러 개의 가상 디스크를 자동으로 연결하도록 처리하고 싶다면 여러 개의 배치 파일을 만들 필요없이 그냥 아주 간단하게 위의 배치 파일 내에서 rem ~ rem 부분을 반복하여 하나의 배치 파일로 만들면 됩니다. 그리고 이렇게 만들어진 배치 파일을 시작 프로그램 또는 작업 스케줄러에 등록하면 되죠.

참고로 DiskPart 작업은 관리자 권한이 필요하기 때문에 사용자 계정 컨트롤이 꺼져 있어야 해당 배치 파일이 정상적으로 작동합니다.






배치 파일을 시작 프로그램에 등록하기

해당 배치 파일은 이야기한 것과 같이 시작 프로그램에 등록하거나, 작업 스케줄러에 등록하는 방법 두 가지 중에 사용자가 원하는 방법을 통해 자동으로 실행되도록 할 수 있습니다. 작업 스케줄러보다는 시작 프로그램에 등록하는 방법이 더 간단하기 때문에 우선 시작 프로그램에 등록하는 방법을 설명하도록 하겠습니다. 일단 시작 프로그램에 대한 기본적인 내용은 아래의 글을 참고하시면 됩니다.





1. 시작 프로그램 폴더를 통해 시작 프로그램 등록하기

먼저 가장 간단한 방법은 위에서 만든 배치 파일을 시작프로그램 폴더에 위치시키는 방법입니다.

01. 아래의 시작 프로그램 폴더 중 원하는 곳에 배치 파일을 통채로 복사합니다.

개별 사용자용 : %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
전체 사용자용 : %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup



현재 사용 중인 사용자 계정으로 로그온 될 때만 배치 파일이 실행되어 가상 디스크가 자동으로 연결되게 하려면 개별 사용자용 폴더에 배치 파일을 위치시키면 되며, 모든 사용자 계정에서 공통적으로 배치 파일이 실행되게 하려면 전체 사용자용 폴더에 배치 파일을 위치시키면 됩니다.



2. 레지스트리를 통해 시작 프로그램 등록하기

일단 레지스트리에 등록하기 위해선 먼저 배치 파일을 적절한 경로에 위치시켜야 합니다. 간단하게 윈도우 폴더에 위치시키거나 가상 디스크 파일과 같이 두면 관리하기가 편하겠죠. 그런 후 아래와 같이 작업하시면 됩니다.

01. 레지스트리 편집기(regedit)를 실행한 후 다음의 레지스트리 키 중 하나로 이동합니다.

개별 사용자 지속용 : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
전체 사용자 지속용 : HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

02. 해당 키 하위에 새로운 문자열 값을 만든 후, 값 이름은 자신이 알아볼 수 깄게 적절히 지정하고, 값 데이터배치 파일의 전체 경로를 입력하여 저장합니다.




시작프로그램 폴더 때와 마찬가지로 HKEY_CURRENT_USER 에 적용한 값은 현재 사용자에만 적용되며, HKEY_LOCAL_MACHINE 에 적용한 값은 전체 사용자에 적용됩니다.



3. 배치 파일 명령 프롬프트 창 숨기기

이 단락 시작에서 링크로 걸어드린 시작 프로그램 설명 글에서 이야기한 것과 같이 이렇게 배치 파일을 직접 시작 프로그램에 등록하게 되면 배치 파일이 실행되는 명령 프롬프트 창이 잠시지만 출력되었다가 사라지게 됩니다. 간단한 작업이기 때문에 순식간에 사라지지만 이렇게 무언가가 떴다가 사라지는 걸 거슬려하시는 분들이 분명 계실거라 생각합니다. 대표적으로 제가 그렇습니다. ^^;

아무튼 그럴 땐 배치 파일과 함께 아래와 같은 스크립트 파일을 준비하여 배치 파일이 아닌 해당 VBS 스크립트 파일을 시작 프로그램으로 등록하시면 됩니다. 해당 스크립트는 실행된 명령 프롬프트를 숨겨주는 역할을 합니다.

Set WinScriptHost = CreateObject( "WScript.shell" )
WinScriptHost.Run Chr(34) & "D:\VHD\VHD_Mount.cmd" & Chr(34), 0
Set WinScriptHost = Nothing


참고로 윈도우 7 은 사용자 계정 컨트롤이 꺼진 상태라면 DiskPart 가 배치 파일이 실행된 명령 프롬프트 창 내에서 실행되고, 결론적으로 이렇게만 해주어도 우리가 원하는대로 작업이 잘 숨겨집니다. 하지만 윈도우 8 은 기본적으로 사용자 계정 컨트롤이 꺼진 상태일지라도 배치 파일이 자동으로 관리자 권한으로 실행되지 않기 때문에, 배치 파일 내에서 다시 관리자 권한으로 DiskPart 창을 열어 실행하게 되고, 이렇게 실행된 DiskPart 창은 해당 VB 스크립트의 영향을 받지 않기 때문에 숨겨지지 않고 그대로 노출되는 문제가 있습니다.

즉, 윈도우 8 에선 시작 프로그램과 VBS 의 조합만으로는 작업이 살행되는 모습을 모두 숨길 수 없다는 것이죠. 뭐 그래도 큰 상관은 없지만 난 곧 죽어도 이게 거슬려서 못 살겠다 싶으신 분들은 시작 프로그램 대신 배치 파일을 관리자 권한으로 실행시킬 수 있는 작업 스케줄러를 사용하시면 합니다.






배치 파일을 작업 스케줄러에 등록하기

작업 스케줄러는 작업 스케줄러 창에서 직접 설정하게 되면 설명이 꽤나 길어지기 때문에 이번 글에서는 간단하게 명령 위주로 작업하는 것을 알려드리도록 하겠습니다. 먼저 위에서 제공한 CMD 배치 파일과 VBS 스크립트 파일을 자신에게 맞게 잘 수정하신 후 적절한 경로에 위치시키시길 바랍니다. 사전 작업이 모두 끝났으면 아래와 같이 작업을 진행하면 됩니다.

01. 명령 프롬프트를 관리자 권한으로 실행하여 아래의 명령을 내려줍니다.

schtasks /create /sc onlogon /tn "VHD_Mount" /rl highest /tr "D:\VHD\VHD_Mount.vbs"
└ 이 때 /tn 는 예약 작업의 이름이며 /tr 은 실행할 프로그램입니다.



02. Windows Key + X -> 제어판 -> 관리 도구 -> 작업 스케줄러 -> 작업 스케줄러 라이브러리로 이동하여 생성한 작업 스케줄이 정상적으로 등록되었는지 확인합니다.



명령을 간략하게 설명하자면 /tn 이름으로 작업을 만들며 대상은 전체 사용자로, 로그온할 때 실행하고, 자동으로 관리자 권한으로 실행되도록 하는 예약 작업을 생성하는 명령입니다. 일단 데스크탑 사용자는 여기까지만 하시면 되고요. 노트북 사용자는 위의 작업에 이어서 아래의 작업을 추가로 진행하셔야 합니다.

03. 작업 스케줄러 라이브러리에서 생성한 작업을 더블 클릭하여 열어 준 후 조건 탭으로 이동합니다. 그런 후 옵션들 중 컴퓨터가 배터리 전원으로 전환되는 경우 중지 옵션의 체크를 해제해주고 확인을 눌러 저장합니다.



이렇게 해주시면 윈도우 8 에서도 명령 프롬프트 창을 숨기면서 배치 파일을 통해 자동으로 가상 디스크 파일을 연결하실 수 있습니다. 만약에 해당 예약 작업이 더이상 필요가 없다면 작업 스케줄러 라이브러리 창에서 해당 작업을 마우스 오른쪽 버튼으로 클릭한 후 삭제하시면 됩니다.


이렇게까지 해야 하나? 라는 생각도 문득 들지만, 저는 무언가 튀어 나왔다가 사라지는 눈에 거슬리는 것들을 굉장히 싫어하니까요! 그리고 이건 정말로 쓸데없는 잡담인데요. schtasks 명령의 매개 변수에는 조건 중 전원에 관한 옵션은 포함되어 있지 않기 때문에 명령 한 번으로 끝내지 못하고 노트북 사용자들은 다시 한 번 작업 스케줄러 창에서 추가로 수정을 해야 합니다. 마이크로소프트 머저리들이 그냥 명령을 만들려면 명령 내에서 모두 해결할 수 있게 만들어 줄 것이지, 왜 해당 조건은 설정하려면 XML 파일로 셋팅을 만들고 이를 통채로 불러오는 구조로 처리하게 만든건지 이해가 안 되네요. 배치 파일 처리하기가 난감해지잖아요. 흠... 이상입니다.