GNU Partedの使い方

2002/05/05
目次
  1. 機能と制限事項
  2. GNU Partedの導入
  3. Partedブートディスクの起動とPartedの実行
  4. Parted内部コマンド
  5. パーティションの表示
  6. リサイズ
  7. コピー
  8. 移動
  9. 作成
  10. ケーススタディ1
  11. ケーススタディ2

機能と制限事項

 GNU Parted公式サイト)はパーティショニングツールということで、パーティション内のデータを保持したままコピーやサイズ変更、移動などができるなど、FDISKなどの単なるパーティションテーブル操作ツールとは一線を画している。

 しかし対応ファイルシステムのすべてに対し、すべての機能が使えるわけではないので注意が必要だ。ファイルシステムごとにサポートしている機能を以下に挙げる。

[ファイルシステムごとのサポート機能]
ファイルシステム 作成 コピー リサイズ 移動 検査 検出
FAT16 ○※1 ○※2
FAT32 ○※1
ext2fs ○※3 ○※4 × ○※5
ext3fs × ○※3 ○※4 × ○※5
linux-swap
ReiserFS ○※6 ○※6 ○※4,6 × ○※6
HFS × × × × ×
NTFS × × × × ×
JFS × × × × ×
UFS × × × × ×
XFS × × × × ×

※1 FAT16とFAT32の相互のコンバートが可能。
※2 セクターサイズを変更できないので、これが分かるようなサイズ変更は不可
※3 完全に同じか大きなサイズのパーティションにしかコピーできない
※4 パーティションの先頭位置を変更できない
※5 リサイズとコピーが問題ないかの検査しかできない
※6 libreiserfsをインストールする必要がある。

 まだまだファイルシステムによって機能にかなりの制限があるのが分かるだろう。それでもフリーツールでここまでやるのは大したもんだと思う。

 


GNU Partedの導入

 GNU PartedはLinuxのアプリケーションソフトとして開発されているソフトだ。従ってLinuxにインストールして使うというのが本来の使い方だ。しかしパーティショニングツールはハードディスク上のOSが何も起動していない時に使いたい場面が多々ある。

 そこでフロッピー起動で使えるようにPartedブートディスクなるものが用意されている。これは所謂1FD Linuxになっていて、FD起動でごく簡単なLinuxが起動され、いくつかのLinuxコマンドと共にPartedコマンドが実行できるというものだ。

 ディスクイメージは公式サイトに置いてあるから、ダウンロードしてLinux上のddコマンドか、Windowsならrawriteコマンドを使ってフロッピーディスクに書き込んでほしい。

 勿論公式サイトからソースを入手して、Linux上でコンパイルして利用しても構わない。システム以外のデータドライブの操作ならLinuxの通常のシステム上からでも行えるはずだからね。またReiserFSはライブラリlibreiserfsが必要なので、Partedブートディスクからでは利用できない。

 


Partedブートディスクの起動とPartedの実行

 Partedブートディスクを作成したら、早速これをフロッピーディスクドライブに入れてマシンを起動する。通常のLinuxと殆ど同じように(LILOなどのブートローダはないが)起動するはずだ。起動が終了すると通常と違ってログインプロンプトが出ないで、いきなりBashのプロンプトが出る。
 
 bash# _

 操作感は普通のLinuxと変わりないから、lsコマンドやcdコマンドをたたいてみてほしい。またbinディレクトリやsbinディレクトリへ行けば、使えるコマンドが何なのかを確認することもできるだろう。では早速Partedを起動してみよう。起動コマンドは以下のようなシンタックスだ。

 parted  [ハードディスクドライブのデバイス名]

 通常は処理対象のハードディスクドライブを指定する。ハードディスクドライブのデバイス名はLinuxなので言うまでも無く「/dev/hda」などだ。省略すると一応第1ハードディスクドライブが処理対象として選ばれるようだ。また処理対象ハードディスクドライブは、起動後も変更することができる。早速「/dev/hda」に対して実行してみよう。
 
