linuxでVHDなどの仮想ディスクファイルをマウントする方法
linuxではraw形式の仮想ディスクミラーファイルを直接マウントできます。
たとえば、ここでddコマンドでファイルを作成し、ext 4フォーマット(パーティションが1つしかない)にフォーマットしてから/mntディレクトリにマウントします。
下のraw.imgディスクミラーファイルはパーティション化されているため、offset=を使用してオフセットを指定しません。複数のパーティションがある場合は、オフセットを指定してマウントできます。具体的にはmountコマンドに関するパラメータ情報を参照できます。
> dd if=/dev/zero of=raw.img bs=1M count=512
512+0の読み込みが記録されています
512+0の書き出しが記録されています
536870912 bytes (537 MB, 512 MiB) copied, 0.207045 s, 2.6 GB/s
/home/o [o@o-pc] [10:29]
> mkfs.ext4 -q raw.img
/home/o [o@o-pc] [10:30]
> sudo mount -o loop raw.img /mnt
/home/o [o@o-pc] [10:30]
> df -h
linuxはVHDディスクミラーファイルのマウントを直接サポートできません。vmwareのvmware-mountなどのツールでマウントできます。vmwareはこのツールを直接提供していませんが、vmwareプレイヤーとvmware workstationで提供されています。しかし、ここではこのような方法を使うつもりはありません。
ここではqemu-nbdを使用してディスクミラーファイルをマウントします。
a)qemuのインストール
まずqemu-kvmをインストールします。ここではFedora 25を使用しています。インストールコマンドは以下の通りです。
sudo dnf install qemu-kvm
debian/ubuntuなどを使用している場合は、sudo apt-get install qemu-kvmを使用してインストールできます。
Archlinuxはsudo pacman-S qemuを使用してインストールできます。
b)nbd駆動のロード
NBD(Network Block Device)は、ネットワークブロックデバイスの略である。このモジュールは、リモートホストのディスク領域(nfsのマウントとは異なる)を、ローカルブロックデバイスとして使用することができる。
NBDはカーネルモジュールで、ほとんどのLinuxリリース版に含まれています。ここではインストールする必要はありません。
modprobeを使用してnbd駆動をロード
/media/o/data [o@o-pc] [11:04]
> sudo modprobe nbd max_part=8
ロードが完了したらmodinfoコマンドを使用してモジュール情報を表示できます
/media/o/data [o@o-pc] [11:05]
> modinfo nbd
filename: /lib/modules/4.9.6-200.fc25.x86_64/kernel/drivers/block/nbd.ko.xz
license: GPL
description: Network Block Device
depends:
intree: Y
vermagic: 4.9.6-200.fc25.x86_64 SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
parm: nbds_max:number of network block devices to initialize (default: 16) (int)
parm: max_part:number of partitions per device (default: 0) (int)
上記の情報は、初期化ネットワークブロックデバイスの数が16であり、/dev/で16個のnbdデバイスが作成されることを示す。
/media/o/data [o@o-pc] [11:05]
> ls /dev/nbd*
/dev/nbd0 /dev/nbd0p1 /dev/nbd1 /dev/nbd10 /dev/nbd11 /dev/nbd12 /dev/nbd13 /dev/nbd14 /dev/nbd15 /dev/nbd2 /dev/nbd3 /dev/nbd4 /dev/nbd5 /dev/nbd6 /dev/nbd7 /dev/nbd8 /dev/nbd9
c)vhdxファイルをnbdデバイスに接続する
ここではqemu-nbdを使用して接続を行います(-cパラメータを使用して接続し、-dパラメータを使用して接続を切断します)
/media/o/data [o@o-pc] [11:05]
> sudo qemu-nbd -c /dev/nbd0 VS2017RC-offline.vhdx
接続した後、fdiskを使用してデバイス情報を確認します。
/media/o/data [o@o-pc] [11:05]
> sudo fdisk -l /dev/nbd0
Disk/dev/nbd 0:100 GiB,107374182400バイト,209715200セクタ
ユニット:セクタ/1*512=512バイト
セクタサイズ(論理/物理):512バイト/512バイト
I/Oサイズ(最小/最適):512バイト/512バイト
ディスクラベルタイプ:dos
ディスク識別子:0 xa 373 e 501
実際、ディスクには1つのパーティションしかありません。パーティション形式はexFATで、ディスクサイズは動的に増加します。
d)パーティションのマウント
直接mountコマンドを使用してnbd 0 p 1をマウントすればよい
/media/o/data [o@o-pc] [11:36]
> sudo mount -t exfat -o rw /dev/nbd0p1 /mnt
[sudo]oのパスワード:
FUSE exfat 1.0.1
/media/o/data [o@o-pc] [12:05]
> ls /mnt/
'$RECYCLE.BIN''System Volume Information'vs 2017 rcインストール説明.txt
インストールexFATサポート
パーティションはexFAT形式なので、直接マウントすることはできません。
まずfuse-exfatとexfat-utilsをインストールします。
具体的なインストール手順について簡単に説明します。
まずrpmソースパッケージを2つダウンロードします。
wget http://download1.rpmfusion.org/free/el/updates/6/SRPMS/exfat-utils-1.0.1-2.el6.src.rpm
wget http://download1.rpmfusion.org/free/el/updates/6/SRPMS/exfat-utils-1.0.1-2.el6.src.rpm
次にfuse-develとrpmbuildをインストールし、srcを解凍する.rpmパック。
sudo dnf install fuse-devel rpmbuild
sudo dnf install scons#exfat-utilsの構築に必要
rpm -ivh exfat-utils-1.0.1-2.el6.src.rpm exfat-utils-1.0.1-2.el6.src.rpm
解凍が完了すると、現在のユーザーのホームディレクトリの下にrpmbuildディレクトリが表示され、そのディレクトリの下のSPECSディレクトリに入ります。
rpmbuildを使用してrpmパケットを構築します。
rpmbuild -ba exfat-utils.spec
rpmbuild -ba fuse-exfat.spec
構築が完了したらrpmbuild/RPMS/x 86_へ64ディレクトリ(ここでx 86_64はあなたのシステムフレームワークに関係しています)に、生成されたrpmパッケージをインストールします。
/home/o/rpmbuild/RPMS/x86_64 [o@o-pc] [12:04]
> sudo rpm -ivh exfat-utils-1.0.1-2.fc25.x86_64.rpm fuse-exfat-1.0.1-1.fc25.x86_64.rpm
準備中... ################################# [100%]
アップグレード/インストール中...
1:fuse-exfat-1.0.1-1.fc25 ################################# [ 50%]
2:exfat-utils-1.0.1-2.fc25 ################################# [100%]
ubuntuではaptを直接使用してsudo apt install exfat-utils exfat-fuseをインストールできます
3、その他の仮想ディスクファイルのマウント
その他は、上記のVHDマウントと同様に、サポートされているディスクイメージフォーマットであることを前提としています。