Tutoriel Linux

Ubuntuのパーティションをfdiskでデータを失わずに拡張する

Débutant2 min de lecture

Ubuntuのデータパーティションの後にディスクを拡張したり未割り当てのスペースができたりしましたか?そのスペースを利用可能にするには、パーティションのエントリをテーブルで変更し、その後にそれが含まれるext4ファイルシステムを拡張するという2つの異なる操作が必要です。 fdisk は最初の操作だけを行い、次に resize2fs が関与します。

SSDとUSBメンテナンスケースのUbuntuパーティション拡張
パーティションテーブルを変更する前にディスクと開始セクターを確認します。

「データを失わずに」というタイトルは保証ではありません。この操作の安全性は、実際にテストされたバックアップ、正しいディスクの確実な特定、およびパーティションの開始セクターの正確な保持に基づいています。ターゲットの誤りや開始の変更は、データをアクセスできなくする可能性があります。ここに記載されている内容と一致しないチェックがある場合は、書き込みを行う前に停止してください。

パーティションが扱うケースに該当するか確認する

この手順は、一般的なext4でフォーマットされた非ルート、非LVM、非暗号化でソフトウェアRAID mdraidのないLinuxデータパーティションに関するものです。未割り当てのスペースは、拡張するパーティションの直後に配置されている必要があります。パーティションはMBRの拡張パーティションにある論理パーティションであってはならず、操作のためにはマウントされていない状態で利用可能である必要があります:使用中だからといってカーネルの拒否を回避しようとしないでください。

最初にデバイスとファイルシステムの構成を読んでください:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

親ディスク、関心のある part 型のエントリ、そのフォーマットとマウントポイントを特定します。中間層、LVMの論理ボリューム、暗号化、RAIDがある場合は、一般的なext4パーティションで直接操作できません:ここでの手順に従ってください。データパーティションとマウントされたルートパーティションを区別するには、マウントも確認してください:

findmnt

この記事の例では、/dev/sdX はディスク全体を指しており、実際に特定した名前に置き換えてください。例えば、システムのデバイスです。 /dev/sdXN はそのディスクのパーティションを、その実地番号で指します。これらはプレースホルダーであり、そのままコピーするパスとして使用するものではありません。親ディスクとパーティションを混同しないでください: fdisk は前者を受け取り、resize2fs は後者を対象とします。

識別したディスクのテーブルと境界を検査します:

sudo fdisk -l /dev/sdX

以前のステップで確認したディスクに /dev/sdX を置き換えます。テーブルのタイプ(gpt または dos、すなわちMBR)、ターゲットパーティションの番号、その開始セクター(「Start」)、終了(「End」)、およびタイプを特定します。未使用スペースはパーティションの終わりの直後に始まり、他のパーティションが介在せずに連続して延びる必要があります。スペースがパーティションの前にあったり、占有されていたり、ディスクが既に完全に割り当てられている場合や、これらの境界を確実に特定できない場合は、この方法を使用しないでください。ディスクの特定が不確実なままであれば、まず誤って間違ったディスクを消去せずにパーティションを準備するための確認に従ってください。拡張すべきディスク自体であれば、この事前の操作はその提供環境で行われます。ここでは詳細には説明されていません。

ターゲットがマウントされたルートである場合、ファイルシステムがext4でない場合、または論理/拡張MBR、LVM、LUKS、mdraid、Btrfs、XFSのどれかである場合も停止してください。これらのケースは、別のレイヤーまたは手順に該当します。未使用スペースを回収するためにパーティションの開始を移動させたりしないでください。

データをバックアップし、パラメータを記録する

テーブルに触れる前に、別のストレージメディアにデータの完全なバックアップを取り、実際に読み取るか復元して確認してください。テーブルのバックアップファイルはファイルのバックアップに取って代わるものではありません。メンテナンスウィンドウを計画し、カーネルがすぐにテーブルを再読み込みできない場合の制御された再起動の可能性を考慮してください。

テーブルの記録をシェルから書き込み可能な位置に保存することができます:

sudo sfdisk -d /dev/sdX > sauvegarde-table-sdX.sfdisk

確認されたディスクの /dev/sdX とファイル名 sauvegarde-table-sdX.sfdisk を置き換えます。取得されたファイルが存在し、読み取り可能かつ空でないことを確認し、正しいディスクを記述していることを確認した後、操作中のディスクからコピーを保持します。リダイレクト > は呼び出しシェルによって実行されるため、 sudo は自動的に宛先フォルダへの書き込み権限を与えません。これを復元のための即席の方法として考えないでください。

ターゲットパーティションの正確なパラメータをセッション外に記録してください:番号、セクター Start、セクター End、タイプ、GPTまたはMBRのテーブル。これらを前のコマンドの出力や下で説明するインタラクティブな表示と比較します。開始セクターは重要な基準です:エントリを再作成した後は移動しないように一致させる必要があります。また、予定された拡張が他のパーティションを覆わないことも確認してください。

システムがパーティションまたはファイルシステムの識別子を使用している場合は、操作前にそれらを記録してください:

blkid

blkid は、ファイルシステムの UUID の値やデバイスに応じたパーティションの PARTUUID を表示します。その後、これらの値をマウントや起動で使用される参照と比較します。エントリを削除して再作成すると、その PARTUUID が変更される可能性があります; 安定していると仮定しないでください。どの参照が使用中であるか、または差異に対処する方法がわからない場合は、書き込む前に停止してください。また、データのバックアップがテストされていない場合、テーブルダンプが欠如または不整合した場合、番号、タイプ、開始が不確実な場合も同様です。

開始を移動せずにfdiskでエントリを再作成する

