Linux ディスクとディスク パーティションを理解するための記事

Linux ディスクとディスク パーティションを理解するための記事

序文

Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。これらのファイルをデバイス ファイルと呼びます。ハード ディスクに対応するデバイス ファイルは、一般にブロック デバイス ファイルと呼ばれます。

この記事では、Linux システムでディスク デバイスを表現する方法と、ディスク パーティションを作成する方法について説明します。

なぜ複数のパーティションが必要なのでしょうか?

データ損失の防止: システムにパーティションが 1 つしかない場合、このパーティションが破損すると、ユーザーはすべてのデータを失うことになります。

ディスク領域の使用効率を向上: 異なるブロック サイズでパーティションをフォーマットできます。1K のファイルが多数あり、ハード ディスク パーティションのブロック サイズが 4K の場合、保存されるファイルごとに 3K の領域が無駄になります。このとき、これらのファイル サイズの平均値を取ってブロック サイズを分割する必要があります。

データが限界まで急増してもシステムがハングアップすることはありません。ユーザー データとシステム データを分離することで、ユーザー データがハード ディスク全体を占有してシステムがハングアップすることを回避できます。

ディスクの分類

より一般的なディスク タイプには、サーバーで使用される SCSI ハード ドライブ、消費者市場で使用される SATA ハード ドライブ、そしてもちろん現在普及しているさまざまなソリッド ステート ドライブが含まれます。

SCSIハードディスク

SCSI ハードディスクは、SCSI インターフェイスを使用するハードディスクです。優れたパフォーマンスと高い安定性のため、サーバーで広く使用されています。同時に、非常に高価です。価格が高いため、通常の PC ではほとんど見かけません。 SCSI ハードディスクは、通常のハードディスク インターフェイスに似た 50 ピン インターフェイスを使用します (次の図はインターネットから取得したものです)。

SATAハードドライブ

SATA (シリアル ATA) ポートを備えたハードディスクは、シリアルポート ハードディスクとも呼ばれます。シリアル ATA はシリアル接続モードを採用しています。シリアル ATA バスは埋め込みクロック信号を使用し、より強力なエラー訂正能力を備えています。従来と比較すると、最大の違いは、データだけでなく転送命令もチェックできることです。エラーが見つかった場合は自動的に修正されるため、データ転送の信頼性が大幅に向上します。シリアル インターフェイスには、構造がシンプルでホットスワップをサポートしているという利点もあります (次の画像はインターネットから取得したものです)。

ソリッドステートドライブ

ソリッド ステート ディスクは、一般に SSD ハード ディスクと呼ばれ、制御ユニットとストレージ ユニット (FLASH チップ、DRAM チップ) で構成されるソリッド ステート電子ストレージ チップ アレイで作られたハード ディスクです。その主な特徴は、従来のハードディスクのような機械的な構造を持たず、非常に高速な読み取りおよび書き込み速度を備えていることです (次の画像はインターネットから引用したものです)。

Linux におけるディスクデバイスの表現

Linux システムにおけるディスク デバイス ファイルの命名規則は次のとおりです。

メジャーデバイス番号 + マイナーデバイス番号 + ディスクパーティション番号

現在一般的なディスクの場合、一般的に次のように表現されます。

sd[az]x

メジャーデバイス番号はデバイスのタイプを表します。メジャーデバイス番号が同じであれば、デバイスのタイプも同じであることを示します。現在の共通ディスクのメジャーデバイス番号は sd です。

マイナーデバイス番号は、同じ種類のデバイス間のシリアル番号を表し、「az」で表されます。たとえば、/dev/sda は最初のディスクを表し、/dev/sdb は 2 番目のディスクを表します。

x はディスクパーティション番号を表します。各ディスクには複数のパーティションが存在する場合があります。各パーティションについて、Linux は /dev/sdbx を使用してそれを表します。ここで、x は 2 番目のディスクの x 番目のパーティションを表します。

次の図に示すように:

