Linux で新しいディスクをマウントする
サーバーに新しいハードディスクを追加して接続したのに、システム上では使える容量が見えない——初めてストレージを増設するときによく遭遇する場面です。ディスクが「マザーボードにつながる」から「ファイルを保存できる」までの間には、認識・パーティション作成・フォーマット・マウントという 4 つのステップがあります。このノートでは全体の流れを一通りたどりながら、各ステップが何をしているのかを説明します。
背景:ディスクを接続しただけでは使えない理由
Linux では「すべてはファイル」であり、ディスクも例外ではありません。新しいディスクを接続すると、カーネルはそれを /dev/sdb や /dev/vdb のようなブロックデバイスとして認識しますが、この時点ではまだ「生のディスク」にすぎません。
- パーティションテーブルがなく、システムは領域をどう区切るか分からない;
- ファイルシステムがなく、カーネルはデータをどんな構造で編成するか分からない;
- マウントポイントがなく、ユーザー空間のプログラムはパス経由でアクセスできない。
したがって完全な流れは、認識 → パーティション作成 → フォーマット → マウント、最後に起動時の自動マウント設定、となります。どのステップも省略できません。
実際の手順
1) ディスクをマザーボードに接続する(重要)
物理マシンなら SATA ケーブルと電源ケーブルをしっかり接続します。クラウドサーバーなら、コンソールでクラウドディスクをインスタンスにアタッチします。当たり前に見えるステップですが、「システムがディスクを認識しない」問題を調査すると、ハードウェアの接続不良が実際に最も多い原因です。
2) システムを再起動する
reboot
古めのシステムや、ホットプラグが効かない場合は、一度再起動してカーネルにハードウェアを再スキャンさせるのが一番手っ取り早い方法です。ホットプラグ対応の環境なら再起動なしでも認識されますが、再起動は最も確実なフォールバックです。
3) ディスクが検出されているか確認する
fdisk -l
fdisk -l はすべてのブロックデバイスとそのパーティションを一覧表示します。新しいディスクの典型的な特徴は、容量はあるのにパーティションがない(下に /dev/sdb1 のようなエントリがない)ことです。このデバイス名をメモしておいてください。以降のステップすべてで使います。lsblk で照らし合わせて確認するのもよいでしょう。ディスクとパーティションの関係をツリー表示してくれるので、より直感的です。
4) ディスクに入ってパーティション作成を始める
fdisk /dev/{ディスク名}
{ディスク名} は前のステップで確認したデバイス名、たとえば sdb に置き換えます。fdisk は対話型ツールで、中に入ってからよく使うコマンドは次のとおりです。
n:パーティションの新規作成p:現在のパーティションテーブルの表示d:パーティションの削除w:変更をディスクに書き込んで終了q:保存せずに終了
5) パーティションを設定する(1 つだけでもよい)
ディスク全体をデータ保存用に使うなら、n でプライマリパーティションを 1 つ新規作成し、開始・終了セクタはすべて Enter でデフォルト値を採用して、ディスク全体を 1 つのパーティションにすれば十分です。その後 w で保存して終了します。複数パーティションに分けることは今日のユースケースではあまり意味がなく、むしろ管理コストが増えます。
一つ注意点:従来の MBR パーティションテーブルは最大 2TB までしかサポートしていません。2TB を超えるディスクには GPT パーティションテーブルを使う必要があり、その場合は parted や gdisk でパーティションを作成してください。
6) パーティションをフォーマットする
mkfs.ext4 /dev/{パーティション名}
ここで操作する対象はディスク全体ではなくパーティション(たとえば /dev/sdb1)であることに注意してください。mkfs.ext4 はパーティション上に ext4 ファイルシステムを作成し、スーパーブロックや inode テーブルなどのメタデータ構造を書き込みます。ext4 は現在の Linux ディストリビューションで最も汎用的な選択肢です。ディストリビューションのデフォルトが XFS の場合(CentOS 系など)は、mkfs.xfs に置き換えても同じです。
フォーマットするとパーティション上のすべてのデータが消去されます。実行前にデバイス名を打ち間違えていないか必ず確認してください。
7) パーティションをマウントする
mount /dev/{パーティション名} /{任意のディレクトリ}
マウントポイントはただの普通のディレクトリです。存在しなければ先に mkdir で作成します(例:mkdir /data)。マウント後、/data に書き込んだファイルは実際には新しいディスクに保存されます。df -h で検証でき、パーティション・容量・マウントポイントの対応関係が確認できます。
マウントポイントのディレクトリにもともとファイルがあった場合、マウント後は「覆い隠されて」見えなくなり、アンマウント(umount)すると元に戻ります。データが消えたわけではありませんが混乱のもとになるので、マウントポイントには空のディレクトリを使うことをおすすめします。
8) 起動時の自動マウントを設定する
mount コマンドの効果は今回の起動中のみ有効で、再起動するとマウントは消えてしまいます。永続化するには /etc/fstab を編集します。
vim /etc/fstab
ファイルの末尾に 1 行追加します。
/dev/(ディスクパーティション) /(マウントディレクトリ) ext4(ファイル形式)defaults 0 0
この設定行は 6 つのフィールドからなり、順に次のとおりです。
- デバイス:マウントするパーティション。例
/dev/sdb1; - マウントポイント:ディレクトリパス。例
/data; - ファイルシステムタイプ:フォーマット時と一致させます。ここでは
ext4; - マウントオプション:
defaultsは読み書き可・実行許可などのデフォルトオプション一式を意味します; - dump バックアップフラグ:
0は dump ツールでバックアップしないことを意味します; - fsck チェック順序:
0は起動時にファイルシステムチェックを行わないことを意味します。ルートパーティションは通常1、データディスクは2または0に設定します。
/etc/fstab の記述を誤ると、システムが起動に失敗して緊急モードに入ることがあります。保存後はまず mount -a で検証してください。fstab に従って未マウントのエントリをすべてマウントしてくれるので、エラーが出ないことを確認してから再起動しましょう。
ハマりどころと注意点
- デバイス名より UUID を使う方が安定します。
/dev/sdbのような名前はカーネルの認識順に依存し、ディスクの増減で変わる可能性があり、fstab が別のディスクをマウントしてしまう原因になります。blkidでパーティションの UUID を調べ、fstab の第 1 フィールドをUUID=xxxxの形式で書けば、デバイス名の変動に影響されません。 - フォーマット前にデバイス名を確認する。
mkfsの対象を打ち間違えると取り返しがつきません。操作前にlsblkやfdisk -lでもう一度確認し、容量が想定どおりであることを確かめてください。 - ディスクとパーティションを区別する。 パーティション作成・フォーマット・マウントはそれぞれ操作対象が異なります。
fdiskはディスク全体(/dev/sdb)を、mkfsとmountはパーティション(/dev/sdb1)を対象とします。これらを混同するのが初心者の最もよくあるエラーの原因です。
まとめ
新しいディスクをマウントする流れの本筋は 4 ステップです。fdisk -l で認識を確認し、fdisk でパーティションを作成し、mkfs.ext4 でフォーマットし、mount でマウントする。最後に /etc/fstab に書いて、設定が再起動後も有効になるようにします。「生のディスク → パーティション → ファイルシステム → マウントポイント」というつながりを理解しておけば、今後ストレージ増設やディスク交換などの作業に出会っても、この流れに沿って一つずつ確認していけば十分です。
COMMENTS