fdisk における操作は、パーティションテーブルに関するものであり、ext4の内容ではありません。fdisk のドキュメントには、GPTおよびMBRのテーブルの操作方法と確認すべきパーティション情報が記載されています。既に特定された親ディスクでツールを開きます:

sudo fdisk /dev/sdX

プレースホルダーを使用するのはディスク全体であり、パーティション名ではありません。インターフェースの中で、各表示を理解した後にのみ進みます:

  • p を入力してテーブルを表示します。もう一度ターゲットパーティション、その番号、タイプ、および開始セクターを特定します。それらはあなたのメモと一致する必要があります。
  • d でエントリを削除するのはターゲットパーティションのみです。ツールが番号を要求する場合は、確認した番号を選択してください;他のエントリを推測したり削除したりしないでください。
  • n を使用して代わりのエントリを作成します。同じ番号を保持し、記録したのとまったく同じ最初のセクターを正確に入力します。終了は隣接する未使用スペースの中でより遠く、ディスクを超えたり他のパーティションを覆ったりしない場所を選択してください。 fdisk の整列提案を考慮してください;それが異なる開始を含む場合、または警告を理解できない場合は、すすめないでください。
  • 元のパーティションタイプが保持されていることを確認します。もう一度テーブルを表示して、メモと比較します:同じ番号、同じタイプ、同じ Start、新しい期待された終了、および他のすべてのエントリが無傷であること。

すべての値が一致し、表示されたメッセージを理解している場合にのみ、w で書き込みを確定します。そうでない場合は、書き込みをせずに終了し、診断を再開してください。 fdisk がext4の署名を表示して削除するよう求めた場合は、拒否してください:この署名を削除しないでください。警告、予期しない対話、または番号不整合の兆候がある場合は停止してください; これはランダムな応答を試す招待状ではありません。

書き込み後、テーブルはより大きなパーティションを示しますが、ext4はまだ初期サイズを保持しています。ファイルシステムが追加されたスペースを利用するには、次の操作が必要です。

カーネルにテーブルを再読み込みさせる

カーネルに関連するディスクのテーブルを再読み込みさせます:

sudo partprobe /dev/sdX

常に確認された親ディスクを使用してください。 partprobe からエラーなしの応答があっても、新しいサイズが実際に認識されていることを証明するものではありません。テーブルを再読み込み、カーネルが表示するサイズを確認します:

sudo fdisk -l /dev/sdX
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

開始セクターは変更せず、新しい終了は計画された範囲内に留まる必要があり、 lsblk はターゲットパーティションの新しいサイズを表示し、他のエントリには異常がないことを示す必要があります。カーネルがテーブルを再読み込みできない場合は、 resize2fs を実行しないでください。この操作を延期してください;環境が許すなら、制御されたウィンドウ内で再起動を計画し、その後もう一度テーブルと認識されたサイズを確認してからext4の拡張を行ってください。マウントされたルートの再読み込みが失敗した場合は停止してください:このケースはこのチュートリアルの範囲外です。

ext4を拡張し、結果を確認する

カーネルが拡張されたパーティションを認識し、その開始セクターが記録された値と同じであれば、ext4ファイルシステムを拡張できます:

sudo resize2fs /dev/sdXN

正確な番号を持つext4パーティションの正確な名前で /dev/sdXN を置き換えます — 親ディスクではありません。 resize2fs は既存のコンテナ内でext2/3/4を拡張します; テーブルを変更することはしません。したがって、その実行順は、拡張およびそのテーブルの成功した再読み込みの後に来ます。これはresize2fs のドキュメントに示されています。異なるセクターで再作成されたパーティションの開始は、ファイルシステムを完全な損失にさらす可能性があります: 開始が正確に一致しない場合は、このコマンドを使用しないでください。

コマンドの完了を待ち、エラーが表示されないことを確認します。その後、ファイルシステムおよび識別子をチェックします:

lsblk -f
blkid

ターゲットは常にext4として表示され、予想される識別子が含まれているか、UUID/PARTUUID の任意の差異が考慮され対処されている必要があります。PARTUUID の参照が変更された場合、システムを再稼働する前に、環境に応じて関連するマウントまたは起動の参照を確認して修正してください。エントリの再作成後に参照が有効であると仮定しないでください。

マウントされたファイルシステムの利用可能なスペースを確認するには、次のようにします:

df -hT

環境に応じた手順に従って再マウントされると、関連するパーティションの行にはext4タイプが表示され、増加した利用可能容量が示される必要があります。パーティションがマウントされていない場合は、df に表示されないことは正常であり、失敗を示すものではありません。考慮すべきは、より大きなテーブルが直接ext4の拡張を意味するわけではないことを忘れないでください; resize2fs が完了していない限りそうです。

エラーと停止を必要とする状況

ディスクを特定できない場合、最初のセクターが不明または異なる場合、バックアップが確認されていない場合、パーティションの後にスペースが隣接していない場合、または他のパーティションが覆われる可能性がある場合は、これ以上進まないでください。また、ext4署名の警告、タイプの変更、fdiskによる理解できないダイアログ、またはカーネルによる再読み込みの失敗がある場合も停止してください。

resize2fs のエラー、テーブルのサイズと一致しないサイズ、または予期しない UUID/PARTUUID も再稼働を保留し、状況を検査する必要があります。フォーマット、即席の修復、またはテーブルの新たな変更を行わないでください。ここに説明された単純なext4のケース外にいる場合は、実際のレイヤに関する文書を使用し、このシーケンスを適用しないでください。

要点

このext4データパーティションのために、この順序で進めてください:テストされたバックアップ、パラメータの特定と記録、同じ開始セクターでのエントリの拡張、カーネルによる確認された再読み込み、次に resize2fs でext4の拡張。ディスク、セクター、識別子、または予期される結果についてのほんの少しの不確実性も、テーブルを書き込まない理由として十分です。