GEOM PART でディスクパーティションの管理を行う

GEOM

今回は GEOM PART によるディスクのパーティション管理について解説します.
今まで,パーティションを作成せずに newfs してマウントを行っていました.このようにパーティション自体は必須ではありません.
用途に応じて分割したい.だったり,複数のディスクの容量をパーティション単位で合わせたい.などだったりの際にパーティションによる管理を行います.

パーティションとは

そもそも,コンピューターにおけるパーティションとは何か.を簡単に説明します.

現実世界でも部屋の空間を仕切る為にパーティションを用いる事があると思います.これをコンピューター (ディスク) の世界で実現するものがパーティションです.

一つのディスクでパーティションが無い場合,OS 領域とデータ領域が混ざった状態になり,データが肥大してディスクが枯渇,OS に影響を及ぼす事があります.
これを,パーティションを OS 用 データ用で分割して利用した場合,データ用が枯渇するのみで OS 用はまだ空きがある為システムとしての影響は最小化する事ができます.
パーティションの分割はこのようなイメージになります.

パーティションの種別

パーティションには大きく二つあります.(細かくはもっとあります) ここでは主要な二つのパーティションについて解説します

MBR

Master Boot Record の略称で 1983年より利用されている古いパーティションタイプになります.
ドライブの一番最初のセクターを MBR というのですが,これを含めてパーティションタイプとして呼ばれています.

MBR パーティションの構成はこのような形となり,基本パーティションとしては4つです.4つ目が拡張パーティションとして作成されるケースが多く,さらにこの中にパーティションを作成する事が可能です.

MBR パーティションには次のような特徴があります

  • パーティションの作成できる数に制限がある
    • 基本パーティションは4つまでしか作る事ができない
  • OS の起動は基本パーティションからのみ実施可能
    • 拡張パーティションからの起動はできない
  • MBR で扱えるディスクサイズは 2TB まで
    • 2TB を超えるディスクを利用する場合は GPT にする必要がある
  • 古くから利用されているため,様々な OS (昔の OS から今の OS) でサポートされている

2TB 未満のディスクにおいてはいまでも MBR は現役で利用されます.例えば USB メモリーや SD カードなどは MBR での利用が多いのではないでしょうか.

GPT

GUID Partition Table の略称です.ディスクが大容量化してきた事でパーティション自体も 2TB を超えるものが望まれてきており,新しい規格として登場しました.
GPT 自体はインテルが提唱した EFI 標準の一部となります.
現在の有効な (アクティブな・サポートされている) 利用されている OS は GPT を扱う事ができます.

GPT の構成はこのようになっています.

もう少し説明します.

  • 保護MBR
    一番先頭にあるセクターが MBR として構成してあり,MBR しか扱えないシステムに繋いだとしても破損を防ぐ目的で利用されます.
    ここのレコードには,ディスク全体が一つのパーティションである旨の情報が記載されており,MBR しか利用できないシステムからは1つの大きなパーティションとして見えます.
  • プライマリー GPT ヘッダー
    プライマリー GPT ヘッダーは,パーティションエントリーの場所,パーティションテーブル情報,サイズ情報及びチェックサムが記録されます.
  • パーティションエントリー
    パーティションエントリーには,パーティションの種別を表す情報,パーティションの開始と終了のアドレスが記録されます.
    GPT の仕様としては無制限に作成可能なのですが,OS によって制限があります.例えば Windows だと 128 個の制限があります.
  • バックアップパーティションエントリー
    パーティションエントリーのバックアップです.先頭にあるパーティションエントリーが破損した場合に個々のエントリーで復元を試みます.
  • バックアップ GPT ヘッダー
    GPT ヘッダーのバックアップです.先頭にあるパーティションエントリーが破損した場合に個々のエントリーで復元を試みます.

GPT パーティションには次のような特徴があります.

  • パーティションの作成できる数に制限はない
    • OS による制限はあるので,そこは確認が必要
  • 2TB 以上のパーティションを作成できる
    • 仕様上一つのパーティションで作成できる最大は 8ZB
    • OS により制限があり,Windows は 18EB となる
  • 古い OS では利用ができない
    • 互換性の観点で大きな空のパーティションに見える状態となり,破壊されるわけではない

gpart によるパーティションの管理

パーティションの説明が終わった所で,gpart によるパーティションの管理 (作成・修正・削除など) の説明に移ります.

パーティションスキームを作成する

