Windowsでディスク・パーティションをマウント・アンマウントするバッチ
100年ぶりのブログです。
バックアップのために2本のディスクをfast copyで定期的にミラーするようにしたんですが、
バックアップ側のディスクが普段邪魔だし、バックアップもろともソフト側で消し飛ばす可能性もあるので、普段はアクセスできないようにしたい。
Linuxなんかだととりあえずumount叩いとけばいいんじゃないのかという感じですがWindowsだとどうすりゃいいのか。
https://technet.microsoft.com/en-us/library/gg252603(v=ws.10).aspx
diskpart で全部できるらしい。
https://technet.microsoft.com/en-us/library/cc772586(v=ws.10).aspx
mountvol でもパーティションのマウント・アンマウントができるらしい。
こっちのほうがすき。
上記を参考にfast copyの動作前にディスクオンライン・パーティションマウントをして、
コピーが終わったらパーティションアンマウント・ディスクオフラインにするような想定でバッチ化しました。
当然ですが管理者権限が必要なのでご注意ください。
再起動するとディスクがオンラインになるのかはようわからん。
パーティションの自動マウントは
mountvol /n
で切れる。
@echo off rem 管理者権限確認 openfiles > nul if not %ERRORLEVEL%==0 echo permission error & timeout 10 > NUL & exit /b 1 set PART1=%TEMP%\partition%RANDOM%%RANDOM%.txt set TEMP1=%TEMP%\temp%RANDOM%%RANDOM%.txt set TARGETDISK="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" set TARGETVOL=\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\ set TARGETDRIVE=X:\ rem DISKPART用ファイルの作成 echo select disk 0 > %PART1% echo UNIQUEID disk >> %PART1% rem ディスクのGUIDを出力 diskpart /s %PART1% | find "ID:" > %TEMP1% rem ディスクのGUIDをチェックし、指定と異なる場合は処理を中断 type %TEMP1% | find %TARGETDISK% if not %ERRORLEVEL%==0 diskid error & timeout 10 > NUL & exit /b 1 rem DISK ONLINE echo select disk 0 > %PART1% echo online disk >> %PART1% diskpart /s %PART1% rem ボリュームのマウント mountvol %TARGETDRIVE% %TARGETVOL% rem この辺に処理 timeout 10 rem この辺に処理 rem ボリュームアンマウント mountvol %TARGETDRIVE% /P rem DISKPART用ファイルの作成 echo select disk 0 > %PART1% echo UNIQUEID disk >> %PART1% rem ディスクのGUIDを出力 diskpart /s %PART1% | find "ID:" > %TEMP1% rem ディスクのGUIDをチェックし、指定と異なる場合は処理を中断 type %TEMP1% | find %TARGETDISK% if not %ERRORLEVEL%==0 echo diskid error & timeout 10 > NUL & exit rem DISK OFFLINE echo select disk 0 > %PART1% echo offline disk >> %PART1% diskpart /s %PART1% del %PART1% del %TEMP1%
環境に合わせて以下の箇所は要変更です。
set TARGETDISK="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" set TARGETVOL=\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\ set TARGETDRIVE=X:\
TARGETDISKはdiskpartコマンドで対象のディスクを探してGUID(ディスクID)を指定します。
C:\Windows\system32>diskpart DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オフライン 3000 GB 0 B ディスク 1 オンライン 1000 GB 0 B DISKPART> select disk 0 ディスク 0 が選択されました。 DISKPART> detail disk WDC WDXXXXXXXXXXX ATA Device ディスク ID: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
TARGETVOLはmountvolコマンド出力されるGUIDを確認して、ターゲットになるボリュームのGUIDを指定します。
C:\Windows\system32>mountvol 現在のマウント ポイントとボリューム名の考えられる値: \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\ *** マウント ポイントなし *** \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\ C:\
TARGETDRIVEはマウントしたいドライブレターを入れてください。
適当にしかテストしてないので動かなかったらすみません。