体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Windows10 の仮想ディスクの容量増加 - 16GBから32GBへ (10/26)

(2018/1/21追記)
スリープ復帰時、VHDマウントをタスクスケジューラへ登録する。

Windows10 Fall Creators Update 1709以降ではスリープ復帰はイベントビューアで見るとSystemのKernel Powerで、IDが131だった。
従って、タスクスケジューラに新規追加するか、ログイン時のVHDマウントのタスクのプロパティで、トリガータブに次のように設定した。
a0034780_21550878.png
しかし新規作成時はOKなのだが、編集したりその場で実行すると「メッセージ: 1つ以上の指定された引数が有効ではありません」と出る。-bootは間違っていないのだが次のサイト様の末尾にその解決策が乗っていた。

これによるとユーザの権限が低いらしい。(「全般」ー「ユーザーまたはグループの変更」ー「詳細設定」ー「検索」ー「高い権限のアカウント」選択)
なので次のようにして選択。
a0034780_22011599.png
スリープからの復帰なのでログオンにかかわらず実行するため下の赤枠を選択。VHDマウントなので特権で実行。
ユーザの権限は1番目の赤枠の[ユーザまたはグループの変更(U)]ボタン押下で。
[詳細設定]ボタンを押し次の画面で[検索]ボタンを押すと、ユーザ・グループ一覧が表示されるので先頭のAdministoraterを選ぶ。自分の場合は末尾にある、このPCのログインユーザを選んだ。
a0034780_22161988.png
元の画面に戻ると、その選択したユーザ・グループのパスワードを求められるので入力する。
a0034780_22192886.png
ユーザ名の頭に自分の場合K1SEGAWAと付くがダイアログを再び開くとそれは省略されてk1segawaだけになっている(AdministoraterならAdministoraterだけ)。再び開いた時はOKを押すとパスワードを求められるがユーザ名がK1SEGAWAが省略されている(k1segawa)ので▽ボタンを押して、省略されていないユーザ名を選ばないとエラーになる(K1SEGAWA\k1segawa)。

自分の場合は途中諦めて下記のように2つのタスクに分けた(もちろん操作はVHDマウントのコピー)が、1つのタスクでも構わないはず(元のVHDマウントタスクにトリガーを新規追加する)。
a0034780_22294835.png
これでスリープから解除するときちんとVHDマウントされている。

(ここまで)

(SDカードの仮想ディスク化はもうわかっているのなら下の方まで飛ばしてかまわない。どう自動化してるかは人によるので一応記述した)

今使ってるhp strem11はRAMメモリ2GB、かつFlashROMメモリ32GBでOSが占めている容量を除くと10GBくらいしかユーザは使えない。
なのでこの間のWindows Create Update では残り容量が7GBを切っていたので、容量を空けるのに苦労した(USBメモリに更新プログラムを入れても本体に展開されるので8GB必要だった)。

なので、マイドキュメント(ドライブ変更が出来る)や画像ファイルなどの必要なデータはSDカード上に退避させておきたい。
この時SDカードがリムーバブルメディアではなく仮想ディスクとして使えれば、プログラムのインストール先にも出来るのでさらに本体の容量を空けることが出来る。

なのでVHDという仮想OS環境でも用いられているファイル形式で仮想ディスクを作成し、Windows10のシステムに通常のディスクパーティションと認識させる。

このVHDファイルは最初にSDカードを使う際にNTFSでフォーマットして「ディスクの管理」から[メニュー][操作][VHDの作成]を選ぶだけで良い。
a0034780_00451628.png
(ディスクの管理画面の例)

作成されたVHDファイルをダブルクリックするか、「ディスクの管理」から[メニュー][操作][VHDの接続]を選ぶとドライブに割り当てられる(CドライブのみならDドライブになる)。
しかしそれだと手間がかかり、ドライブ変更したマイドキュメントにアクセスしたり、ドライブ変更したプログラムを実行する前にやっておかないといけないので、起動時に自動的にVHDファイルをドライブに割り付けることが出来れば便利だ。

それには、コマンドdiskpartでも出来るが、こちらのサイト様のツールを今回利用している。

