ストレージデバイスの設定

LinuxBeginner
オンラインで実践に進む

はじめに

Linuxにおけるストレージデバイスの設定に関する実験へようこそ。ストレージの管理は、Linuxシステム管理者にとって不可欠なスキルです。新しいハードドライブやソリッドステートドライブ(SSD)をシステムに追加しても、すぐには使用できません。まずはファイルシステムを作成して準備を整え、ディレクトリツリーに接続してアクセス可能にする必要があります。

この実験では、新しいストレージデバイスを追加する一連のライフサイクルを体験します。具体的には以下の手順を学びます。

  • 新しく接続されたディスクの識別
  • ディスク上への標準的なLinuxファイルシステム(ext4)の作成
  • ディスクをディレクトリにマウントしてアクセス可能にする方法
  • 使用状況の確認とデータの書き込み
  • ディスクの安全なアンマウントと取り外し

ここでは lsblkmkfs.ext4mountdfumount といったコマンドを使用します。この実験を終える頃には、Linux環境における基本的なストレージ管理について確かな理解が得られているはずです。

仮想ディスクの接続

この実験環境では、自動セットアッププロセスを通じて仮想ディスクが作成されています。これは、システムに新しいストレージデバイスを追加するシミュレーションです。セットアップスクリプトは100MBの仮想ディスクファイルを作成し、それをループデバイスに関連付けた後、一貫性を保つためにシンボリックリンク /dev/sdb を作成します。

最初のタスクは、オペレーティングシステムがこの新しいディスクを認識しているかを確認することです。これには lsblk(ブロックデバイス一覧表示)コマンドが最適です。このコマンドは、利用可能なすべてのブロックデバイスの情報をツリー形式で表示します。

ターミナルで以下のコマンドを実行し、ブロックデバイスを一覧表示してください。

lsblk

以下のような出力が表示されるはずです。マウントされておらず、マウントポイントがリストされていない100MBのループデバイス(loop4loop14 など、利用可能なループデバイス番号が表示されます)を探してください。

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

これでディスクがシステムに認識され、次のステップであるフォーマットの準備が整いました。

もしループデバイスが表示されない場合は、以下のコマンドを実行して作成してください。

## 仮想ディスクとして機能する100MBのファイルを作成
dd if=/dev/zero of=/tmp/disk.img bs=1M count=100 &> /dev/null
## 次に利用可能なループデバイスを検索
LOOP_DEVICE=$(sudo losetup -f)
## ファイルをループデバイスに関連付け、物理ディスクをシミュレート
sudo losetup $LOOP_DEVICE /tmp/disk.img
## 実験の一貫性のためにシンボリックリンクを作成
sudo ln -sf $LOOP_DEVICE /dev/sdb

その後、再度 lsblk コマンドを実行して、ループデバイスが作成されたことを確認してください。

mkfs.ext4 /dev/sdb コマンドによるディスクのフォーマット

このステップでは、新しいディスクをフォーマットします。フォーマットされていないディスクは白紙の状態であり、オペレーティングシステムはそこにファイルを保存する方法を知りません。フォーマット(ファイルシステムの作成とも呼ばれます)を行うと、ディスク上にファイルを整理・保存するためのデータ構造が書き込まれます。

ここでは、Linuxシステムで信頼性が高く広く使用されている標準的な ext4 ファイルシステムを使用します。ext4 ファイルシステムを作成するコマンドは mkfs.ext4 です。

警告: このコマンドは破壊的な操作です。指定したデバイス上のすべてのデータが消去されます。実行前に必ずデバイス名を確認してください。

それでは、/dev/sdb ディスクをフォーマットします。これはデバイスを変更する特権操作であるため、sudo を使用する必要があります。

sudo mkfs.ext4 /dev/sdb

コマンドを実行すると、inodeの数やブロック数など、作成中のファイルシステムに関する情報が出力されます。出力は以下のようになります。

mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 25600 4k blocks and 25600 inodes

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

これでディスク /dev/sdbext4 ファイルシステムでフォーマットされ、マウントの準備が整いました。

/mnt/data ディレクトリへのディスクのマウント

このステップでは、フォーマットされたディスクをファイルシステムからアクセスできるようにします。このプロセスを「マウント」と呼びます。マウントとは、デバイス上のファイルシステムを「マウントポイント」と呼ばれる特定のディレクトリに接続することです。マウントが完了すると、そのマウントポイントディレクトリにアクセスすることで、デバイスの読み書きが可能になります。