[Partedスタータ画面]
Partedスタータ画面

 ちょっと数行の起動メッセージが表示された後、(Parted)というPartedプロンプトが表示される。
  
 (parted) _

 ここから様々なParted内部コマンドを実行して、パーティショニングを行っていくことになる。

 


Parted内部コマンド

 Parted内部コマンドは、やはり内部コマンドのhelp」コマンドで簡単な使い方をみることができる。

[HELPコマンド]
HELPコマンド
 

 各コマンドの簡単な説明を以下にする。

  1. print
    現在のハードディスクのパーティションテーブルやディスクラベルの内容を表示する。
     
  2. resize
    パーティションのサイズを変更する。ファイルシステムにより機能が制限される。
     
  3. cp
    パーティションの複写を行う。やはりファイルシステムにより機能が制限される。
     
  4. rm
    パーティションの削除を行う。
     
  5. move
    パーティションの移動を行う。
     
  6. mkfs
    ファイルシステムを作成する。フォーマットのようなもの。
     
  7. mkpart
    パーティションを作成する。
     
  8. mkpartfs
    パーティションの作成、及びファイルシステムの作成を行う。
     
  9. mklabel
    パーティションテーブルの殻やBSDディスクラベル、SUNディスクラベルなどを作成する。これの意味が分からない人は絶対に実行してはいけない。BSDディスクラベルなどを作るとパーティションテーブルは一切消えてしまう。
    またPartedでは、PC/AT互換機の標準のパーティションテーブルも、あくまでMSDOSディスクラベルという1OSのパーティション情報という扱いだ。
     
  10. check
    ファイルシステムの検査を行う。コピーやリサイズ、移動時に問題がないか検査を行う。
     
  11. set
    ブートフラグをはじめ各種フラグをセットする。
     
  12. select
    処理対象ハードディスクドライブを選択、変更する。ハードディスクはLinuxの流儀どおり「/dev/hda」というデバイススペシャル名」で指定する。
     
  13. help
    内部コマンドの簡単な説明を表示する。「help コマンド名」というようにコマンド名を引数に指定することで各コマンドのもう少し詳細な説明が表示される。
     
  14. quit
    Partedコマンドを終了する。

パーティションの表示

 まずは現在のパーティションを表示するコマンド、print」コマンドを実行してみよう。

[PRINTコマンド実行結果]
PRINTコマンド実行結果

 Minorというカラムがパーティションの番号だ。Linuxの流儀に従い基本領域が1から4、論理領域が5から始まる。

 Startがパーティションの開始位置End終了位置で、それぞれハードディスクの先頭からのサイズ(MB)だ。

 Type基本領域(primary)拡張領域(extended)論理領域(logocal)の別。Filesystemはその名の通りそのパーティションで利用されているファイルシステムが表示される。

 Flagsはアクティブなら「boot」、LBA領域なら「lba」、隠し領域なら「hidden」などの各種フラグがたちます。複数フラグがたつ場合は、カンマで続く。

 例の表示結果の場合、全体で40GBのハードディスク(/dev/hda)であり、先頭に8GBのFAT領域があり、ここがアクティブになっている。続いて10GBの拡張領域があり、その中にはそれぞれ5GBのFATの論理領域が2つあって、前の方は隠し領域になっている。次にext2fsの基本領域が5GBあって、続いてLinux Swap領域が基本領域で540MBほどあるということになる。

 特にここでよく確認しておくべきなのが、各パーティションの「MINOR」(パーティション番号)とサイズだろう。これから説明するコマンドではパーティションの指定にこのパーティション番号を、サイズに関わるコマンドは必ずサイズ自体を指定することになるからだ。

 


