今回は GEOM PART によるディスクのパーティション管理について解説します.
今まで,パーティションを作成せずに newfs してマウントを行っていました.このようにパーティション自体は必須ではありません.
用途に応じて分割したい.だったり,複数のディスクの容量をパーティション単位で合わせたい.などだったりの際にパーティションによる管理を行います.
- GEOM に関するお話
- FreeBSD GEOM 再々学習
- GEOM CONCAT (ディスクの連結) を使ってみる
- GEOM STRIPE (ストライプ/RAID0) を使ってみる
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (1)
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (2)
- GEOM STRIPE + MIRROR で RAID10 を構成してみる
- GEOM RAID3を使ってみる
- GEOM CACHE を使ってみる
- GEOM GVIRSTORを使ってみる
- GEOM GATE を使ってみる
- GEOM LABEL で名前による管理を行う
- GEOM PART でディスクパーティションの管理を行う
- GEOM MULTIPATH でマルチパスを構成する (1)
- GEOM MULTIPATH でマルチパスを構成する (2)
パーティションとは
そもそも,コンピューターにおけるパーティションとは何か.を簡単に説明します.
現実世界でも部屋の空間を仕切る為にパーティションを用いる事があると思います.これをコンピューター (ディスク) の世界で実現するものがパーティションです.
一つのディスクでパーティションが無い場合,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 についての説明を終わりたいと思います.
コメント