気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
システム開発

NetBSDとGPT

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
NetBSDのインストールと運用/NetBSD/i386 6.1.x編

NetBSDとGPT

NetBSDとGPT

 PC/AT互換機用のパーティションテーブルには、旧来のMBR/Master Boot Record形式とHDDの大容量化が進み、2TBを超える領域を扱うことができないMBR形式に代わりUEFIと共に考案・採用されるに至ったGPT/GUID Partition Table形式がありますが、NetBSD/i386やNetBSD/amd64では、MBR・GPT共に扱うことができるようになっています。

 NetBSDでGPT形式にフォーマットしたり、GPT形式のパーティションを操作するには、その名もgptコマンドを使います。

 ちなみに現時点では、NetBSDのfdiskコマンドは、GPT形式に未対応ですが、Linux、少なくともDebian 8 Jessie、Fedora 23では、fdiskでGPTに関する一連の操作が可能です。

 man gptによれば、IA64用のFreeBSD 5.0で登場、NetBSD 4.0における変更点によれば、2005/12/26にdkctlが追加、2006/10/15、gptコマンドもNetBSDに移植され、正式リリースから言えば、2007/12/19、NetBSD 4.0から採用された模様、NetBSDでは、amd64だけでなく、i386でも利用可、ただ、当man末尾には、『December 6, 2014』とありつつ、『BUGS』にも取り込み済みの機能の完成度は高いものの、まだまだ不足しているものもある旨、記述があるので更に磨きがかかりそうな雰囲気です。

GPTコマンド

 そんな折り、インストーラ・レスキュー用途として32GBのUSBメモリに移行した後、検証用に使っているGPT形式でフォーマットした8GBのUSBメモリをNetBSD起動中、USBポートに挿してみました。

 尚、物理PCでGPTに対応済みか否かに関わらずブートUSBとして利用できることに気づいてからというものUSBメモリのパーティション形式は、MBRではなく、何かと便利なGPTとしており、このUSBメモリも例外ではありません。

dyna_netbsd$ dmesg | tail
sd0: 7452 MB, 7452 cyl, 64 head, 32 sec, 512 bytes/sect x 15261696 sectors
sd0: fabricating a geometry
sd0: GPT GUID: 78692b73-f3a5-4a1d-a1d6-8cb8ed43620e
dk0 at sd0: bootp
dk0: 102400 blocks at 2048, type:
dk1 at sd0: 976545d7-49ed-4aab-8794-a0eae128a136
dk1: 10485760 blocks at 106496, type:
dk2 at sd0: NetBSD FFS
dk2: 4669407 blocks at 10592256, type: ffs
set{u,g}id pid 3194 (gnome-pty-helper) was invoked by uid 1000 ppid 1385 (gnome-terminal) with fd 2 closed
dyna_netbsd$

 NetBSDでは、SCSI・USB機器は、デバイス/dev/sd?(?は0から始まる数値)として割り当てられますが、GPT形式の場合、更に/dev/dk?に再割り当てされます。

 この内、dk2には、ISOブートもできるのに、あれこれやっていた関係で80MB強のNetBSDのインストーラsysinstが入っていて後でISOブートさせるのでその必要もないのですが、サイズが2.数GBと大きすぎるので縮小してみることにしました。

dyna_netbsd$ sudo gpt show sd0
   start      size  index  contents
       0         1         PMBR
       1         1         Pri GPT header
       2        32         Pri GPT table
      34       2014
    2048    102400      1  GPT part - Linux data
       104448                  2048
  106496  10485760      2  GPT part - Linux data
10592256   4669407      3  GPT part - NetBSD FFSv1/FFSv2
15261663        32         Sec GPT table
15261695         1         Sec GPT header
dyna_netbsd$

 さて、gpt showでUSBメモリの中身を確認。

 その結果を見るとindex 3の位置にNetBSDが入っていてsizeが4669407となっていることがわかります。

 gptのデフォルトのサイズ表記の単位はセクタであり、セクタあたり512バイト。

 ということは、4669407*512=2390736384バイトであり、このパーティションには2.数GB割り当てていた自覚があるので合っている模様。

 一方、sysinstのサイズは、90099712バイト(約86MB)。

 セクタにすると90099712/512=175976セクタ。

dyna_netbsd$ sudo gpt resize -i 3 -a 512 -s 204000 sd0
Partition 3 resized, use:
dkctl sd0 addwedge 10592256 204001
to create a wedge for it
dyna_netbsd$

 ということでgpt resizeを使って先のdmesgで得られたデバイスsd0に対してindex 3の位置にあるパーティションについて少し余裕をみて204000セクタとすることにし、(それを考慮したサイズの為、実際、ここでは必要ないが、)できるだけ512で割りきれる(512の倍数になるように)調整してみたところ、数秒?あっという間にこのように処理されました。

