ドライブの識別と位置特定について、ファイルがLinuxファイルシステム内でどのように機能するかを正確に理解できるようにしていこう。
WindowsからLinuxへ移行した人は、Linuxがドライブやパーティションを扱う仕組みには少し戸惑うかもしれない。まず、Cドライブ、Dドライブといったドライブ文字は使用されない。代わりに /dev/sda のようなデバイスへのパス参照が多数表示される。
混乱するかもしれないが、Linuxのこの扱い方はWindowsと同程度か、場合によってはそれ以上に論理的である。以下では、専門用語を解説し、ドライブがLinuxファイルシステム内でどのように機能するかを明らかにする。
ドライブを確認してみる
まずドライブ管理用のツールを開く。ツール名はOSやディストリビューションによって異なるが、一般的には「ディスクユーティリティ」や「パーティションマネージャー」などと呼ばれているものだ。Linuxなら fdisk -l というコマンドでもいい。
# fdisk -l
/dev/sda1、/dev/nvme0n1p1などと書いてあるのがわかる。
接続されているすべてのドライブが表示される。各ドライブには、/dev/ から始まるフォルダパスが割り当てられている。
それらは /dev/ から始まるフォルダパスと関連づけられている。これはLinuxファイルシステムのルート上に「dev」フォルダが置かれ、そこにシステム内の各ハードウェアコンポーネントを識別する特別なファイルが含まれているためである。
各ドライブには、sdx というファイル名が割り当てられている。ここで、「x 」はドライブ固有の文字だ。例えば、最初のドライブは /dev/sda となる。sd 部分はストレージデバイスであることを、最後の文字はそのドライブを示しています。
複数のハードディスクが接続されている場合、2つ目のドライブは /dev/sdb、3つ目が /dev/sdc のように識別されます。NVMe SSDを使用しているなら、/dev/nvme0n1p1などと表示される。
/dev/sda は
/dev : Linuxシステムのデバイスファイルが配置されるディレクトリ
sd : SATA/SCSIインターフェースのストレージデバイスを表すプレフィックス
a : ストレージデバイスの識別文字。aは最初に認識されたデバイスを意味する。
/dev/sdaはこのLinuxシステムに接続されている一番最初に認識されたSATA/SCSIインターフェースのハードディスクドライブを指している。SATA接続されたSSDがこのように表示される。/dev/sda 経由でこのハードディスクドライブにアクセスし、パーティションとして使用したりできる。
/dev/nvme0n1p1 は
/dev : Linuxシステムのデバイスファイルが配置されるディレクトリ
nvme0n1 : NVMe SSDを表すデバイス名の一部
nvme : SSDがNVMeインターフェースを使用していることを示す
「0」複数のNVMeデバイスがある場合の識別番号
「n1」このNVMeコントローラーに接続された1つ目のデバイス
「p1」1つ目のパーティションを表す。2つ目ならp2、3つ目ならp3のようになる
つまり、/dev/nvme0n1p1は、このコンピューターに接続されているNVMeインターフェースのSSDの、1つ目のパーティションを指すデバイスファイルということになる。このSSDをUSBで接続すると /dev/sdx と表示される。
Linuxは各デバイスの登録方法において比較的一貫性がある。例えば nvme0n1やsda は常にOSがインストールされているドライブに割り当てられ、以後、他の内部ハードドライブ、外部ドライブの順に登録されていく。外部ドライブには、ハードドライブとフラッシュストレージの両方が含まれる。
パーティション
以上で、/dev/sda や/dev/nvme0n1などとの記載からドライブを判別できるようになった。しかし、多くのドライブはパーティションを含んでいる。gpartedなどで /dev/sda を選択すると、ディスク内容を示すバーグラフに最低2つのパーティションが表示されていたりする。
これはハードドライブの内部が分割されていることを意味する。単一のハードディスクを複数のパーティションあるいはボリュームに分割することをパーティション分割という。
Windowsからの移行ならば、プログラム、データ、Windows自体をすべて単一ボリュームに保存することに慣れ親しんでいるはずだろう。実際には、Windowsにも最低3つのパーティションが存在している。1つは復元用の隠しパーティション、もう1つはブートパーティションである。
WindowsはボリュームをCドライブ、Dドライブなどとドライブ文字で識別しているが、Linuxは異なるアプローチを採用し、各ボリュームをドライブIDと一意の番号の組み合わせで識別している。
sda1 は最初のドライブの最初のパーティションであり、sdb3 は2番目のドライブの3番目のパーティションを指す。nvme0n1p1は、nvme0n1ドライブの最初のパーティションで、nvme0n1p2は2番目のパーティション、nvme0n1p3は3番目のパーティションとの意味になる。
この番号付けは表面的には完全に論理的な意味を持つが、直感的にわかりにくい。
ドライブはあるスキームに基づいてパーティション分割される。その2つのスキームとは、GPT(GUIDパーティション)とMBR(マスターブートレコード)である。GPTが現在の主流なのでこちらを理解しておこう。
GPTは最近の新しいドライブで採用され、パーティション数に制限がない。ドライブは作成または認識された順に番号が割り当てられる。通常は左から右へ順番に割り当てられるが、必ずしもそうとは限らない。
MBRは古いドライブで採用されており、1ドライブあたり最大4つのパーティションしかサポートしない。しかし、拡張パーティションを使うことで、この制限を回避できる。MBRでは、物理パーティションには sdx1 から sdx4 まで、論理ボリュームには sdx5 以降の番号が割り当てられる。
最近のLinuxディストリビューションでディスクの内容を完全消去し、パーティションを自動作成するインストールを行うと、2つから3つのパーティションが以下の通り作成される。
/boot パーティション
起動に必要なブートローダーやカーネルイメージが格納される小容量のパーティション。
ルートパーティション(/)
メインのシステムファイルが格納されるパーティション。
スワップパーティション
仮想メモリ領域として機能するスワップスペースがここに確保される。
特に理由がなければ、この設定で十分である。ディストリビューションによって構成が異なったりする。
特定のドライブにアクセス
Windowsはドライブ文字を割り当てることで、ボリュームやドライブへのアクセスを直感的かつ容易にしている。一方のLinuxはドライブをファイルシステムの一部として取り込み、特定のフォルダにマウントすることでアクセスする。
Windowsでは、Cドライブ、Dドライブといったドライブ文字を割り当てることで、ユーザーは各ドライブに簡単にアクセスできるようになっている。このシステムは初心者にとってわかりやすく、使いやすい方法だ。
一見すると、/devフォルダ内のファイル(sda、sda1など)を通じてドライブにアクセスできるようにも思える。しかし、これらのファイルは直接のリンクやショートカットではないため、この方法は機能しない。
Linuxでドライブにアクセスするには、まずマウントする必要がある。マウントとは、ボリュームを特定のフォルダに接続する操作のことである。物理的に接続していても、マウントしなければ通信ができない。マウントが完了すると、そのフォルダに移動して、ボリューム内のファイルやフォルダにアクセスできるようになる。
起動後の流れ
Linuxが起動すると、まずメインのシステムパーティションがファイルシステムのルート(/)にマウントされる。スワップファイルパーティションはマウントされないが、その他の重要なフォルダは個別のボリュームに保存できる。例えば、全ユーザーデータと設定が含まれる/homeフォルダなどである。
デスクトップ環境が起動した時点でマウントされるのはこれらの最低限のドライブのみだ。Ubuntuなどでは、実行中に接続したUSBドライブは自動的にマウントされが、Nautilusのナビゲーションペインには、その他の検出済みボリュームへのショートカットが表示される。これらのボリュームを実際にマウントするには、ユーザーによるクリック操作が必要となる。
デスクトップ環境のナビゲーションペインには、検出されたボリュームへのショートカットが表示される。これは、USBドライブなどの外部ストレージデバイスにアクセスする際に便利だ。しかし、これらのショートカットでは、ドライブの物理的なマウント場所がわかりにくい。複数のドライブを接続しているとこれで混乱しやすい。
Ubuntuは一貫した場所を選択する仕様になっている。ファイルシステムを開き、Computerのショートカットからドライブのルートを表示する。すると、mediaフォルダがあり、その中にユーザー名に基づくフォルダ、さらに対応するドライブを指すフォルダが置かれていることが確認できる。
この情報があれば、ターミナルのcdコマンドを使って簡単にドライブに移動できる。例えばcd /media/nick/Dataのように指定する。この流れでフォルダの物理的な場所を正確に把握しながらドライブにアクセス可能である。
正確な管理のために
この理解は、たとえばGpartedでドライブを再パーティションしたり、ddユーティリティでパーティションのバックアップを行ったりするときに有用である。パーティションがファイルシステムのどこに存在するかを理解していれば、高度な管理作業を正確に行える。Linuxのこのボリューム管理は、システムへの理解を深める上で重要だ。