Windows 10ではOneDriveの同期先をリムーバブルドライブに設定することができない。本体のストレージ容量が小さく、microSDカードなどを活用する必要がある安価なWindowsタブレットやスティック型PCでは、それでは困ることが多い。そこで活用したいのが仮想HDDだ。
前編(関連記事)では、仮想HDD(VHDXファイル)をメモリカード上に作り、手動でマウントするところまでを行なった。
今回の後編では、この仮想HDDを起動時に自動的にマウントするところから解説する。なお、前回の解説で仮定したとおり、メモリカードはDドライブ、仮想HDDはOドライブに割り当てていることを想定している。Windowsでは1回ドライブ文字を割り当てると次回以降に再マウントしたときに同じドライブ文字を使おうとする。このため、最低でも一回は仮想HDDをマウントして、ドライブ文字を決定しておいてほしい。
仮想HDDファイルを起動時に自動でマウントする
Windowsには、仮想HDDを自動でマウントする機能がなく、「コンピュータの管理」を使って手動でマウントするか、あるいはDISKPARTコマンドを使ってマウントするしか方法がない。このため、マウント用のスクリプトを作り、タスクスケジューラーでシステムの起動時にこれを実行させる。
なぜ、このようにするのかというと、少なくともOneDriveが実行される以前にマウントが完了していなければならないからだ。スクリプトを使って仮想HDDをマウントするには、DISKPARTコマンドを使う。このプログラムは、HDDのパーティション作成などに利用するものだが、仮想HDDのマウントなども可能になっている。
DISKPARTは、数多くのサブコマンド(DISKPARTコマンド)を持ち、引数なしで起動すると、コマンドを連続して受け付けるようになる。また、DISKPARTコマンドをテキストファイルに記述しておき、まとめて実行する「スクリプト」機能もある。具体的には、以下のコマンドを使う。
select vdisk file=仮想HDDファイルのパス
attach vdisk
しかし、DISKPARTコマンドを直接使うと、ファイル名などが固定されてしまい変更などが行ないにくくなる。そこで、SDカードのルートフォルダにある仮想HDDファイルをすべてマウントするバッチスクリプトを作った。複数のVHD/VHDXファイルがあっても、これで全部マウントできる。
また、マウントしたくなければ、他のドライブやサブフォルダへ移動させればよい。それが、下の囲みのリスト1「mount.bat」である。このバッチファイルは、動作時にDISKPARTコマンドを自動的に作り、それを実行するため、バッチファイルのみで動作する。なお、このバッチファイルはCドライブの「LocalCmd」フォルダに保存する設定になっている。
バッチファイル作成の手順は以下のとおりだ。
1. C:\に「LocalCmd」フォルダを作る。他の名前でもかまわないが、以後の作業では、フォルダ名を読み替える必要がある。何を言ってるかわからないのなら、説明通りにやってほしい
2. メモ帳を起動し、リスト01「mount.bat」をコピーして貼り付ける
3. メモ帳の「ファイルメニュー」→「名前を付けて保存」を選択
4. ファイルダイアログで「C:\LocalCmd」を選択
5. 「ファイルの種類」で「すべてのファイル」を選択。選択しないとテキストファイルになってしまう
6. ファイル名欄に「mount.bat」と入力して「保存」ボタンを押す
7. エクスプローラーでC:\LocalCmdにmount.batが作成されていることをチェック。アイコンは歯車が書いてあるバッチファイル用のものになっていることを確認する
リスト01「mount.bat」
rem @echo off
rem SCANDIRはVHD/VHDXがおかれているフォルダ。
rem ファイルが1つならば直接パスを指定してもよい。
rem 指定されているのはDドライブのルートにあるvhdとvhdxファイルすべて
set SCANDIR=D:\*.vhd?
rem 実行するDISKPARTスクリプトとログを作成するパス
rem このスクリプトと同じフォルダが指定されているが書き込み不可の場合は変更する。
set SCRIPTDIR=%~p0%
rem DISKPARTスクリプトのフルパス名(通常は変更の必要なし)
set SCRIPT=%SCRIPTDIR%$diskpartscript
rem DISKPARTログファイル
set LOG=%SCRIPTDIR%mount_log.txt
rem デバッグ用
set NOERR=noerr
rem 実行前に%SCRIPT%を削除
del %SCRIPT%
rem SCANDIRにある対象を登録
for %%i in (%SCANDIR%) do ( echo select vdisk file=%%i %NOERR% >>%SCRIPT% && echo attach vdisk %NOERR% >>%SCRIPT%)
rem スクリプトの最後に終了コマンドを置いておく。
echo exit >>%SCRIPT%
rem DISKPARTを実行
diskpart -s %SCRIPT%
次にこれをタスクスケジューラーで起動するように設定する。「すべてのアプリ」の「Windows管理ツール」から「タスクスケジューラー」を起動する。ここにタスクを登録するが、最初に自分で作ったタスクを登録する「フォルダ」を作り、そこにタスクを登録する。手順は以下のようになる。
1. 左側の領域で「タスクスケジューラ(ローカル)」の「タスクスケジューラライブラリ」が選択されていることを確認してから「操作」メニューの「新しいフォルダ」を選択
2. ダイアログにフォルダの名前を入れる。筆者は「shioda」とした
3. 左側の領域で作成したフォルダを選択する
4. 中央上の領域で右クリックして「新しいタスクの作成」を選択
5. ダイアログボックスが開かれるので以後、5つのタブを順次設定する。最初の「全般」タブでは、「名前」を入力(ここではOneDrive Mountとした)、セキュリティオプションで「ユーザーがログオンしているかどうかにかかわらず実行する」を選択する
6. 「トリガー」タブを開き、左下の「新規」ボタンをクリック。開いたダイアログで「タスクの開始」を「スタートアップ時」に設定、「詳細設定」は「有効」のみにチェックボックスが付いている状態にする
7. 「操作」でも「新規」ボタンをし、ダイアログの「プログラム/スクリプト」で先ほど作成したスクリプト(C:\LocalCmd\mount.batを仮定)を指定する
8. 「条件」タブでは、すべてのチェックボックスをオフにしておく
9. 「設定」タブでは、「タスクを停止するまでの時間」をオフにする(あとは標準のまま)
10. OKボタンで「タスクの作成」ダイアログを閉じる。パスワードを聞いてくるので、自分のアカウントのパスワードを入力する
設定が完了したら、システムを再起動してみる。起動後、エクスプローラーの「PC」を開いて、仮想HDDがマウントされていればOKだ。
(次ページでは、「実際にOneDriveの同期先フォルダを変更する」)
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