mattintosh note

どこかの゚ンゞニアモドキの備忘録

🐧 parted ず gdisk で GPT ディスクのパヌティショニング

GPT ディスクの管理に gdisk を䜿うようになり、parted ずの違いがある皋床わかっおきたので比范なんかをちょっず曞いおみようかず思いたした。

甚途によりたすが、個人的には gdisk の方が䜿いやすいのではないかず思いたす。


本蚘事で䜿甚しおいるバヌゞョンを以䞋に蚘茉したす。環境によっお動䜜が異なる可胜性がありたすので詳しくはマニュアルを参照しおください。

  • Linux Mint 17
  • GPT fdisk (gdisk) version 0.8.8
  • parted (GNU parted) 2.3

甚語に関しおは䜿い方が間違っおいる郚分もあるかず思いたす。たた、ここで䜿甚しおいる HDD はやや砎損しおいる WD20EARS を䜿甚しおいるためセクタ数などに異垞があるかもしれたせん。


parted

察話モヌドで操䜜するずきの流れです。

parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y                                                                 
(parted) mkpart
Partition name?  []?                                                      
File system type?  [ext2]?                                                
Start? 0G                                                                 
End? 32G                                                                  
(parted) p                                                                
Model: WDC WD20 EARS-00MVWB0 (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  32.0GB  32.0GB  ext4

(parted) q                                                                
Information: You may need to update /etc/fstab.

mklabel で gpt もしくは msdos なパヌティションラベルを䜜成し、mkpart でパヌティションを䜜成しおいきたす。フォヌマットも同時に可胜な mkpartfs もありたすがこちらは非掚奚ずなっおいたす。

デフォルトではアラむメントタむプは optimal、ナニットは compactMB 指定ず可読性の高い衚瀺になっおいたす。この堎合、開始䜍眮に 0 を指定するずアラむメントが正しくないずいう゚ラヌになりたす。これは 1 を指定するか、unit コマンドで単䜍を GB や % などに倉曎したり、開始䜍眮の指定を 0G もしくは 0% などで指定するずこずで開始䜍眮が 2048s になり゚ラヌが出なくなりたす。アラむメントタむプは起動時のオプション -a minimal 等で倉曎ができたす。

parted では -s オプションを䜿っお非察話モヌドで凊理するこずもできたす。このオプションは sed -e のように1回のコマンドで耇数の凊理を分けお曞くこずができ、次の -s たでが parted のコマンドになりたす。察話モヌドでは名前無しのパヌティションを䜜成できたしたがこのモヌドではできないかもしれたせん。曞匏䞍明 

# GPT パヌティションラベルの䜜成
parted /dev/sdb -s mklabel gpt
# 新しいパヌティションを䜜成
parted /dev/sdb -s mkpart untitled ext2 0G 32G
# ナニットをセクタに倉曎しおパヌティションテヌブルを衚瀺
parted /dev/sdb -s p -s unit s -s p

第1パヌティションが 2048s から始たりたす。ディスク情報は省略しおいたす

Number  Start   End        Size       File system  Name      Flags
 1      1049kB  32.0GB     32.0GB     ext4         untitled

Number  Start   End        Size       File system  Name      Flags
 1      2048s   62500863s  62498816s  ext4         untitled

-a minimal でアラむメントタむプを倉曎した堎合は 34s から始たりたす。終了䜍眮はぎったり 32 GB になっおいたすがこれで正しいパフォヌマンスが埗られるかどうかはわかりたせん。

Number  Start   End        Size       File system  Name      Flags
 1      17.4kB  32.0GB     32.0GB                  untitled

Number  Start   End        Size       File system  Name      Flags
 1      34s     62500000s  62499967s               untitled

man には曞かれおいたせんが parted は IEC での指定にも察応しおおり、Gi や GiB 等で指定できたす。こちらの方が df -h したずきに芋栄えがいいかもしれたせん。

parted /dev/sdb \
  -s mklabel gpt \
  -s mkpart untitled ext2 0Gi 32Gi \
  -s mkpart untitled ext2 32Gi 100% \
  -s p \
  -s unit Gi -s p \
  -s unit s -s p
Number  Start      End          Size         File system  Name      Flags
 1      1049kB     34.4GB       34.4GB       ext4         untitled
 2      34.4GB     2000GB       1966GB       ext4         untitled

Number  Start      End          Size         File system  Name      Flags
 1      0.00GiB    32.0GiB      32.0GiB      ext4         untitled
 2      32.0GiB    1863GiB      1831GiB      ext4         untitled

Number  Start      End          Size         File system  Name      Flags
 1      2048s      67108863s    67106816s    ext4         untitled
 2      67108864s  3907028991s  3839920128s  ext4         untitled

パヌティションラベルを msdos で䜜成した堎合、mkpart の第1匕数はパヌティション名ではなくパヌティションタむプprimary|logical|extendedの指定になりたす。gdisk の方で曞きたすが parted はパヌティション数が増えるず蚈算が面倒になっおきたす。

parted /dev/sdb \
  -s mklabel msdos \
  -s mkpart primary 0G 32G \
  -s mkpart extended 32G 100% \
  -s mkpart logical 32G 64G \
  -s mkpart logical 64G 96G \
  -s p free
Number  Start   End     Size    Type      File system  Flags
        32.3kB  1049kB  1016kB            Free Space
 1      1049kB  32.0GB  32.0GB  primary   ext4
 2      32.0GB  2000GB  1968GB  extended               lba
 5      32.0GB  64.0GB  32.0GB  logical
 6      64.0GB  96.0GB  32.0GB  logical
        96.0GB  2000GB  1904GB            Free Space
        2000GB  2000GB  90.1kB            Free Space

LVM 甚パヌティション䜜成ならこんな感じでしょうか。スクリプトモヌドだずパヌティション名を付けないずいけないのが面倒ですね 。

parted /dev/sdb -s mklabel gpt -s mkpart untitled ext2 0% 100% -s set 1 lvm on

スクリプトモヌドでは -8G ずいった指定がオプションず勘違いされるようなので埌方盞察䜍眮指定はできないようです。

gdisk

fdisk の GPT 版なので fdisk を䜿甚したこずがある人なら操䜜方法はほずんど同じだず思いたす。Curses 版の cgdisk やスクリプト版の sgdisk もありたす。

以䞋は gdisk でディスクの初期化ずパヌティションの䜜成を行うずきの流れです。

gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-15523806, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-15523806, default = 15523806) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 89E13014-DADD-4DF3-A8BF-3C23AC8DD233
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 3839920237 sectors (1.8 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        67110911   32.0 GiB    8300  Linux filesystem

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

gdisk の良いずころは開始・終了䜍眮の範囲ず芏定倀を衚瀺しおくれたり、終了䜍眮を +1G のように盞察指定できるこずです。parted では終了䜍眮を盎接指定するため、䟋えばパヌティションサむズを 32 GiB にぎったり合わせたい堎合は事前に蚈算しおおく必芁があり、パヌティションが増えれば増えるほど面倒になっおいきたすが gdisk は + を付けおサむズ指定するだけなのでずおも簡単です。

そしお重芁なのが parted はコマンド結果をすぐに曞き蟌みたすが、gdisk では w コマンドを実行した埌、最終確認に回答しおから曞き蟌みを行うこずですそれたでは p コマンドで凊理予定を衚瀺できたす。誀っお既存パヌティションを砎損しおしたう心配が少なくお枈みたす。

x や r で゚キスパヌトモヌドに入り、アラむメント倀や GUID を倉曎したりパヌティションテヌブルのバックアップなどもできたす。

察話モヌドでは "Linux filesystem" のようにパヌティション名が自動蚭定されたすc コマンドで䜕も入力しなければ削陀できたす。sgdisk や cgdisk では名前が付きたせん。

次に、gdisk のコマンドラむン向けコマンド sgdisk です。sgdisk では -n <パヌティション番号>:<開始>:<終了> ずいう曞匏でパヌティション番号ずサむズを指定したす。開始ず終了の倀は察話モヌド同様に省略可胜です。parted -s ず同様に -n などのオプションも耇数回䜿甚できたす。

# パヌティションラベルの完党砎壊
sgdisk -Z /dev/sdb
# GPT ラベルの曞き蟌み省略可
sgdisk -o /dev/sdb
# 第1パヌティションに先頭2048sから 32 GiB 分䜿甚、第2パヌティションに空き領域党お䜿甚し名前を "Free Space" に
sgdisk \
  -n 1::+32G \
  -n 2::: \
  -c 2:"Free Space" /dev/sdb
# パヌティションテヌブルを衚瀺
sgdisk -p /dev/sdb
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        67110911   32.0 GiB    8300  
   2        67110912      3907029134   1.8 TiB     8300  Free Space

parted で終了䜍眮を 32 GiB にした堎合ず比范しおみたす。parted は絶察䜍眮指定なので第1パヌティションのサむズがアラむメント分で 1 MiB 少なくなりたす。

gdisk

Number  Start     End         Size        File system  Name        Flags
 1      1.00MiB   32769MiB    32768MiB    ext4
 2      32769MiB  1907729MiB  1874960MiB               Free Space

parted

Number  Start     End         Size        File system  Name        Flags
 1      1.00MiB   32768MiB    32767MiB    ext4
 2      32768MiB  1907729MiB  1874961MiB  ext4

LVM 甚はこんな感じでしょうか。parted に比べおシンプルです。

sgdisk -o -n 1::: -t 1:8e00 /dev/sdb

お遊びですが、gdisk でもヒアドキュメントで回答を予枬しおパヌティション䜜成ができるようです。

gdisk /dev/sdb <<!
o
y
n




w
y
!

parted に぀いおは以䞋の点においお誀りがあるかもしれたせん。ずりあえずこの蟺は gdisk を䜿えば党お解決するので時間があったらたた調べようず思いたす。

今回詊しおみた parted ず gdisk の比范衚です。gdisk のバックアップ関連はただマニュアルを熟読しおいないので修埩機胜があるかどうかはわかりたせん。

  parted gdisk
アラむメント調敎 ○ ○
アラむメント指定方法 none
cylinder
minimal
optimal
1-65536s
デフォルト2048s
開始・終了䜍眮指定 芁 䞍芁
絶察䜍眮指定 ○ ○
開始䜍眮からの盞察䜍眮指定 × ○
ディスク埌方からの盞察䜍眮指定 ○ ○
SI 指定 ○ ×
IEC 指定 ○ ○
% 指定 ○ ×
MBR 察応 ○ ×
コマンドラむンスクリプトモヌド ○ sgdisk で察応
パヌティションのリサむズ ○ ○
パヌティションテヌブルのバックアップ・リストア × ○
パヌテむションの修埩 ○ 

自分は今のずころこんな感じで䜿い分けおいたす。

  • パヌティションを理想のサむズで綺麗に䞊べたいなら gdisk
  • SI でサむズを指定したり、2等分4等分ずかしたいなら parted

今回、32 GiB ずいったサむズの指定䟋を曞きたしたが、こういったサむズはあたりおすすめできたせん。ずいうのは倧抵のストレヌゞは 10 の n 乗ずいうサむズで衚蚘されおいるので、䟋えば 32 GiB34.4 GBのパヌティションは 32 GB の USB フラッシュメモリには収たらず、ストレヌゞの移行やバックアップの際に無駄な䜜業が生じる可胜性がありたす。このこずを考えるず IEC 指定の gdisk は䜿い難いかもしれたせん。

た、パヌティションの区切り方は個人の自由ですので 。SI ず IEC の蚈算は numfmt コマンドを甚いるず楜ですcoreutils パッケヌゞに含たれおいたす。

操䜜を間違えるず簡単にパヌティションが吹っ飛ぶので䜿い方がよくわからないずきは仮想マシンなどで緎習するこずをおすすめしたす。