仮想ディスクでパーティションの作成とマウント

今回は、ファイルを仮想ディスク(ブロックデバイス)化し、パーティションファイルシステムを作成する。(おまけでマウントまで行う)
OSはUbuntu16.04

準備

$ sudo -i
# mkdir /tmp/sample
# cd /tmp/sample



仮想ディスクを作成する

仮想ディスクとなるファイルdisk.imgを作成し、ddコマンドで1000MBまでファイルをゼロ埋め。

# touch disk.img
# dd if=/dev/zero of=disk.img bs=1M count=1000


先ほど作成したdisk.imgをループバックデバイスとして登録する。

# losetup /dev/loop0 disk.img


ループバックデバイスがブロックデバイスとして認識されているか確認。

# lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                     8:0    0 119.2G  0 disk 
├─sda1                  8:1    0   487M  0 part /boot
├─sda2                  8:2    0     1K  0 part 
└─sda5                  8:5    0 118.8G  0 part 
  ├─ubuntu--vg-root   252:0    0 114.9G  0 lvm  /
  └─ubuntu--vg-swap_1 252:1    0   3.9G  0 lvm  [SWAP]
loop0                   7:0    0  1000M  0 loop   ★認識されている



パーティションを作成する

先ほど作成したループバックデバイス(/dev/loop0)にディスクラベルを作成する。(今回はmsdos)
ディスクサイズが2TBを超える場合は、ディスクラベルにgptを設定する。

# parted -s -a optimal /dev/loop0 mklabel msdos


続いてパーティションを作成する。今回は基本パーティションを3つ作成。

# parted -s -a optimal /dev/loop0 mkpart primary 0% 30%
# parted -s -a optimal /dev/loop0 mkpart primary 30 60%
# parted -s -a optimal /dev/loop0 mkpart primary 60% 100%


パーティションが作成されているか確認する。

# parted /dev/loop0 p
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 1049MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos  ★ディスクラベルはmsdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  315MB   314MB   primary   ★0%-30%までの基本パーティション
 2    315MB   629MB   315MB   primary   ★30%-60%までの基本パーティション
 3    629MB   1049MB  419MB   primary   ★60%-100%までの基本パーティション


パーティションを作成すると、ループバックデバイスにもパーティションに対応するデバイスが自動的に生成される。

# ls -alF /dev/loop0p*
brw-rw---- 1 root disk 259,   0 10月  5 22:18 /dev/loop0p1
brw-rw---- 1 root disk 259,   1 10月  5 22:18 /dev/loop0p2
brw-rw---- 1 root disk 259,   2 10月  5 22:18 /dev/loop0p3



ファイルシステムを作成する。

ubuntu16.04のデフォルトのファイルシステムであるext4で各パーティションをフォーマットする。

# mkfs -t ext4 /dev/loop0p1
# mkfs -t ext4 /dev/loop0p2
# mkfs -t ext4 /dev/loop0p3


ファイルシステムができているか確認する。

# parted /dev/loop0 p
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 1049MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  315MB   314MB   primary  ext4  ★ext4で作成されている
 2    315MB   629MB   315MB   primary  ext4
 3    629MB   1049MB  419MB   primary  ext4



パーティションをマウント

マウント用のディレクトリを作成する。

# mkdir part{1,2,3}


パーティションを先ほど作成したディレクトリにマウントする。

# mount -t ext4 /dev/loop0p1 /tmp/sample/part1
# mount -t ext4 /dev/loop0p2 /tmp/sample/part2
# mount -t ext4 /dev/loop0p3 /tmp/sample/part3


マウントされているか確認する。

# df -Th
Filesystem                  Type      Size  Used Avail Use% Mounted on
udev                        devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                       tmpfs     385M  6.2M  379M   2% /run
/dev/mapper/ubuntu--vg-root ext4      113G   54G   54G  50% /
tmpfs                       tmpfs     1.9G  4.8M  1.9G   1% /dev/shm
tmpfs                       tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs                       tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1                   ext2      472M  200M  249M  45% /boot
cgmfs                       tmpfs     100K     0  100K   0% /run/cgmanager/fs
tmpfs                       tmpfs     385M   76K  385M   1% /run/user/1000
/dev/loop0p1                ext4      282M  2.1M  261M   1% /tmp/sample/part1   ★マウントされている
/dev/loop0p2                ext4      283M  2.1M  262M   1% /tmp/sample/part2
/dev/loop0p3                ext4      380M  2.3M  354M   1% /tmp/sample/part3


ということで、今回はこんなところで一通り終了。


後片付け

パーティションをアンマウントする。

# umount /tmp/sample/part1
# umount /tmp/sample/part2
# umount /tmp/sample/part3


ループバックデバイスを解除する。

# losetup -d /dev/loop0

確認

# losetup -l
★何も表示されなければうまく解除出来ている