MBR なのか GPT なのか,一番最初に決めて作成する必要があります.このパーティションスキームを作成する為のコマンドが gpart create になります.

MBR パーティションを作成する

MBR のパーティションを作成する場合,次のコマンドを実行します.
-s mbr で MBR パーティションを作成する.という事になり,作成するデバイスを引数に渡します.

# gpart create -s mbr da2
da2 created

エラーが無く,created が表示されたら成功です.実際にどのように出来ているのかは gpart list コマンドで確認が可能です.

# gpart list da2
Geom name: da2
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621439
first: 63
entries: 4
scheme: MBR
Consumers:
1. Name: da2
   Mediasize: 10737418240 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0

scheme が MBR である事が確認できます.

GPT パーティションを作成する

コマンドは MBR と同様になり,スキームの指定が変わり,-s gpt を指定します.

# gpart create -s gpt da3
da3 created

エラーが無く,created が表示されたら成功です.実際にどのように出来ているのかは gpart list コマンドで確認が可能です.

# gpart list da3
Geom name: da3
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621434
first: 6
entries: 128
scheme: GPT
Consumers:
1. Name: da3
   Mediasize: 10737418240 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0

パーティションを作成する

実際のパーティションを作成していきます.MBR / GPT 問わず基本的には変わりません.

以下の二つの例は MBR と GPT のディスクにおいてそれぞれ 5GB のパーティションを作成しています.gpart add がパーティションを作成するコマンドで,続いてパーティションの種別を指定しています.

da2 で指定しているのは freebsd となります.これは da2 が MBR で作成しているためとなります.
da3 では freebsd-ufs と指定しています.これは GPT で作成しているためこの指定が使えます.
freebsd-xxx 以外にも指定する事ができます.例えば,fat16 や fat32 なども指定できます.

-s はパーティションの容量です.M/G などの単位を含めた指定が可能です.

# gpart add -t freebsd -s 5G da2
da2s1 added

# gpart add -t freebsd-ufs -s 5G da3
da3p1 added

また,パーティションにラベル名を付与する事も可能です.残量を全て割り当てるため -s は除外しています.
-l でラベルを付与する事ができます.そして,MBR のパーティションにはラベルが付与できません.GPT へは付与ができます.その為 da2 はエラーとなっています.

# gpart add -t freebsd -l da2_2nd da2
gpart: Invalid argument

# gpart add -t freebsd-ufs -l da3_2nd da3
da3p2 added

ラベルが付与された da3 の状態を表示してみます.
da3p1 の label は null になっており,da3p2 の label が da3_2nd となっています.

# gpart list da3
Geom name: da3
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621434
first: 6
entries: 128
scheme: GPT
Providers:
1. Name: da3p1
   Mediasize: 5368709120 (5.0G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,GPT,de8403ac-981d-11ee-967a-0050568da523,0x8,0x140000)
   rawuuid: de8403ac-981d-11ee-967a-0050568da523
   rawtype: 516e7cb6-6ecf-11d6-8ff8-00022d09712b
   label: (null)
   length: 5368709120
   offset: 32768
   type: freebsd-ufs
   index: 1
   end: 1310727
   start: 8
