【Linux】勉強用に仮想HDDを追加してファイルシステムを作成してみる

Linuxの超初心者なので、LPICを勉強の中です。その中で、「ファイルシステム」が出てきます。覚えるばかりで頭に入らなさそうなので、「実際に環境を作って体験すればもう少し覚えやすいのでは!」と思ったのです。(結局覚えることにはなるのですが…)

でもとにかく簡単に扱えるファイルシステムを作ってしまえば、もう少し勉強の幅が広がるはず。これを見ている皆さんに少しでも手助けできたら幸いです。また以下の説明では、誤った操作をするとデータの欠損する可能性があるため、あくまでも勉強用に作成することを想定しています。

前提条件

まず前提条件は以下の通りです。調べれば準備できるものが多いので、頑張って準備してください。

  1. Windows10のPCを使用する
  2. VirtualBoxをインストールする
  3. VirtualBoxVMを作成し、「CentOS7」を入れる
  4. TeraTermをインストールし、3.で作成した環境に接続できるようにしておく

環境

VirtualBox:6.1.32
VMのOS:CentOS7

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

手順は以下の通りです。

  1. ストレージを追加する
  2. パーティションを追加する
  3. ファイルシステムを追加する

では1つずつ説明していきます。

1.ストレージを追加する

VirtualBoxを起動し、VMを起動する前に設定を開きます。

「ストレージ」を選択し、一覧の中から「コントローラー:SATA」>「ハードディスクを追加」をクリックします。

「ハードディスクの選択」から「作成」をクリックします。

「ハードディスクのファイルタイプ」では「VDI」を選択して、「次へ」をクリックします。

「物理ハードディスクにあるストレージ」で「可変サイズ」を選択し、「次へ」をクリックします。

「ファイルの場所とサイズ」では、パスは変更せずにサイズを変更します。ストレージは必要ないので、実際は1GBもなくてよいです。設定後、「作成」をクリックします。

これで作成完了です。そしたら、VMを起動しましょう。まずは「ハードディスクの選択」で「選択」をクリックします。

設定で「OK」をクリックします。

「起動」をクリックします。

2.パーティションを追加する

ここからは、起動したVMTeraTermで入り、コマンド操作を行います。以降の操作では、root権限が必要になるため、root権限でログインするようにしてください。

まず上記で追加されたハードディスクが何かを確認します。以下は例です。

[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0  3月 10 19:12 /dev/sda
brw-rw----. 1 root disk 8,  1  3月 10 19:12 /dev/sda1
brw-rw----. 1 root disk 8,  2  3月 10 19:12 /dev/sda2
brw-rw----. 1 root disk 8, 16  3月 10 19:12 /dev/sdb

上記の例では、「/dev/sda」のハードディスクが初期で使用されており、パーティションとして「/dev/sda1」と「/dev/sda2」が追加されています。よって、今回追加されたのは「/dev/sdb」です。fdiskコマンドを使用して、このハードディスクにパーティションを追加していきます。

[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x1098ecde.

コマンド (m でヘルプ): 

コマンドを使用すると対話モードになります。まず、「p」を入力し、Enterキーを押します。これで現在のパーティションの状況を知ることができます。まだ何も追加していないため、「デバイス ブート~」の下には何も出力されません。

コマンド (m でヘルプ): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x1098ecde

デバイス ブート      始点        終点     ブロック   Id  システム

次に「n」を入力し、Enterキーを押します。これでパーティションの追加を行います。パーティション番号やセクタについて入力の必要がありますが、初期値(default)に記載されている値でよいです。用語の意味は以下です。

用語意味
最初 sectorパーティションで使用する領域の最初の位置
Last sector使用する領域(キロ、メガ、ギガで指定可能)

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-2097151, 初期値 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, 初期値 2097151): 2097151
Partition 1 of type Linux and of size 1023 MiB is set

これで追加できたか、最後に「p」を入力し、Enterキーを押します。すると、「デバイス ブート~」の下に新しく行が追加されたことを確認できます。デバイスの下に出力される内容は「デバイスファイル名」です(下記では、「/dev/sdb1」)。これは以降の操作に使用するのでコピーしておいてください。

コマンド (m でヘルプ): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x1098ecde

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048     2097151     1047552   83  Linux

これで終わりではなく、最後に「w」を入力し、Enterキーを押します。これで今までの設定を保存できます。

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

3.ファイルシステムを追加する

ここまでは、ハードディスクでどの領域を使用するかを決めただけです。ここからはその領域をどのように使用するかを設定していきます。

mkfsコマンドを使用してファイルシステムの設定を行います。

 mkfs.<ファイルシステム名> <デバイスファイル名>

[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 261888 blocks
13094 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376

Allocating group tables: 0/8   done                            
Writing inode tables: 0/8   done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: 0/8   done

これで設定が完了しました。次にどのディレクトリでこのファイルシステムを使用するかを、mountコマンドを使用して指定します。

 mount <デバイスファイル名> <マウント先>

[root@localhost ~]# mount /dev/sdb1 /mnt

これでマウント先で今回追加したハードディスクにデータを入れることができますが、最後にちゃんと使用できるかを確認するために、dfコマンドを使用して確認します。

 df -h <デバイスファイル名>

[root@localhost ~]# df -h /dev/sdb1
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sdb1        991M  2.6M  922M    1% /mnt

サイズやマウント先が表示されれば、問題なく追加ができました。お疲れ様でした!

試しにコマンドを打ってみる

ext4ファイルシステムに関して、いくつかコマンドを打って内容を見てみたいと思います。出力内容が長くなることがあるので、一部は省略します。

ここでは、ext2/ext3/ext4ファイルシステムで使用できる、tune2fsコマンドとdumpe2fsコマンドを打ってみました。

[root@localhost ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e8fd542a-01ed-4ab6-9d4d-d927d6692e33
Filesystem magic number:  0xEF53
・・・
[root@localhost ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e8fd542a-01ed-4ab6-9d4d-d927d6692e33
Filesystem magic number:  0xEF53
・・・

おー本で出ていた内容が出力されている!

参考文献

本内容は以下を参考にさせていただきました。