ウェブサイト検索

LinuxでGNU Partedを使ってパーティションを管理する方法


目的

Linux上でGNU partedパーティションマネージャーを使用してパーティションを管理する方法を学ぶこと。

要件

  • ルート権限

規則

  • # – 特定のLinuxコマンドをroot権限で実行する必要があります
    rootユーザーとして直接実行するか、sudoコマンドを使用します。
  • $ –通常の非特権ユーザーとして実行されるLinuxコマンドを指定

紹介

パーティション管理は、オペレーティングシステムを扱う際に最も重要で危険な作業の一つです。このチュートリアルでは、GNU partedの使用に焦点を当て、コマンドラインインターフェースからパーティションを作成、サイズ変更、削除する方法を見ていきます。Partedは、インタラクティブモードと非インタラクティブモードの両方で動作できます。後者は、一部の操作を自動化したり、コマンドが無人環境で実行される必要がある場合、スクリプトやkickstartファイル内で特に便利です。

パーティションテーブルでデバイスを初期化しています

このチュートリアルで作業するデバイスは/dev/sdbです。最初に行いたいことは、partedにこのドライブの現在の状態を表示させることです。インタラクティブモードで実行するためには、root権限でpartedを起動し、操作したいデバイスのパスをコマンドの引数として渡す必要があります。この場合:

sudo parted /dev/sdb

分割されたプロンプトが開かれます:

GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

この時点で、画面に表示されているように、helpと入力して利用可能なコマンドのリストを受け取ることができます。この場合、ドライブの現在の状態を可視化したいので、printコマンドを使用します:

Error: /dev/sdb: unrecognised disk label
Model: Generic- SD/MMC/MS PRO (scsi)
Disk /dev/sdb: 7743MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

ご覧のとおり、/dev/sdbにはパーティションテーブルがないため、partedはディスクのモデル、合計サイズ、およびセクターサイズに関する情報のみを表示します。ディスクを使用するには初期化する必要があるため、パーティションテーブルを作成しなければなりません。それを可能にするコマンドはmklabelです。どの種類のパーティションテーブルを作成するかを指定しない場合、partedはプロンプトで質問します:

(parted) mklabel
New disk label type? msdos

この場合、私たちは従来のmsdosパーティションテーブルを作成します。他の有効な値は「aix」、「amiga」、「bsd」、「dvh」、「gpt」、「loop」、「mac」、「pc98」および「sun」です。前述のように、mklabelコマンドの引数としてパーティションテーブルのタイプも指定することができました。

(parted) mklabel msdos

これは、インタラクティブでない方法で同じ作業を行いたい場合に使用するコマンドに非常に似ています。コマンドが非対話的なコンテキストで実行される必要がある場合、-sオプション(--scriptの短縮形)も提供する必要があります。そうすることで、ユーザーの介入が決して要求されないことが確実になります。

sudo parted -s /dev/sdb mklabel msdos

パーティションを作成する

さて、デバイス上に最初のパーティションを作成しましょう:パーティションの種類を指定し、プライマリまたは拡張を選択し、ファイルシステムの種類(オプション)、パーティションの開始点と終了点を指定する必要があります。また、これらの値が直接提供されない場合は、インタラクティブに要求されます。パーティションを作成するためのコマンドはmkpartです。

(parted) mkpart
Partition type?  primary/extended? primary
File system type?  [ext2]?
Start? 1MiB
End? 1025MiB

明らかにすべき一つのことは、たとえパーティションがファイルシステムの種類を要求したとしても、パーティション上にファイルシステムは決して作成されないということです。この情報は、パーティションのGUID(グローバルユニーク識別子)を設定するためだけに要求されます。

私たちは、パーティションの開始点として1MiBを指定しました。これにより、そのパーティションはディスクのセクター2048から開始されます(1セクターは512バイトなので、2048 * 512=1048576バイト=1MiBです)。この場合、sを単位として使ってもよく、これはsectorの略で、パーティションの開始点としたいセクターを直接指定することができます。パーティションの開始点はアライメントにとって非常に重要ですが、それについては後で説明します。

1GiB のパーティション (1024 MiB) が必要だったため、パーティションが 1MiB から始まるため、終了点として 1025 MiB を指定しました。デバイス上のすべての空きスペースをカバーするパーティションが必要な場合、100% を値として指定するだけで済みます。また、パーティションの開始点や終了点を指定する際には、バイナリ単位(MiB や GiB など)を使用することが推奨されることに注意することも重要です。インタラクティブでないモードで実行している場合、上記のコマンドは次のようになります:

sudo parted -s /dev/sdb mkpart primary 1MiB 1025MiB

今、再度printコマンドを実行すると、私たちが作成したパーティションが表示されます:

(parted) print
Model: Generic- SD/MMC/MS PRO (scsi)
Disk /dev/sdb: 7743MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary

パーティションの番号、その開始点と終了点、サイズおよびタイプが表示されます。partedに、その情報を表示する際に特定の単位を使用するように指示することができます。例えば、MiBを単位として使用したい場合、unitコマンドを使用してそれを指定し、再度printを実行することができます:

(parted) unit MiB
(parted) print
Model: Generic- SD/MMC/MS PRO (scsi)
Disk /dev/sdb: 7384MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start    End      Size     Type     File system  Flags
 1      1.00MiB  1025MiB  1024MiB  primary

ご覧の通り、指定したユニットが現在使用されています。

パーティションのアライメントをチェックする

以前にも述べたように、パーティションのアラインメントは、パフォーマンスを最適化するための非常に重要な要素です。 partedでは、minimalとoptimalの2種類のアラインメントをチェックできます。最小モードでは、プログラムがパーティションが物理ブロックに対して最小アラインメント値を遵守しているかどうかを確認します。一方、最適モードでは、パーティションが物理ブロックサイズの倍数にアラインされているかを確認し、最適なパフォーマンスを提供します。これらのチェックを実行するために使用するコマンドはalign-checkです:

(parted) align-check
alignment type(min/opt)  [optimal]/minimal?
Partition number? 1
1 aligned

インタラクティブモードでコマンドが実行されると、確認したいアライメントのタイプ(デフォルトでは最適が使用されます)とパーティション番号(1)を提供するように促されます。この場合、partedはパーティションが正しくアライメントされていることを確認しました。コマンドの非インタラクティブ版は次の通りです:

sudo parted -s /dev/sdb align-check optimal 1

再び-sフラグを使用したため、コマンドからの出力は見られませんでしたが、終了コードを確認することで成功かどうかを知ることができます:

echo $?
0

ご存知の通り、$? 変数は最後に実行されたコマンドの終了値を含んでおり、それが 0 であるため、そのコマンドが成功したことがわかります。-s オプションを提供しない場合、コマンドはインタラクティブモードで発生するのと同様にチェックの結果を返します。

sudo parted /dev/sdb align-check optimal 1
1 aligned

パーティションのサイズ変更

パーティションのサイズ変更は非常に危険な操作でもあります。特に、パーティションにすでにファイルシステムが含まれている場合は注意が必要です。パーティションのサイズを変更するとき、partedはファイルシステムを自動的に調整しないため、特に縮小する場合は、まず使用中のファイルシステムをサイズ変更するための専用ツールを使用する必要があります。パーティションサイズ変更に使用するコマンドはresizepartです。現在のパーティションサイズは1 GiBです。例えば、デバイスの残りのすべてのスペースをカバーするように拡張したい場合は、次のように入力します:

(parted) resizepart
Partition number? 1
End?  [1075MB]? 100%

resizepart コマンドを入力した後、partedはパーティションの番号と新しい終了位置の値を提供するように促しました。この場合、残りのすべての空間をカバーする最も短い方法である 100% を提供しました。このコマンドの非対話型バージョンは次のとおりです:

sudo parted -s /dev/sdb resizepart 1 100%

どこに、再び、1はパーティション番号で、100%はパーティションの終了点の新しい値です。もう一度printを実行すると、私たちが行った変更が適用されていることを確認できます:

Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit MiB
(parted) print
Model: Generic- SD/MMC/MS PRO (scsi)
Disk /dev/sdb: 7384MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start    End      Size     Type     File system  Flags
 1      1.00MiB  7384MiB  7383MiB  primary

パーティションは現在、デバイス上のすべてのスペースをカバーしています。

パーティションを取り除く

パーティションを削除するのも同様に簡単です。明らかに、このような操作は最大の注意を払って行うべきです。この場合に使用すべきコマンドはrmです:

(parted) rm
Partition number? 1

再度、パーティション番号を直接提供しなかったため、partedは必要な情報を提供するように求めてきました。直接提供することもでき、rm 1と書くだけで済みました。非対話モードで実行する場合、コマンドは次のようになります:

sudo parted -s /dev/sdb rm 1

予想通り、コマンドを実行した後、パーティションはもう存在しません:

(parted) print
Model: Generic- SD/MMC/MS PRO (scsi)
Disk /dev/sdb: 7743MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags

結論

パーティションの管理は危険な作業であり、最大限の注意を払って行う必要があります。必要な作業を実行するための多くのグラフィカルツールがLinuxにはあります(最も有名なのはparted自体に基づくGpartedでしょう)が、時にはコマンドラインのシンプルさと力強さが必要になることがあります。そのような状況では、partedが適切なツールです。常にプログラムのマニュアルページを参照することが推奨されます。楽しんで、注意してください!

関連記事: