この記事、何?
ちょっとしたコマンドの記録。
あと、疑義があるのでそのメモ。
どういう人向け?
似たようなことをしたくなった時の将来の自分あて。
あと、仮想初心者にとって目から鱗が落ちるようなサイトを紹介・・・
したかったけど見つけられなかったので論点だけ書いてみた。
試した環境は?
Windows 10 Pro (1803)
Hyper-V (10.0.17134.1)
その中で、こんな仮想マシン構成をしていて、その「base」をもとに「python」を作成。
そのハードディスクが大きくなりすぎたので小さくした。
やったこと(序文)
・仮想マシン上にPython環境の構築
詳細は割愛。別記事で。
この記事の論点だけ書くと、MS Updateをまともにかけてしまったため、ハードディスク更新が莫大にかかった。
やっぱりLinuxに移行しようかなぁ・・・
・そのでっかくなったハードディスクの縮小
というわけで、そのでっかいハードディスクを小さくしたかった。
古い知識で、ゲストで0埋めして、ホストから圧縮して・・・
と思ったんだけど、「それ古い知識ですから」って書いてあったので試してみた。
やったこと(本文)
前振りが長いですね。ここからが本文。
少し前の記事で作ったHyper-Vのスナップショット環境でPython入れたかったんだけど、MS Updateをかけてしまったので
ハードディスクがかなり大きくなってしまったの。
なので、少しでも小さくしたい、と。
で、以下の二つのサイトを見てやってみた。
(概要)
■VHD/VHDXのサイズを縮小するための事前準備は面倒?──その行為、無駄です! (1/2)
http://www.atmarkit.co.jp/ait/articles/1609/26/news016.html
(具体的な方法)
■Hyper-V仮想ディスクの最適化(圧縮)メモ
https://qiita.com/seki-moto/items/988e5caf0d0cf9dff933
(実際のコマンド)
PS> $targetvhd = "VHD(X)のフルパス"
PS> Mount-VHD $targetvhd -Readonly
PS> Optimize-VHD $targetvhd -Mode Quick
PS> Optimize-VHD $targetvhd -Mode Quick
PS> Dismount-VHD $targetvhd
seki-motoさんが書かれているコマンド通り実行。
で、2回(以上)やっても小さくならなかったのでちょっとアレンジ。
PS> Optimize-VHD $targetvhd -Mode Full
PS> Optimize-VHD $targetvhd -Mode Full
結果、KBレベルくらいしかちいさくならなかった...orz
で、他を漁ってたら、こんなの見つけたので試してみた。
■Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする (Windows Server Tips)
https://www.ipentec.com/document/windows-hyper-v-trim-vhdx-file
少し小さくなった。(37GB→34GB)
ここで、仮想マシンの中で、不要なものを消したほうがいいのでは?と思いついた。
ので、ゲストからディスクのクリーンアップを使ってUpdateの残骸を削除。
改めて、コマンドを使った。
まあまあ小さくなった。(34GB→24GB)
やっぱり消化不良
ん?じゃ、最初のサイトがいっていたことどうなの?という話。
あと、別件に気を取られていて、中で0埋めをどこでやったかやらなかったかとか、かなり不正確。
やっぱりきれいに記録取っとかないとだめね、という話かも。
仮想マシンのハードディスクの差分管理について
共存できない開発環境を二つ切り替える必要がある場合に仮想マシンを2台作るとする。
<環境1>
OS+開発ソフトA
<環境2>
OS+開発ソフトB
これで、OSが20GB、開発ソフトがそれぞれ1GBの場合、普通に考えると両方の仮想マシンが21GBで合計42GBになる。
それがヤなのでこんな風にしたい。
<基底環境>
OS
<環境1>
開発ソフトA(の差分)
<環境2>
開発ソフトB(の差分)
これができれば全部で22GBでよいという話。
ちなみにうちの環境だと基底環境としてbaseが30GBくらい、それぞれの仮想マシンが中身次第で1GBだったり3GBだったりという感じ。
原理:紹介したかったサイトの論点
これ、昔、同僚に聞かれて説明に使ったいい感じのサイトがあったの。
そのURLを張ろうと思ったんだけど、見つけられなかった。
書いてあったのはこんな感じ。
都合上、ハードディスクの1セクタが日本語3文字に例える。
で、お天気の状況を記録する。
(初版)
1 | 2 | 3 | 4 |
---|---|---|---|
第1セクタ | 第2セクタ | 第3セクタ | 第4セクタ |
東京は | 本日は | 雨天 | です |
で、1日たったので変更する。
(変更後)
1 | 2 | 3 | 4 |
---|---|---|---|
第1セクタ | 第2セクタ | 第3セクタ | 第4セクタ |
東京は | 昨日は | 雨天 | でした |
で、「東京は」っていらないという話になり、削除する。
(削除後)
1 | 2 | 3 | 4 |
---|---|---|---|
第1セクタ | 第2セクタ | 第3セクタ | 第4セクタ |
東京は※ | 昨日は | 雨天 | でした |
※状態が削除として扱われるため、データは残ったまま。 |
だから、差分・削除としては変更後の第2・第4セクタの2個分の記録しかいりませんよ、という話をきちっと絵を描いて説明してた。
(ほんとは管理セクタとかでどーのこーのという情報はあるけど、割愛で。)
で、疑問点は、削除データをどう扱うのか。
Undelete等の手段で戻せるという情報を保持するのかしないのか。
あとで、「FFFFFFFF・・・・」って書いた1GBくらいのファイルをつくてゴミ箱からも含めて削除して、
そのうえで上記のコマンドを使ったらちいさくするのかしら。
古いソフトの不正インストール対策でそんな感じでファイル化されていないハードディスクの情報に依存して・・・
というのがあったような気がするので、そういうソフトはどうなるんだろうという話。
ただ、ファイルとして保存されていないデータを保証しないという立場(仕様)が自然なような気がするので
そのような動作をしてくれるような気がするけどどうだろう。
あと、Windows.oldフォルダができるレベルだと差分本体がでかいのであまり意味がない・・・
蛇足
で、よくよく考えたらそもそもMS Updateを既定値の自動適用を変更すればいいだけな気がしてきた。
本体の手順確認を兼ねて、再実行しようかな・・・
セキュリティリスクは気になるけど。