リサイズ

 パーティションのリサイズは、以下のようなコマンドを実行する。

 (parted) resize パーティション番号  開始位置  終了位置

 現在リサイズが可能なファイルシステムは、FAText2fsext3fs、及びLinux Swapだけだ。ext2fsとext3fsは開始位置を変更してはいけない。コマンド自体は実行できてしまうが、ファイルシステムを認識しなくなってしまう。

 FAT16の場合、セクターサイズを変更できないようなので、セクターサイズが変わってしまうような大きなパーティションサイズ変更はできないことになる。FAT32に関しては一切制限がない。

 開始位置と終了位置を指定できるので、現在と全然違う位置を指定することにより、事実上移動コマンドと同じ動作をさせてしまうことも可能だ。それどころか、後述するが移動コマンドの制限から、このコマンドでパーティションの移動をする必要がある場面もあり、とても使い勝手のいいコマンドである。

 尚、サイズの指定だが、printコマンドの表示結果を見るとサイズが小数点以下の数値もあり、面倒くさそうに見える。しかしそこまで厳密に指定しないでもPartedコマンドがよきに計らってくれるから、小数点以下まで指定する必要はない。


コピー

 パーティションのコピーは、以下のようなコマンドを実行する。

 (parted) cp [複写元ハードディスク] 複写元パーティション番号 複写先パーティション番号

 このリファレンスを見ても分かる通り、別のハードディスクのパーティションも複写できる。対応ファイルシステムとファイルシステムによる制限は「機能と制限事項」を参照してほしい。

 


移動

 パーティションの移動は、以下のようなコマンドを実行する。

 (parted) move パーティション番号  開始位置  [終了位置]

 終了位置は省略可能だ。逆に終了位置を指定してしまうと、resizeコマンドと似たようなものになってしまう。ただmoveコマンドの場合、移動先が現在の位置と少しでもオーバーラップしていても許されない。例えば4GBのパーティションを2GB後ろにずらすことはmoveコマンドではできない。このような移動を行いたい場合は、resizeコマンドを使ってほしい。

 


作成

 パーティションの作成は、以下のようなコマンドを実行する。

 (parted) mkpartfs パーティションタイプ ファイルシステム  開始位置  終了位置

 パーティションタイプは、primary」(基本領域)extended」(拡張領域)logical」(論理領域)の別を指定する。

 ファイルシステムは、FAText2linux-swapのいずれかを指定する。パーティションを作成すると共にファイルシステムも作成することになる。一方ファイルシステムは作成しない枠だけを作るコマンドもある。それが以下の「mkpart」コマンドだ。

 (parted) mkpart パーティションタイプ ファイルシステム  開始位置  終了位置

 ただこのコマンドは単なる枠だけの作成コマンドではない。一度誤って消してしまったパーティションの復活コマンドとしても利用できる。もしNTFSのパーティションを誤って消してしまっても、このコマンドで当該パーティションを復活できる。そのときにはなぜか「ファイルシステム」に何を指定してもちゃんとNTFSなど、いわゆる元のファイルシステムが復活する。これはPartedが検出可能なファイルシステムである場合、そういう動きになる。

 逆に元何らかのファイルシステムがあったパーティションは、一度消してもこのコマンドでは別のファイルシステムのパーティションにすることはできない。その場合は「mkpartfs」コマンドを使うか、次の「mkfs」コマンドで後から変更する必要がある。

 (parted) mkfs パーティション番号 ファイルシステム

 指定できるファイルシステムは今のところ、前述の3種類だけとなる。

 
 では実際にコマンドをいくつか使ってパーティショニングをしてみよう。

 


ケーススタディ1

 まずは20GBのハードディスクが全部ひとつのFAT32領域になっていてWindows98がインストールされており、ここに別のOSをインストールしするために、もうひとつの基本領域を作るという場面を考えてみよう。

 現在の20GBのFAT32パーティションは十分に空きがあるので、これを10GBに縮め、10GBのもうひとつの基本領域を作ってみる。また折角なので、新しい領域をハードディスクの先頭につくるために現在の領域を後ろにずらそう。

 まず現在は以下のような状態になっていると思う。

[現在のパーティション表示結果]

 この20GBの基本領域を10GBに縮めつつ、後ろにずらする。resize」コマンドはmoveのようなこともできるので、1回でこれが可能だ。次のようなコマンドでいいだろう。

 (parted) resize 1 10000 20402

 ターゲットのパーティション番号、開始位置は先頭から10GB、終了位置は同じ先頭から20GBの位置だ。 

