Tech Horse Club

技術ブログ×競馬予測

【Linux】ループバックデバイスを使って、ファイルシステムの仕様を検証する環境を用意する

業務でRHEL7を導入するにあたり、ext4やXFSの仕様を調査する機会があった為、仕様を検証する環境を構築する為、ループバックデバイスについて調べてみました。

ループバックデバイスとは?

OS上の一般的なファイルを、ブロック型デバイスとして扱う為の機能です。出来ることとしては、OS上に作成したファイル上にファイルシステムを作成し、指定したマウントポイントにマウントすることが出来ます。 パーティションを切ったりLVMを設定する必要がなく、様々なファイルシステムを使用することが出来るので、今回のようなファイルシステムの仕様調査には、もってこいの機能です。

手順

おおまかには、下記の流れで作業を行います。

  1. ファイルシステムを作成するファイル」を作成する
  2. 作成したファイルに対して、ファイルシステムを作成する。
  3. ファイルシステムを作成したファイルをマウントする。

…なんかわかり辛くなってしまいましたが、ようは、「イメージファイルの作成」→「フォーマット」→「マウント」を行います。 今回は、ext4とXFSの仕様調査の為、

  • ext4を作成するファイルをloop1
  • XFSを作成するファイルをloop2

として用意します。

イメージファイル作成

まず最初に、ddコマンドを用いてファイルを作成します。

$ dd if=/dev/zero of=loop1 bs=10M count=100
100+0 レコード入力
100+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 14.7332 秒、 71.2 MB/秒
$ dd if=/dev/zero of=loop2 bs=10M count=100
100+0 レコード入力
100+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 14.766 秒、 71.0 MB/
  • 「if=/dev/zero」では、入力ファイルとして、NULL文字を読み出すことの出来る「/dev/zero」を指定します。
  • 「of=loop1」「of=loop2」は出力ファイルを指定するオプションです。
  • 「bs=10M」「count=100」は、10Mのブロックサイズのブロックを100回コピーするという意味で、10M×100で1000Mのファイルが作成されます。これはダミーファイルを作成する時によく使われるコマンドなので、覚えておいて損はないでしょう。

ファイルシステム作成

mkfsコマンドを使って、ファイルシステムを作成します。

$ mkfs.ext4 loop1
mke2fs 1.42.9 (28-Dec-2013)
loop1 is not a block special device.
Proceed anyway? (y,n) y
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
・・・
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

$ mkfs.xfs loop2
meta-data=loop2                  isize=512    agcount=4, agsize=64000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=256000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウント

ファイルシステムが作成出来たので、マウントポイントを指定してマウントします。

# ext4のloop1を/mnt/ext4にマウント
$ sudo mkdir -p /mnt/ext4
$ sudo mount -o loop -t ext4 loop1 /mnt/ext4

# xfsのloop2を/mnt/xfsにマウント
$ sudo mkdir -p /mnt/xfs
$ sudo mount -o loop -t xfs loop2 /mnt/xfs

ファイルシステムタイプを確認出来る「-T」オプションをつけて、dfコマンドを実行してみます。

$ df -T | grep mnt
/dev/loop0              ext4          991512    2504  921424    1% /mnt/ext4
/dev/loop1              xfs          1020580   32944  987636    4% /mnt/xfs

無事にループバックデバイスを使ってマウント出来ていることがわかりますね。これでようやく、ファイルシステムの仕様の検証に入れそうです。めでたしめでたし。