それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sgdisk(gdisk コマンドライン版) でまとめて変更する使い方

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 / DOSEFI などパーティションタイプを変更する方法

パーティション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

参考資料

http://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html

fdisk - ArchWiki