ブログの更新が手間で、相当開いてしまいました。 これからはちょこちょこ更新できるようにしたいものです。

最近 FPGA を触ろうと思って、Xilinxのツールを入れようとしています。
普段は Windows 使いなので最初は Windows 版の Vitis/Vivado をインストールしていたのですが、風のうわさで Linux 版でないとやりたい作業ができないという話を聞き、Linux 上で Xilinx のツールを使いたいなと思い立ちました。

知り合いは Xilinx ツール用に Ubuntu をデュアルブートしたり仮想マシンを立てたりしてるようですが、あまりそういう面倒なことはしたくないので、 先人の事例 を参考に docker でドカドカしてみることにしました。

困った現象

先人の知恵を参考に Dockerfile を書いてビルドを走らせるのですが、Xilinxのインストーラーがコケてしまいました。

ERROR - There is not enough disk space on /tools/Xilinx to install.

ディスクの容量不足ということで、Cドライブの余計なファイルを消したりして 400GB 以上の空き容量を作って再度挑戦。
しかし、ディスクの空き容量は増えたにもかかわらず Xilinx のインストーラーは再度容量不足で失敗。
dfコマンドで見てみると、空き容量は増えてないようでした。

対処方法

WSL上で見えるデータの実体は仮想ハードディスク内に記録されていて、この仮想ハードディスクファイルのサイズを拡張することが必要とのことです。
具体的な方法は Microsoft の公式に書かれているので、そちらを参考にやっていきます。

実際の作業手順を以下に示します。

  1. Windows のコマンドプロンプトを開いて
    1. WSLを止める: wsl --shutdown
    2. diskpart コマンドを実行
  2. diskpart の窓が開くので、次のコマンドを実行
    1. dockerが使っている仮想ハードディスクを選択する (注: 公式に書かれている Ubuntu の仮想ハードディスクとは別のファイルであることに注意)
    DISKPART> select vdisk file="C:\Users\xxxx\AppData\Local\Docker\wsl\data\ext4.vhdx"
    
    1. 現在の仮想ディスクのサイズを確認する。
    DISKPART> detail vdisk
    
    デバイスの種類 ID: 0 (不明)
    ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
    状態: 追加済み
    仮想サイズ:  256 GB
    物理サイズ:  136 MB
    ファイル名: C:\Users\xxxx\AppData\Local\Docker\wsl\distro\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 見つかりません。
    
    1. 仮想ディスクの容量を拡大する
    DISKPART> expand vdisk maximum=512000
    
    1. 拡大後のディスクサイズを確認する。
    DISKPART> detail vdisk
    
    デバイスの種類 ID: 0 (不明)
    ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
    状態: 追加済み
    仮想サイズ:  500 GB
    物理サイズ:  109 MB
    ファイル名: C:\Users\xxxx\AppData\Local\Docker\wsl\distro\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 見つかりません。
    
  3. Docker Desktop を再起動する
  4. WSLの窓を開いて、次のコマンドを実行
    1. ディスクのサイズが変わったことを認識させる
    $ sudo mount -t devtmpfs none /dev
    $ mount | grep ext4
    /dev/sdd on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    /dev/sde on /mnt/wsl/docker-desktop-data/isocache type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    /dev/sde on /mnt/wsl/docker-desktop-data/version-pack-data type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    /dev/sdc on /mnt/wsl/docker-desktop/docker-desktop-user-distro type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    
    1. ファイルシステムのサイズを拡大する
    $ sudo resize2fs /dev/sde
    

以上の手順を踏むことで、ディスクのサイズを拡張できました。
本当にコンテナの中からディスクサイズが増えているかを確認します。

$ docker run --rm -it ubuntu:22.04
root@d8bef8e273db:/# df
Filesystem     1K-blocks     Used Available Use% Mounted on
overlay        515010816 27423880 463914680   6% /
tmpfs              65536        0     65536   0% /dev
tmpfs           16414924        0  16414924   0% /sys/fs/cgroup
shm                65536        0     65536   0% /dev/shm
/dev/sde       515010816 27423880 463914680   6% /etc/hosts
tmpfs           16414924        0  16414924   0% /proc/acpi
tmpfs           16414924        0  16414924   0% /sys/firmware

ということで、Docker コンテナの中から触れるディスクサイズを増やすことができました。
めでたしめでたし。