NoxPlayerで肥大化したディスクを縮小する

#はじめに (飛ばしてOK）
Noxでアプリを入れたり消したりしていると、ディスク容量が肥大化していきます。
Noxの中でAndroid上で容量を見ると沢山空いているのに、
Windows上で見ると20Gとか使っていてなんで？と思ったことはありませんか？
ちなみに初期は7G行かないくらいです。

この肥大化したディスクはNoxのクリーンナップ機能では縮小できません。
なぜなら仮想ディスクとしてすでに容量が確保されてしまっているからです。
NoxPlayerは、仮想ディスクを可変のフォーマットで作成するので、
日々使っていると仮想ディスク自体のサイズが肥大化していくのです。

PCのディスクにまだ空きが沢山あるから別にいい？
だめです。
バックアップやNoxが対応しているAndroidのバージョンが上って移行をする時などに、
ディスク容量が大きいとめちゃめちゃ時間がかかってしまいます。
下手したら1日潰れます。

こちらの記事ではそのディスクサイズを縮小する方法を記載していきます。

せめてバックアップや移行の前に縮小を実行して待ち時間を短縮しましょう。


#用意するもの

##VMWare社のvmdkmanager
Noxの仮想ディスクはvmdkです。
vmwareでいい感じにメンテナンスできるtoolがありますのでそれを使います。

https://kb.vmware.com/s/article/1023856

↑のページの右下あたりのAttachmentsから -vdiskmanager-windows-7.0.1.exe2.zip
をDLしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/173049c8-af3c-695c-9594-bfb461b6d76a.png)

解凍して任意のフォルダにリネームして置きます。
今回はNoxのBin（D:\Program Files\Nox\bin)※なぜかDに入ってた
に、vmware-vdiskmanager.exeとして置きます。


##gitbash
こちらは別にいらないですが、筆者はwindowsのコマンドプロンプトが嫌いなのでgitbashを使ってやりました。
当記事はこちらを使った話で書きますので同じようにしたい方はこちらからDLしてください。

https://gitforwindows.org/


#縮小する
まず縮小したい対象のNOXを立ち上げます。今回はこいつを縮小します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/54719b68-d8f2-fb97-1bcb-089ce06e3ba2.png)

名称の左の「3」を覚えておきましょう。

次にNOXのBinにgitbashで入ります。
対象フォルダ上で右クリックで「Git Bash Here」で簡単に開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/84def4f6-468c-54df-d94a-f19716fd4d0d.png)

Noxのbinに入っている状態でgitbashが立ち上がります。
Noxが立ち上がったら以下のコマンドを打ちます。

```bash:
./nox_adb.exe devices
```
このように実行中のデバイスのIPとポートが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/c6e1386b-e91c-76c6-f641-d7b64889c3ef.png)

以下のコマンドでデバイスに接続します。
デバイスの情報は適宜書き換えてください。

```bash:デバイスに接続
./nox_adb.exe root -s 127.0.0.1:52027
./nox_adb.exe remount -s 127.0.0.1:52027
./nox_adb.exe -s 127.0.0.1:52027 shell
```
上の２つは、一応です。一応やってます。
このようになったと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/b2500d60-7c66-bc83-4c30-6a5585b86916.png)

この状態から以下のコマンドを打ちます。

```bash:zero埋めする
cd /data
dd if=/dev/zero of=./zero bs=4k
rm zero
```
※2番目のコマンドで５分くらいかかると思います。
ディスクサイズがいっぱいというエラーが出ることもありますがそれは正常です。
※3番目のコマンドを打つ前にNox上でデータ容量を確認すると以下のようにいっぱいになっている筈です。
rm zero したら容量は空きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/60b182d8-cc0e-b483-2bd2-81345c6a6758.png)


rm zeroして容量が空いているのを確認したらNoxをシャットダウンします。
すると、shellからも自動的にログアウトします。

いよいよvdiskmanagerの出番です。
以下のコマンドを打ちます。

```bash:可変ディスクの圧縮
./vmware-vdiskmanager.exe -k BignoxVMS/Nox_3/Nox_3-disk2.vmdk
```
※ここのNox_3とかの「3」は前述した名称の横の数字にリンクしていますので適宜書き換えてください。
Noxのバージョンによってはvmdkの在り処が違ったり、
ご自分で別の場所にしているかもしれませんがその場合も適宜お願いします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/6248bfc7-dcc4-521d-21b2-f6f3d7148bb3.png)
プログレスが始まって、また５分程度かかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238561/b0e0f576-0074-0b6f-c86e-39ee13401757.png)

めっちゃ空きました。


#最後に
いかがでしたか。
当記事ではNoxPlayerのvmdkにスコープをあててお話しましたが、
これはどのvmdkに対しても通じる技術です。
（ディスクサイズが可変になっている必要があります。可変にしたり固定にしたりもできますがその話はまた今度）
例えばVMWareの製品であれば、わざわざexeを別途取得しなくても、製品に元々組み込まれていたりします。ESXiとか
。
今回５年振りくらいにVMWare社の製品（今回はツール）を触りました。


大事なのはzero埋めして削除して、vmdkmanagerに「いらない領域」と判断してもらうことです。

ちなみにこの記事はNoxの64Bit版に乗り換えるときにマシンのサイズがでかくてイライラして書くことになりました。

それでは、快適なゲームライフを。