dyna_netbsd$ sudo gpt show sd0
	     start      size  index  contents
	         0         1         PMBR
	         1         1         Pri GPT header
	         2        32         Pri GPT table
                          34                 2014         
	      2048    102400      1  GPT part - Linux data
	            104448                  2048         
	    106496  10485760      2  GPT part - Linux data
	  10592256    204001      3  GPT part - NetBSD FFSv1/FFSv2
	        10796257          4465406         
	  15261663        32         Sec GPT table
	  15261695         1         Sec GPT header
dyna_netbsd$

 改めて全体を確認してみると縮小した結果、index 3の後に空き領域ができていることがわかります。

dyna_netbsd$ sudo gpt add -a 512 -s 204000 -t ffs sd0
Partition 4 added, use:
dkctl sd0 addwedge 10796257 204000
to create a wedge for it
dyna_netbsd$

 後でファイルシステムフォーマット後、マウントできるのか確認したいのでgpt addを使って、この空き領域に新たなパーティションを作成することにしました。

dyna_netbsd$ sudo gpt show sd0
	     start      size  index  contents
	         0         1         PMBR
	         1         1         Pri GPT header
	         2        32         Pri GPT table
	                      34                 2014         
	      2048    102400      1  GPT part - Linux data
	             104448                 2048         
	    106496  10485760      2  GPT part - Linux data
	  10592256    204001      3  GPT part - NetBSD FFSv1/FFSv2
	  10796257    204000      4  GPT part - NetBSD FFSv1/FFSv2
	        11000257          4261406         
	  15261663        32         Sec GPT table
	  15261695         1         Sec GPT header
dyna_netbsd$

 新たに作成したパーティションを確認するとindex 4として新たなパーティションが作成されていることを確認できました。

 これを反映させる為、また、縮小したパーティションのsysinstが起動するのか確認の為、前述のリンク先を確認し、drvctlコマンドで2つのステップを踏むか、マシンを再起動してみようかと思ったら、よく見ると「20141104のNetBSD-currentからは、wedges(くさび)の「再検索」(一度すべて削除して再生成)ができるようになった」とあり、drvctlコマンドではなく、dkctlコマンド一発でいけるようになっている模様。

dyna_netbsd$ dmesg | grep -i ^dk?*
dyna_netbsd$

 (現行では、明示的に反映させないと今作ったindex 4に割り当てられるはずのデバイスdk3含め、/dev/dk?への関連付けがなされないままとなってしまう)

dyna_netbsd$ sudo dkctl sd0 makewedges
successfully scanned /dev/rsd0d.
dyna_netbsd$

 というわけでdkctlコマンドを使ってスキャン。

dyna_netbsd$ dmesg | grep -i ^dk?*
dk0 at sd0: bootp
dk0: 102400 blocks at 2048, type:
dk1 at sd0: 976545d7-49ed-4aab-8794-a0eae128a136
dk1: 10485760 blocks at 106496, type:
dk2 at sd0: NetBSD FFS
dk2: 204001 blocks at 10592256, type: ffs
dk3 at sd0: 00000000-0000-0000-0000-000000000000
dk3: 204000 blocks at 10796257, type: ffs
dyna_netbsd$

 [successfully scanned...]とあり、成功したようなのでdk?*デバイスが関連付けられているかを確認してみると。。。一連の/dev/dk?に加えてdk3が新たに認識されていることがわかります。

 尚、起動前、縮小したパーティションにあったsysinstを起動してみたところ、正常に機能しました。

dyna_netbsd$ sudo newfs /dev/dk3
/dev/rdk3: 99.6MB (204000 sectors) block size 8192, fragment size 1024
using 4 cylinder groups of 24.91MB, 3188 blks, 6208 inodes.
super-block backups (for fsck_ffs -b #) at:
32, 51040, 102048, 153056,
dyna_netbsd$

 そういえば、ファイルシステムのフォーマットをするのを忘れていたので、ここでnewfsコマンドでffsフォーマットしておきます。

 これでマウントできるはず。。。

dyna_netbsd$ sudo mount /dev/dk3 /mnt/usb
dyna_netbsd$ ls /mnt/usb
dyna_netbsd$ sudo touch /mnt/usb/abc.txt
dyna_netbsd$ ls /mnt/usb
abc.txt
dyna_netbsd$ sudo rm /mnt/usb/abc.txt
dyna_netbsd$ sudo umount /mnt/usb
dyna_netbsd$

 新たに割り当てられた/dev/dk3をmountしてみたところ。。。できました。

 と言うわけでNetBSDでGPT形式のパーティション操作もいろいろできることがわかりました。

ウェブ造ホーム前へ次へ