vmdkをdockerコンテナ内でマウントする

Ubuntu cloud imageの初期状態のディスク内容を見たかったので、vmdkを直接マウントすることにした。ホストにいろいろインストールするのは避けたいので、dockerコンテナ内でやることにした。guestmount コマンドを使う。ホストはUbuntu 18.04。

  1. Ubuntu cloud-imageダウンロード

    $ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.ova
    $ tar tvf focal-server-cloudimg-amd64.ova
    -rw-r--r-- root/root     10760 2021-05-03 17:59 ubuntu-focal-20.04-cloudimg.ovf
    -rw-r--r-- root/root       213 2021-05-03 17:59 ubuntu-focal-20.04-cloudimg.mf
    -rw-r--r-- root/root 539142656 2021-05-03 17:59 ubuntu-focal-20.04-cloudimg.vmdk
    $ tar xf focal-server-cloudimg-amd64.ova ubuntu-focal-20.04-cloudimg.vmdk
    
  2. コンテナ起動
    fuseが必要になるので、/dev/fuseをマウントすると共に、必要な権限を追加する(cap-add, security-opt) (ref)

    $ docker run -it --rm -v $(pwd)/ubuntu-focal-20.04-cloudimg.vmdk:/tmp/ubuntu-focal-20.04-cloudimg.vmdk \
      --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
      ubuntu:20.04 bash
    
  3. パッケージインストール
    ref

    # apt update && \
      DEBIAN_FRONTEND=noninteractive apt install \
        --no-install-recommends -y \
        libguestfs-tools qemu-utils linux-image-generic
    
  4. マウント
    guestmount は少し時間かかる。

    # guestmount -a /tmp/ubuntu-focal-20.04-cloudimg.vmdk -i --ro /mnt
    # ll /mnt
    total 88
    drwxr-xr-x 19 root root  4096 May  3 21:45 ./
    drwxr-xr-x  1 root root  4096 Jun 17 15:32 ../
    lrwxrwxrwx  1 root root     7 May  3 21:39 bin -> usr/bin/
    drwxr-xr-x  4 root root  4096 May  3 21:45 boot/
    drwxr-xr-x  5 root root  4096 May  3 21:42 dev/
    drwxr-xr-x 91 root root  4096 May  3 21:45 etc/
    drwxr-xr-x  2 root root  4096 Apr 15  2020 home/
    lrwxrwxrwx  1 root root     7 May  3 21:39 lib -> usr/lib/
    lrwxrwxrwx  1 root root     9 May  3 21:39 lib32 -> usr/lib32/
    lrwxrwxrwx  1 root root     9 May  3 21:39 lib64 -> usr/lib64/
    lrwxrwxrwx  1 root root    10 May  3 21:39 libx32 -> usr/libx32/
    drwx------  2 root root 16384 May  3 21:45 lost+found/
    drwxr-xr-x  2 root root  4096 May  3 21:39 media/
    drwxr-xr-x  2 root root  4096 May  3 21:39 mnt/
    drwxr-xr-x  2 root root  4096 May  3 21:39 opt/
    drwxr-xr-x  2 root root  4096 Apr 15  2020 proc/
    drwx------  2 root root  4096 May  3 21:42 root/
    drwxr-xr-x  3 root root  4096 May  3 21:42 run/
    lrwxrwxrwx  1 root root     8 May  3 21:39 sbin -> usr/sbin/
    drwxr-xr-x  6 root root  4096 May  3 21:42 snap/
    drwxr-xr-x  2 root root  4096 May  3 21:39 srv/
    drwxr-xr-x  2 root root  4096 Apr 15  2020 sys/
    drwxrwxrwt  2 root root  4096 May  3 21:42 tmp/
    drwxr-xr-x 15 root root  4096 May  3 21:41 usr/
    drwxr-xr-x 13 root root  4096 May  3 21:42 var/
    

見れた!