システムには、/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd の 4 つのディスクがあります。 /dev/sda には /dev/sda1、/dev/sda2、/dev/sda5 の 3 つのパーティションが作成されますが、/dev/sdb には /dev/sdb1 という 1 つのパーティションのみが作成されます。 /dev/sdc と /dev/sdd はまだパーティション分割されていません (またはパーティションが 1 つしかなく、パーティション名がディスク名と同じです)。

ディスクのパーティション分割

ディスク パーティションを作成する目的はいくつか考えられます。

  • データセキュリティの向上(1 つのパーティションのデータ破損が他のパーティションのデータに影響しない)
  • 複数のオペレーティングシステムのインストールをサポート
  • 複数の小さなパーティションは、1つの大きなパーティションに比べてパフォーマンスが向上します。
  • データの整理の改善

ディスク パーティションは、プライマリ パーティション、拡張パーティション、および論理パーティションで構成されます。ディスク上のプライマリ パーティションの最大数は 4 です。拡張パーティションもプライマリ パーティションであり、拡張パーティションは最大 1 つしか作成できませんが、拡張パーティション上に複数の論理パーティションを作成できます。したがって、プライマリパーティション(拡張パーティションを含む)の範囲は 1 ~ 4 で、論理パーティションは 5 から始まります。論理パーティションについては、Linux では、プライマリ パーティションではなく拡張パーティション上に作成する必要があることが規定されています。

プライマリ パーティションは、オペレーティング システムの起動に使用されます。主にオペレーティング システムのスタートアップ プログラムまたはブート プログラムが格納されます。したがって、オペレーティング システムのブート プログラムはプライマリ パーティションに配置することをお勧めします。たとえば、Linux の /boot パーティションはプライマリ パーティションに配置するのが最適です。

拡張パーティションは、論理パーティションの「コンテナ」にすぎません。実際、データの保存にはプライマリ パーティションと論理パーティションのみが使用されるため、データはディスクの論理パーティションに保存できます。

fdisk コマンドを使用してディスク パーティション情報を表示できます。

$ sudo fdisk -l /dev/sda 

出力の最初の数行は、合計サイズ 80G、セクターの合計数、各セクターのサイズなど、ディスクに関する基本情報です。赤いボックスには、私たちが最も関心を持っているパーティション情報が含まれています。

  • 最初の列「デバイス」には、ディスク パーティションに対応するデバイス ファイル名が表示されます。
  • 2 番目の列「Boot」は、それがブート パーティションであるかどうかを示します。上の図では、/dev/sda1 がブート パーティションです。
  • 3 番目の列「開始」は、ディスク パーティションの開始位置を示します。
  • 4 番目の列「End」は、ディスク パーティションの終了位置を示します。
  • 5 番目の列「セクター」は、パーティションによって占有されているセクターの数を示します。
  • 6 番目の列「サイズ」にはパーティションのサイズが表示されます。
  • 7 列目と 8 列目には同じ内容が表示されます。それぞれ数値 ID とそのテキストの説明です。 Id 列には、ディスク パーティションに対応する ID が表示されます。パーティションに対応する ID 番号は、パーティションによって異なります。 Linux では、83 はプライマリ パーティションと論理パーティションを表し、5 は拡張パーティションを表し、8e は LVM パーティションを表し、82 はスワップ パーティションを表し、7 は NTFS パーティションを表します。

上の図の情報は、/dev/sda1 がプライマリ パーティションであり、ブート パーティションとして使用されていることを示しています。/dev/sda2 は、論理パーティション /dev/sda5 が 1 つだけある拡張パーティションであり、2 つのパーティションのサイズが同じであるという事実によって証明できます。

fdiskを使用してディスクをパーティション分割する

fdisk は、Linux システムの強力なディスク パーティション管理ツールです。ハード ディスクの使用状況を監視でき、ディスク パーティションの管理にも使用できます。この記事では、fdisk を使用して新しいディスク パーティションを作成する方法についてのみ説明します。

Linux システムに新しいディスクが追加され、システムの対応するデバイス名が /dev/sdd であるとします。ここで、fdisk コマンドを使用してディスクをパーティション分割します。

$ sudo fdisk /dev/sdd 

新しいパーティションを作成するには、コマンド n を入力します。

