gdisk をコマンド(スクリプト)やシェルから使うには
gdisk コマンド ライン版 sgdisk
がある。
sgdisk
、これを使うことで コマンドからまとめてディスクのボリューム操作を毎回なんども再実行できるようになる。
なぜこんなことを調べたのか
LVM の実験で、適当にボリューム作ってたらグチャグチャになった。
Number Start (sector) End (sector) Size Code Name 1 2048 104859647 50.0 GiB 8300 Linux filesystem 2 104859648 209717247 50.0 GiB 8300 Linux filesystem 3 209717248 314574847 50.0 GiB 8300 Linux filesystem 4 314574848 419432447 50.0 GiB 8E00 Linux LVM 5 419432448 524290047 50.0 GiB 8E00 Linux LVM 6 524290048 629147647 50.0 GiB 8300 Linux filesystem 7 629147648 734005247 50.0 GiB 8E00 Linux LVM 8 734005248 838862847 50.0 GiB 8300 Linux filesystem
収拾がつかない。もとに戻したいなど、ちょっとしたことにgdisk/cgdisk
だとかゆいところ手が届かない。
まとめてすべて、Linux LVM 8e00 に統一したい
たとえば、ボリュームのCODEをすべてのLVM 8e00 にしたい、Linux filesystem 8500 にしたい。
このようなときパーティションが10個以上あると流石に面倒なんですね。
実験してもとに戻したい
LVMをあれこれためした後にもとに戻したいとか、スクリプトで何個もHDDをパーティション区切りたいとき
毎回手作業はつらすぎる
gdisk は対話モード REPL だけど、コマンドラインからも使いたい gdisk をコマンドから使うには sgdisk を使う
sgdisk はスクリプトからコマンドライン・オプションで使う
sgdisk は スクリプト用の s です gdisk には他に curses 版の cgdisk があります。
sgdisk の使い方。
ヤバそうなコマンドオプションはコピペ暴発防止のために /dev を /deb と表記しています。
一覧表示 sgdisk -p
sudo sgdisk -p /dev/sdc
バックアップ
sudo sgdisk -b out.dev.sdc.info.txt /dev/sdc
または
sudo sgdisk --backup=out.dev.sdc.info.txt /dev/sdc
パーティション・テーブルを全部初期化する。
sudo sgdisk -Z /deb/sdc
バックアップからリストアする
パーティション・テーブルを復元します。
sudo sgdisk -l out.dev.sdc.info.txt /deb/sdc
または
sudo sgdisk --load-backup=out.dev.sdc.info.txt /deb/sdc
最初に覚える3つ
最初に、バックアップとリストアを全削除を覚えておけばそこそこ安心して、実験ができる。
- バックアップ
- 全消去
- リストア
此の3つを覚えておけば、あとは多少ミスっても安心感を持ってあれこれ試すことができる。
パーティションのTYPE変更する
LVM や Linux / DOS や EFI などパーティションタイプを変更する方法
パーティション1を Linux LVM に
sudo sgdisk -t 1:8e00 /deb/sdc
パーティション2を Linux system に
sudo sgdisk -t 2:8e00 /deb/sdc
パーティションのCODEは -L で確認
sudo sgdisk -L
パーティションを削除する
sudo sgdisk -d 9 /deb/sdc
パーティションを作成する
末尾に自動で 50G のパーティションを作成する
sudo sgdisk -n "0::+50G" /dev/sdc
正しくは以下のように書く
gdisk でも割り当てたいディスクサイズを指定するだけの利用が多いので、詳しいことを覚える必要はあまりない。 上記のサンプルは省略形なので、正しくは以下の様に書くのだけれど、正直いって、追加することのほうが多いのであまり番号指定はしない。
sudo sgdisk -n "${パーティション番号}:${開始セクタ}:${終了セクタ}" /dev/sdc
0 はいま使える最小値、つまり自動採番になる。
パーティションに名前をつける
名前をつけておく。gdisk だと初期化時に名前がつくので、意識しない。 sgdisk だと明示的に名前をつける必要がある。
sudo sgdisk -c 11:"my vol No.11" /dev/sdc
なんと日本語の名前もつけられる
sudo sgdisk -c 11:"作業用 No.11" /dev/sdc
よく使う使い方サンプル
ここからはよく使うサンプル
LVMパーティションで末尾に 50GB 確保する
この場合は、複数のオプションを重ねて使う。
sudo sgdisk -n "0::+50G" -t 0:8e00 /deb/sdc
名前もつける。
あわせ技で戦う。
sudo sgdisk -n "0::+50G" -t 0:8e00 -c 0:"Linux LVM" /dev/sdc
パーティションを大量生産する
小さいパーティションを作ってみる
スクリプトと組み合わせる、これこそ真骨頂!!
for i in {1..10}; do sudo sgdisk -n "0::+50G" -t 0:8e00 -c 0:"Linux LVM No.$i" /deb/sdc ; done
さくせいしたパーティションを確認する。
sudo sgdisk -p /dev/sdc Number Start (sector) End (sector) Size Code Name 1 2048 104859647 50.0 GiB 8300 Linux filesystem 2 104859648 209717247 50.0 GiB 8300 Linux filesystem 3 209717248 314574847 50.0 GiB 8300 Linux filesystem 4 314574848 419432447 50.0 GiB 8E00 Linux LVM 5 419432448 524290047 50.0 GiB 8E00 Linux LVM 6 524290048 629147647 50.0 GiB 8300 Linux filesystem 7 629147648 734005247 50.0 GiB 8E00 Linux LVM 8 734005248 838862847 50.0 GiB 8300 Linux filesystem 9 838862848 943720447 50.0 GiB 8300 Linux filesystem
まとめ
gdisk をスクリプトから使うには、sgdisk を使う。
sgdisk を使うと、パーティションテーブルのバックアップとリストアができる。
sgdisk を使うと小さいパーティションをたくさん作ってLVMだとかbtrfs とかの実験に向いてる。
gdisk / cgdisk はREPLで対話形式がわかりやすいけど、再現性が面倒
sgdisk ならブログやwiki に書いておけば残せるのが最大のメリットですね
ただし、日本語の情報が少ないのでもっと普及するといいな
もしかして sfdisk cfdisk と fdisk の関係と同じかも
種類 | fdisk | gdisk |
---|---|---|
タイプ | MBR | GPT 対応 |
ダイアログ | fdisk | gdisk |
curses | cfdisk | cgdisk |
引数処理 | sfdisk | sgdisk |