Linux でディスクのパーティションを切るときは、いつも fdisk を使っていました。
fdisk /dev/sdb
Command (m for help):n
Command (m for help):p
Command (m for help):1
Command (m for help):<enter>
Command (m for help):<enter>
Command (m for help):w
もちろん、インタラクティブになるので自動化とかできません。
本当に自動化したければパーティションは Kickstart で切るのであまり困ってはいなかったのですが・・・fdifk だと 2TB の制限があるらしいし、たまに後からディスクを追加したときに fdisk だと面倒だし、なんとなくださいので、よくある作業なら parted でソラでワンライナーでできるように必要なことだけ覚えました。
コマンドラインオプション
parted
も fdisk
と同じように、基本的にはインタラクティブに使うもののようなのですが、以下のオプションを使うことで非インタラクティブにバッチ的に実行できます。
-l
でディスクとパーティションの一覧を表示します。fdisk -l
の代わりに使うとよいでしょう。
parted -l
もちろんデバイス名も指定できます。
parted -l /dev/sdb
-m
を付けると machine parseable outpu な出力になります(スクリプトとかで処理しやすい形式)。
parted -lm /dev/sdb
-s
で非インタラクティブに処理が実行できます。後続の引数で parted のコマンド(後述)を指定します。
parted -s /dev/sdb command
-a
でパーティションを切るときのアライメントの調整方法を指定できます。たぶん optimal で良さそうです。
非インタラクティブに実行するなら -s
と -a
を指定しておけば良さそうです。
parted -s -a optimal /dev/sdb command
command の部分には、この後説明する mklabel などのコマンドとその引数が入ります。
-a optimal
は無くてもいい? のかな?
パーティションテーブルの作成
mklabel でパーティションテーブルを作ります。
mklabel label-type
パーティションテーブル(label-type)には MS-DOS/MBR と GPT(GUID Partition Table) とがあります。
(他にもいろいろあるけど Linux で使う分にはこの2つのどちらかしか使わないと思う)
MS-DOS/MBR だと 2TB を超えるパーティションが切れないらしいです。
e.g.)
parted -s -a optimal /dev/sdb mklabel gpt # GPT(GUID Partition Table)
parted -s -a optimal /dev/sdb mklabel msdos # MS-DOS/MBR
パーティションの作成
mkpart でパーティションを切ります。
mkpart part-type [fs-type] start end
part-type は MS-DOS/MBR と GPT(GUID Partition Table) で若干意味が違うようです。
MS-DOS/MBR の場合は primary/extended のどちらかです、意味は省略します。わからない人はとりあえず primary にしとけばいいです(今日日は LVM とかあるので4つ以上パーティション切ることは無いと思う)。
GPT(GUID Partition Table) の場合は Partition name というものを指定するようなんですが・・任意の文字が通ります。
どういう意味があるのかは・・わかりません。primary と指定しても害はなさそうなのでとりあえず primary でいいでしょう。
fs-type にはファイルシステムの名前を指定します。が、そのファイルシステムでフォーマットされるわけではなく、ファイルシステムの名前から パーティションタイプ が導出されて設定されるようです。
fs-type を省略すると Linux (83) になるようです。
start と end には、パーティションの開始位置と終了位置を指定します。デフォルトはメガバイト単位ですが、GB とか % とか s とか c とかの単位も付けられます。s と c はたぶんセクタとシリンダです。
負数を指定するとディスクの終端からの位置になります。なので -1s でディスクの最終セクタを意味します。ただし、次のようには指定できません。
parted -s -a optimal /dev/sdb mkpart primary xfs 1 -1
-1
がオプションだと認識されてしまうためです。
次のように --
を使って、以降の引数がオプションではないことを明示する必要があります。
e.g.)
parted -s -a optimal /dev/sdb -- mkpart primary xfs 1 -1
LVM
LVM に使うときは、パーティションを切った後に LVM のフラグを設定する必要があるらしいです。
set partition flag state
partition にはパーティション番号を指定します。先頭のパーティションなら 1 です。
flag には lvm を、state には on を指定します。
e.g.)
parted -s -a optimal /dev/sdb set 1 lvm on
コマンドを繋げる
コマンドは繋げて書くことが出来ます。例えば、次のように書けます。
e.g.)
parted -s -a optimal /dev/sdb -- mklabel gpt mkpart primary 1 -1 set 1 lvm on