[リサイズコマンドの実行のその結果]

 後ろにずれたのが分かるだろう。空いた先頭10GBの空き領域にもうひとつの基本領域をFAT32で作る。次のようなコマンドを打つ。

 (parted) mkpartfs primary fat 0 10000

 ついでにフォーマットもするためにmkpartfs」コマンドを使った。パーティションタイプに基本領域(primary)を指定し、ファイルシステムはfat、開始位置は先頭の「0」、終了位置は10GBの「10000」だ。

[基本領域の作成とその結果]

 作成するサイズの関係でFAT16ではなくて、FAT32を作るかどうかの問いがあるが、これに対しokとタイプして実行する。結果新しい基本領域がハードディスク先頭に完成している。位置は「10000」とアバウトに指定しても、よきに計らって最適な値「1001.403」になっていることも分かる。

 さらにこのパーティションをアクティブにしてみよう。それには次のコマンドを実行する。

 (parted) set 2 boot on

 set」コマンドを使って、当該パーティションに対し、「boot」フラグ「on」にする。

[新領域のアクティブ化とその結果]

 これで新しい領域がアクティブになった。


 ただ、今作ったパーティションがハードディスクの先頭であるにも関わらず、パーティション番号が2となっているのが、気になる人も多いだろう。これはパーティションテーブルのエントリをあらわしている訳で、エントリの順序は必ずしも物理位置の順序と一致している必要はないが、気持ちが悪いのも分かる。

 しかしパーティションテーブルのエントリを入れ替えるコマンドはPartedにはない。どうしても入れ替えたい場合は、MBMの区画エディタを使おう。MBMをインストールするか、MBMブートディスクで起動して、区画エディタを開く。

[MBMの区画エディタで見たパーティション状態]

 目的のパーティションを選択した状態で、「Shift」キー + 「↑」キーまたは「Shift」キー + 「↓」キーでパーティションのエントリを入れ替えることができる。

[パーティションエントリ入れ替え後の状態]

 これでスッキリしたね。ただしもしWindowsNT系OSだった場合、boot.iniの書式はこのパーティションテーブルエントリ位置を元にしているで、ただ単にこれを入れ替えるとOSが起動しなくなる。予めboot.iniにこの変更を見越して起動エントリを追加しておく必要がある。詳細はboot.iniの記述を参照してほしい。意味が分からない場合は、決してテーブルエントリを入れ替えてはいけない。

 


ケーススタディ2

 次は拡張領域後ろにずらしてみよう。Partedでは拡張領域の移動をサポートしていないので、中身の論理領域ひとつずつずらしていくという、結構面倒な手続きを踏む必要がある。以下のようなパーティション構成がある。

[オリジナルパーティション構成]

 ハードディスクの先頭8GBから始まる10GBの拡張領域で、中にFAT325GBの論理領域2つある。ひとつは隠し領域だが、そのことはこの作業には全然関係ない。この拡張領域を後ろに10GBずらしてみる。場面によってはmove」コマンドでもいい場合もあるが、柔軟なresize」コマンドですべて行う。

 まずは論理領域をずらす場所を作るため、拡張領域を後方に10GB広げる

 (parted) resize 2 8000 28000

[拡張領域の後方拡張]

 後ろに10GBの空き拡張領域ができたので、下(パーティション番号6)の論理領域を移動する。

 (parted) resize 6 23000 28000

 開始位置は終了位置から逆算すると「23000」(23GB)となる。

[論理領域の後方移動1]

 次に上(パーティション番号5)の論理領域を移動する。

 (parted) resize 5 18000 23000

 位置はもはや説明する必要はないだろう。

[論理領域の後方移動2]

 最後に空いてしまった拡張領域の前方領域をカットするため拡張領域を縮める。

 (parted) resize 2 18000 28000

[拡張領域の縮小]

 結構面倒だったが、これで拡張領域がやっと10GB後方へ移動し、10GBの空きを拡張領域の前に作ることができた。あとはお好きなようにパーティションを作ってほしい。

 尚ここでできた空き領域に基本領域を作ると、またケーススタディ1の時と似たようにパーティションテーブルエントリ3番にできて、物理順序と食い違う。気になる場合はやはりMBMの区画エディタで修正するといいだろう。