2. Name: da3p2
   Mediasize: 5368643584 (5.0G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(2,GPT,bd0487eb-981f-11ee-967a-0050568da523,0x140008,0x13fff0)
   rawuuid: bd0487eb-981f-11ee-967a-0050568da523
   rawtype: 516e7cb6-6ecf-11d6-8ff8-00022d09712b
   label: da3_2nd
   length: 5368643584
   offset: 5368741888
   type: freebsd-ufs
   index: 2
   end: 2621431
   start: 1310728
Consumers:
1. Name: da3
   Mediasize: 10737418240 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0

ラベルを付与した場合はラベルでのアクセスが可能です.newfs も mount もラベルに対して行う事が可能です.
従って,デバイスの順番が変わったとしてもラベルを用いたパス指定であれば変更の必要がありません.

# ls -l /dev/gpt
total 0
crw-r-----  1 root  operator  0x6f Dec 11 21:20 da3_2nd

# newfs /dev/gpt/da3_2nd
/dev/gpt/da3_2nd: 5119.9MB (10485632 sectors) block size 32768, fragment size 4096
        using 9 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
super-block backups (for fsck_ffs -b #) at:
 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776

# mount /dev/gpt/da3_2nd /mnt

パーティションの修正を行う

パーティション情報の修正も gpart で行う事が可能です.

容量を変更する (増やす)

今までの流れで da2 は二つ目のパーティション作成に失敗しており,容量が余っている状態です.ですので,一つ目のパーティションを拡張してみたいと思います.
パーティションのサイズ変更を行う場合は gpart resize を利用します.

オプションの -i はインデックスになります.何番目のパーティションを操作するかを指定します.今回サイズは指定していないためすべての領域を一つ目のパーティションに割り当てた事になります.

# gpart resize -i 1 da2
da2s1 resized

da2 の状態を見てみましょう.
da2s1 の容量が 10G となっており,すべての容量が割り当てられたことが確認できます.

# gpart list /dev/da2
Geom name: da2
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621439
first: 63
entries: 4
scheme: MBR
Providers:
1. Name: da2s1
   Mediasize: 10737156096 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,MBR,00000000,0x40,0x27ffc0)
   rawtype: 165
   length: 10737156096
   offset: 262144
   type: freebsd
   index: 1
   end: 2621439
   start: 64
Consumers:
1. Name: da2
   Mediasize: 10737418240 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0

容量を変更する (減らす)

パーティションの容量を減らすことも可能です.
先ほど増やした da2 の容量をもとに戻す (5G) とした場合はこのようになります.
ただし,ファイルシステムの拡張はできても,縮小はできないため中のデータは無くなる前提になるのを理解してください.

# gpart resize -i 1 -s 5G da2
da2s1 resized

# gpart list /dev/da2
Geom name: da2
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621439
first: 63
entries: 4
scheme: MBR
Providers:
1. Name: da2s1
   Mediasize: 5368709120 (5.0G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,MBR,00000000,0x40,0x140000)
   rawtype: 165
   length: 5368709120
   offset: 262144
   type: freebsd
   index: 1
   end: 1310783
   start: 64
Consumers:
1. Name: da2
   Mediasize: 10737418240 (10G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0

ラベルを付ける・修正する

パーティションへのラベル付けができる旨説明をしました.後からラベルの付与,変更が可能ですのでその方法を紹介します.

da3p1 はラベルを付けずにパーティションを作成しましたので,これにラベルを付与したいと思います.
このような修正は gpart modify コマンドで実施します.

# gpart modify -i 1 -l da3_1st da3
da3p1 modified

パーティションタイプを変更する

パーティションタイプを付けた後,変えたい.という場合にも gpart modify で変更が可能です.

# gpart modify -i 1 -t freebsd-zfs da3
da3p1 modified

ラベルを付け,パーティションタイプを変更した da3s1 の結果は次のとおりとなります.

# gpart list da3
Geom name: da3
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 2621434
first: 6
entries: 128
scheme: GPT
Providers:
1. Name: da3p1
   Mediasize: 5368709120 (5.0G)
   Sectorsize: 4096
   Stripesize: 32768
   Stripeoffset: 0
   Mode: r0w0e0
   efimedia: HD(1,GPT,de8403ac-981d-11ee-967a-0050568da523,0x8,0x140000)
   rawuuid: de8403ac-981d-11ee-967a-0050568da523
   rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
   label: da3_1st
   length: 5368709120
   offset: 32768
   type: freebsd-zfs
   index: 1
   end: 1310727
   start: 8

パーティション・スキームを削除する

スキーム,パーティションを削除する事も gpart で行うことができます.

パーティションを削除する

間違って作成した.最初から作り直したい.などなどの理由でパーティションを削除したい場合は gpart delete で可能です.
da3p2 を削除してみます.

# gpart delete -i 2 da3
da3p2 deleted

gpart list ではなく,gpart show で結果を見てみます.

# gpart show da3
=>      6  2621429  da3  GPT  (10G)
        6        2       - free -  (8.0K)
        8  1310720    1  freebsd-zfs  (5.0G)
  1310728  1310707       - free -  (5.0G)

スキームを削除する

スキーム情報を削除する場合は gpart destroy コマンドを利用します.
da3 を例にパーティションが残っている状態で実行してみます.

# gpart destroy da3
gpart: Device busy

このように Device busy のエラーとなります.
パーティションを全て削除してから再度実行すると次のとおりスキームの削除まで完了できます.

# gpart delete -i 1 da3
da3p1 deleted

# gpart destroy da3
da3 destroyed

以上で GEOM PART についての説明を終わりたいと思います.

コメント

タイトルとURLをコピーしました