まず、マウントポイントとして機能するディレクトリを作成する必要があります。一時的なマウントには /mnt 内のサブディレクトリを使用するのが一般的です。/mnt/data というディレクトリを作成しましょう。

sudo mkdir /mnt/data

次に、mount コマンドを使用して、/dev/sdb デバイスを /mnt/data ディレクトリに接続します。構文は sudo mount [デバイス] [マウントポイント] です。

sudo mount /dev/sdb /mnt/data

成功すれば、コマンドは何も出力せずに終了します。ディスクがマウントされたことを確認するには、再度 lsblk コマンドを使用します。

lsblk

以下の出力で、ループデバイス(/dev/sdb が指しているもの)の MOUNTPOINT/mnt/data が表示されていることに注目してください。

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop /mnt/data
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

これでディスクを使用する準備が整いました。

df -h コマンドによるディスク使用量の確認

このステップでは、マウントされたディスクが使用可能であることを確認し、空き容量をチェックします。df (disk free) コマンドは、ファイルシステムのディスク使用量を報告するために使用されます。-h (--human-readable) フラグを使用すると、サイズが1024の累乗(K、M、Gなど)で表示され、読みやすくなります。

df -h コマンドを実行して、新しくマウントしたものを含むすべてのファイルシステムを表示します。

df -h

出力の中で /dev/sdb に対応する行を探してください。合計サイズ、使用済み容量、空き容量、マウントポイントが表示されます。

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sdb         98M  2.5M   89M   3% /mnt/data
...

ディスクがマウントされたので、/mnt/data ディレクトリは新しいディスクのルートとして機能します。動作確認のためにファイルを書き込んでみましょう。マウントポイントは root が所有しているため、sudo を付けて tee コマンドを使用します。

echo "Hello LabEx" | sudo tee /mnt/data/test.txt

ディレクトリの内容をリスト表示して、ファイルが作成されたことを確認できます。

ls /mnt/data

出力に新しいファイルが表示されるはずです。

test.txt

これで、新しいストレージデバイスのフォーマット、マウント、およびデータ書き込みに成功しました。

ディスクのアンマウントと取り外し

最後のステップでは、ストレージデバイスを安全にアンマウントして取り外す方法を学びます。デバイスをシステムから取り外す前にファイルシステムをアンマウントすることは非常に重要です。これにより、保留中のすべてのデータがディスクに書き込まれ、データの損失や破損を防ぐことができます。

ファイルシステムをアンマウントするコマンドは umount です。デバイス名またはマウントポイントのいずれかを指定できます。ここではマウントポイントを使用します。

sudo umount /mnt/data

ディスクがアンマウントされたことを確認するために、もう一度 lsblk を実行します。ループデバイスに関連付けられたマウントポイントがなくなっていることがわかります。

lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

ファイルシステムがアンマウントされたので、仮想ディスクを「取り外す」ことができます。このシミュレーション環境では、ループデバイスの関連付けを解除することを意味します。/dev/sdb は実際のループデバイスへのシンボリックリンクであるため、正しく取り外すには実際のデバイスパスを解決する必要があります。

## シンボリックリンクを解決してループデバイスをデタッチ
sudo losetup -d $(readlink -f /dev/sdb)
## シンボリックリンクを削除
sudo rm /dev/sdb

最後に、作成したマウントポイントディレクトリを削除してクリーンアップします。

sudo rmdir /mnt/data

これで、ストレージデバイスの追加、使用、削除という一連のサイクルを完了しました。

まとめ

実験の完了、おめでとうございます!Linux環境で新しいストレージデバイスを構成するための基本的なワークフローを習得しました。

この実験では、以下の重要なスキルを練習しました。

  • lsblk コマンドを使用した 新しいブロックデバイスの識別
  • mkfs.ext4 を使用した 生のディスク上へのファイルシステムの作成
  • mkdir を使用した マウントポイントの作成
  • mount コマンドを使用した ファイルシステムのマウント
  • df -h を使用した ディスク使用量の確認
  • umount コマンドを使用した ファイルシステムの安全なアンマウント
  • losetup -d を使用した ループデバイスのデタッチ(ディスク取り外しのシミュレーション)

これらは、Linuxサーバーやワークステーションでストレージを管理するための基本的な操作です。この知識を応用して、実際のハードドライブ、SSD、USBドライブを管理できるようになります。今後は、論理ボリューム管理(LVM)、RAID、さまざまなファイルシステムタイプなど、より高度なストレージトピックについても学習を進めてみてください。