上記のプロンプトに従って、プライマリ パーティションを作成するために p を選択すると、パーティション番号を入力するように求められます。

プライマリ パーティションには 1 ~ 4 の番号が付けられており、ここでは 1 を入力しました。次にパーティションサイズを設定します。

パーティションのサイズは、パーティションの開始セクターと終了セクターを設定することによって設定されます。ここで Enter キーを 2 回押すと、ディスク全体が 1 つのパーティションに分割されます。つまり、ディスク全体のコンテナーが 1 つのパーティションに分割されます。この単純なパーティションはほぼ完成です。パーティション情報はまだディスクに書き込まれていないことに注意してください。ここで考えを変えることもできます。上記のパーティションを実行することを確認する場合は、w コマンドを実行するだけです。

この時点でパーティション分割操作は完了しており、次のコマンドでパーティション分割の結果を表示できます。

$ sudo fdisk -l /dev/sdd 

上記の実行プロセスが面倒な場合は、次のコマンド ラインを使用して同じ効果を得ることができます。

$ (エコー n; エコー p; エコー 1; エコー; エコー; エコー w) | sudo fdisk /dev/sdd

パーティションタイプの変更

上記で作成されたデフォルトのパーティション タイプは 83 (Linux) です。タイプ 8e (Linux LVM) のパーティションが必要な場合はどうすればよいでしょうか?引き続き fdisk コマンドを使用してパーティション タイプを変更できます。今回は t コマンドを入力してパーティション タイプを変更します。

次に、変更するパーティション番号を選択できます。パーティションは 1 つしかないため、デフォルトは 1 です。

次に、L コマンドを使用して、fdisk コマンドでサポートされているパーティション タイプを表示します。

LVM を作成する必要があるので、LVM タイプ コード 8e を使用します。

最後に、w コマンドを入力して変更を確認します。 /dev/sdd のパーティション情報を再度確認します。パーティション タイプが Linux LVM に変更されています。

要約する

パーティション分割はディスクを使用するための基礎です。パーティション分割が完了したら、パーティションをフォーマットし、フォーマットされたファイル システムを Linux システムにマウントしてから、ファイルを保存します。

以下もご興味があるかもしれません:
  • Linux ディスク パーティションの実装の原理と方法の分析
  • Linux ディスクのマウント、パーティション分割、容量拡張操作を実装する方法
  • Linux システム ディスクのフォーマットとスワップ パーティションの手動追加
  • Linux仮想マシンのルートパーティションディスク拡張スペースレコードの詳細な説明
  • Linux ディスク パーティションの実際的な例 (必読)
  • LINUX ディスクのパーティション分割、フォーマット、マウント、アンインストールの詳細なプロセス
  • 2T を超える Linux ディスクで GPT パーティションを使用する方法
  • Linux parted ディスク パーティション実装手順の分析

<<:  AngularでTweenMaxアニメーションライブラリを使用する際の問題と解決策

>>:  タイムスタンプの差を計算するSQLメソッド

推薦する

DockerでKafkaをデプロイする方法

目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

DOCTYPE 文書型宣言 (Web ページ愛好家必読)

DOCTYPE 宣言 作成するすべてのページの先頭に、ドキュメント宣言が必要です。はい、そうでしょう...

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

Web 上の要素を非表示にする方法とその利点と欠点

ソースコードの例: https://codepen.io/shadeed/pen/03caf6b36...

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...

CSSはcalc()を使用して現在の表示画面の高さを取得します

まず、CSS3 の相対的な長さの単位を見てみましょう (詳細なチュートリアルを参照してください)。相...

Visual Studio Codeを使用してMySqlデータベースに接続し、クエリを実行します。

Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...

ページ要素の絶対位置と相対位置に関するある程度の理解

今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...

Linux のロード vmlinux デバッグ

gdb を使用してカーネル シンボルをロードする arm-eabi-gdb 出力/ターゲット/製品/...

CSS テキスト配置実装コード

フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...

Linuxは数字当てゲームのソースコードを実装する

シンプルな Linux 推測ゲームのソースコードゲームのルール:数字当てゲームは通常 2 人でプレイ...