こちらのvhd-attach.exeをタスクスケジューラに登録した。
バージョンアップされているので前のバージョンの方に設定の仕方が載っているのだが、
私の場合、特定のユーザでログインしたら、その直後に問題なくそのユーザがアクセスできる領域にプログラムと設定ファイルを置くようにした。
具体的には C:\Users\<ユーザ名> の直下にvhd-attach.exeとvhdfiles.txtを置いている。間違ってもSDカード上に置かないこと。

vhdfiles.txtの内容は仮想ディスクが割り当てられたドライブ名がDならば、D:\virtual.vhdとなる(仮想ディスクのファイル名)。

これをタスクの作成でわかりやすい名前で登録する。
コマンドは管理者権限が必要で、-bootオプションをつける。
vhd-attach.exe -boot
開始イベントはユーザログオン時で、その時チェックを有効にする。
これでうまく行かない時はPATHに実行形式のディレクトリを追加してみる。

ほぼこれでサイト様の通り設定したのだが、今回はSDカードの容量が足りなくなってきたので増量するためVHDファイルを移行する手段についての備忘録だ。

(ここからが16GBを32GBに拡張した話 ========)

まず、VHDディスクに使うSDは、このPCではSDHCまでしか使えないので最大容量は32GBとなる。今のが16GBかつ残り2GBなので、増量後は残り18GBとだいぶ余裕が出てくる。

1)SDHCをフォーマットできるSDカードリーダで32GB SDカードをNTFSフォーマットする。4096でセクタを設定した。書き換え回数を減らさないようにクイックフォーマットで行うこと。
2)この時VHDファイルを16GBから32GBに拡張するのに今回は「VHD Resizer」というのを使う。色々探してほしい。他の方法もあるようだ。インストールは本体へ。
3)コピー元SDにはVHDファイルが入っているので書き込みロックすると安心。またPCの起動時に認識すると仮想ディスクになるので接続しないでPC起動すること。
4)コピー元SDと書き込み先SDを接続し、VHD Resizerを管理者権限で起動する。
5)openボタンで元SDのVHDファイルを選択し、書き込み先SDはDinamicに指定してファイル名を入力する。resizeボタンを押すとプログレスバーが伸びていく。かなり時間がかかる。
6)リサイズが成功したら両SDを外し、一旦PCを再起動する。書き込み先SDは、PCが起動してからVHD接続エラー(diskpartのエラー)後に接続する(差す)。
7)「ディスクの管理」でSDカード内のVHDファイルに接続する([メニュー][操作][VHDの接続])。
8)SDカードとは別の仮想ドライブ(D:など)が現れるので、それに未使用領域があることを確認する。
9)その仮想ドライブのプライマリパーティションを指定して右クリックで「ボリュームの拡張」を選ぶ。
10) すぐに終わるので次にタスクスケジューラの任意のユーザログオン時のタスクから該当のタスクを探す。
(これ以降は自分の自動マウントの環境)
11) C:\Users\<ユーザ名>\vhd-attach.exeがあるはずなのでそこのvhdfiles.txtの中身のドライブ名・ファイル名を新しい書き込み先SDの仮想ドライブ・VHDファイル名に編集する(例えばF:\virtual.vhdなど)。
12) タスクスケジューラの操作タグに-bootオプションがあることを確認する。
13) SDカードを接続してPCを再起動すると、VHDのエラーが発生しなければOK。
14) さらにクイックアクセスに仮想ディスクへのアクセスが残っていれば、ドライブ名が変わっていてアクセスできなくなるので削除する。なので仮想ディスクをG:などの少し間を空けたドライブに割り当てておくとドライブ名はD:が使えて変更しなくてすむ。
ドキュメント・ピクチャ・デスクトップ・ダウンロードなどは各ディレクトリでドライブの変更が可能なので、Program Filesを仮想ディスクに置いていた場合、起動時に実行されるプログラムはドライブ名が変わると動かないのでなるべく避ける。


[PR]
by k1segawa | 2017-10-27 00:37 | パソコン | Comments(0)