1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【河豚板】usbfadmのその先へ ── OpenBSDのパーティションを理解する

1
Last updated at Posted at 2026-07-23

初めに

OpenBSDライブシステム「河豚板」では、usbfadmというツールを用いて、USBメモリのデータ保存領域を拡張したり、別のUSBメモリに、スワップパーティションやデータ保存領域のサイズを指定して新たな河豚板メディアを作成したりできます。

しかし、それ以上のこと、例えば、

  • 独自に別のパーティションを作成し、マウントして使う
  • 河豚板ではなく素のOpenBSDでパーティションを操作・設定する

場合などは、河豚板のusbfadmツールではなく、OpenBSDに元々インストールされたコマンドを用いて作業を行うことになります。

OpenBSDには、FAQ (Frequently Asked Questions)オンラインマニュアルといった各種ドキュメントが完備されており、それらを参照することで、上に挙げたような操作の詳細について知ることができます。

とはいえ、このような資料を初めて参照したとき、その概要やそれぞれコマンドの関係を理解するのもなかなか大変です。

この文書は、そのような場合に必要となる知識や概念を補足するものです。

概要

まず、OpenBSDでパーティションを操作するコマンドを説明する前に、基本的な事項について確認していきます。

OpenBSDのディスクデバイス

ディスクデバイスの種類

sd
ハードディスク、SSD、USBメモリ、SDカードなど、ほとんどのディスクデバイスはsdというデバイス名で表わされます。
wd
IDEインターフェースで接続されるディスクです。以前はこのwdのディスクが主流でしたが、現在ではほとんど使われていません。
その他
CDやDVDなどの光学系のディスクはcd、フロッピーディスクはfdとなっています。

命名規則

ディスクデバイスは、OSが起動時に認識した順にsd0, sd1... のように数字が付きます。

OS起動時のメッセージは、dmesg というコマンドで見ることができます。以下のようにするとdmesgの出力からディスクデバイスの認識状態だけをみることができます。

$ dmesg | grep -E '^(cd|fd|sd|wd)[0-9]' 
sd0 at scsibus1 targ 0 lun 0: <ATA, KIOXIA-EXCERIA S, SBFA> naa.58ce38e80185b12d
sd0: 915715MB, 512 bytes/sector, 1875385008 sectors, thin
sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd1: 894722MB, 512 bytes/sector, 1832391712 sectors

2種類のパーティション

前項で説明したディスクデバイスを実際に使用するにあたって、そのディスクを用途ごとに領域を分けます。

この領域のことをパーティションと呼びます。

OpenBSDでは、このパーティションは二種類あり、それぞれ、fdiskパーティション、disklabelパーティションと呼んでいます。

このようにパーティションが2種類あるのは、BSD系OSの特徴です。

fdiskパーティション

これは、PCでディスクの領域分割に使用されるパーティションです。

PCでは、ほぼ全てのOSがこのfdiskパーティションによって領域分割をしているので、ご存じの方も多いでしょう。

OSによっては、一つのOSが複数のパーティションを使用したりしますが、OpenBSDの場合はほとんどの場合、一つのディスクにつき一つのパーティションしか使用しません。

fdiskコマンドを使用して実際のfdiskパーティションの内容を表示すると、以下のようになります。

# fdisk sd0
Disk: sd0      geometry: 38913/255/63 [625142448 Sectors]
Offset: 0      Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: 07      0  32  33 -     12 223  19 [        2048:      204800 ] NTFS
 1: 07     12 223  20 -  23076 206  42 [      206848:   370522112 ] NTFS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 3: A6  23076 206  43 -  38913  80  63 [   370728960:   254413488 ] OpenBSD

fdisk_part_ntfs.png
この様子を図示したのが上の図です。

  • Windows (NTFS) はパーティション0とパーティション1を使用しています

  • OpenBSDはパーティション3を使用しています

  • パーティション2は使用されていません

  • LBA Infoのstartがパーティションのディスク上での開始位置、sizeがそのパーティションの大きさを表わします。LBAはLogical Block Addressingの略で、ディスクが読み書きを行うブロックを一単位として位置やサイズを表します。ブロックの単位は1セクタ(通常512バイト)です

  • C H Sというのはそれぞれ、Cylinder, Head, Sectorの略です。これはハードディスクの構造に着目した指定方法です。以前はこの指定方法が主に用いられていましたが、現在はLBAによる指定方法があるため、CHSは気にする必要はありません

MBRとGPT

現在、fdiskパーティションには、MBR (Master Boot Record)とGPT (GUID Partition Table)という2種類があります。

これは、もともとはMBRしかなかったのですが、MBRには

  • 作成できるパーティションは最大4つまで
  • MBRが扱える最大のディスクサイズは2TB

という制限があり、この制限を克服するためにGPTが導入されました。現在はGPTが主流です。

MBRとGPTは異った規格であり互換性はありませんが、ディスクの中を領域分割する、という考え方は同じです。

現在は多くのOSでGPTが採用されていますが、配布版の河豚板LiveUSBではMBRを使用しています。そのため、この文書ではMBRを中心に説明していきます。

disklabelパーティション

前項のfdiskパーティションの説明で述べたように、一台のディスク中、OpenBSDの領域は一つだけです。

実際にOpenBSDを動作させるには、それに加え、さらにこの領域を複数の領域に区切って使用します。

このための領域分割をdisklabelパーティションと呼びます。

つまり、OpenBSDでは、fdiskパーティションでOS全体の領域を確保し、disklabelパーティションを使用してその内部をさらに分割をするという二重構造になっています。

先程のディスクをdisklabelコマンドを用いて表示させると以下のようになります。

disklabelには、ディスクの領域情報の他にも、ディスクに関する種々の情報が書き込まれています。

# disklabel sd0
# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: MARSHAL MAL2320S
duid: 34dc237d4adfe5bb
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 38913
total sectors: 625142448
boundstart: 370728960
boundend: 625142448

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:         67119552        404291808  4.2BSD   2048 16384 12960 
  b:         33562830        370728960    swap                    
  c:        625142448                0  unused                    
  d:         16787904        471411360  4.2BSD   2048 16384 12960 
  e:         68485088        488199264  4.2BSD   2048 16384 12960 
  f:         68458080        556684352  4.2BSD   2048 16384 12960 # /opt
  i:           204800             2048    NTFS                    
  j:        370522112           206848    NTFS                    

fdiskパーティションとdisklabelパーティションの関係を図示すると、下図のようになります。
fdisk_part_disklabel.png

  • パーティションの名前はaからpまでの16個です
  • このうち、以下のパーティションは役割りが固定されています
    • a: ルートパーティション
    • b: スワップパーティション
    • c: ディスク全体を表します
  • また、他のOSのパーティション(WindowsのFATやLinuxのEXTFSなど)には、慣習的にi, j, kなどが割り当てられることが多いです
これらパーティション名は、例えばsd0a, sd2d, wd0bのように、デバイス名の後にパーティション名をつけることで、実際のパーティションを指定します。

OpenBSDバウンダリ

disklabelコマンドの出力を見ると、boundstartとboundendという項目があります。

これをOpenBSDバウンダリ(境界)といい、disklabelパーティションを作成や削除などの操作ができるのは、このOpenBSDバウンダリの範囲内、つまりboundstartからboundendまでの範囲に限られます。

OpenBSDバウンダリの範囲は、fdiskのOpenBSDパーティションの範囲と同一である必要があります。

DUID

さらにdisklabelコマンドの出力にはduidという項目があります。

DUIDとは、Disklabel Unique Identifiersの略で、そのディスクに割り当てられる16進数で16桁のランダムな数値です。
そのため、このDUIDはディスクごとに固有で、ディスクを一意に指定することができます。

sd0やsd1といったディスクデバイスの名前は、外付けのUSB機器の場合などは特に、どのような機器が接続されているかによって、sd1がsd0になったり、あるいはsd2になったりします。

DUIDはディスク固有の値であり、機器の接続状態によって変ってしまうことはありませんので、今説明したような問題は生じません。

このDUIDでパーティションを指定するには、DUIDに続き、ピリオドとパーティション名を付加します。

例えば、上に挙げたsd0aやsd0cでは、34dc237d4adfe5bb.aや34dc237d4adfe5bb.cと書きます。

DUIDは以下のように、sysctlコマンドを実行することで、そのコンピュータに接続された全てのディスクデバイスのDUIDを見ることができます。

# sysctl hw.disknames
hw.disknames=cd0:,sd0:34dc237d4adfe5bb,rd0:d164065b693f0201,sd1:9340cf0452f5116d,fd0:,vnd4:,vnd5:679d2197e369654a

実践編

それでは、いままでの説明を踏まえて、実際にパーティションを作成し、マウントしてみましょう。

例として、USBメモリなど、32GBの外付けストレージに、

  • OpenBSDの4GBのスワップパーティション
  • OpenBSDの20GBのデータ用パーティション
  • 残りの部分を他OSとのデータ交換に使えるようWindowsのFATパーティション

を作成してみます。
fdisk_part_example.png

今回の例では、データ保存用のみの用途を想定します。OSが起動可能なデバイスを作成するとなると、パーティションの作成以外にも色々な処理が必要となるため、今回は取り上げません

fdiskパーティションを初期化

まず、fdiskコマンドで初期化を行い、結果を表示してみます。

fdiskコマンドでパーティションの初期化を行うと、今までそのディスクに保存されていたデータは読み出せなくなります。以下のコマンドを実行する前にdmesgコマンドや/var/log/messagesログファイルなどで、ディスクの確認を確実に行ってください。

test# fdisk -i sd1
Do you wish to write new MBR? [n] y
Writing MBR at offset 0.
test# fdisk sd1
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
*3: A6      0   1   2 -   4177  85   4 [          64:    67108800 ] OpenBSD
test# 

このように、fdisk -iコマンドを使うとディスクのほぼ全部がOpenBSD用に割り当てられます。つまり、OpenBSD専用になるわけです。

OpenBSD領域が0から始まっていないのは、0〜63の範囲にはシステム起動用のプログラム(ブートローダ)やfdiskやdisklabelのパーティション情報が書き込まれるからです。

fdiskパーティションの変更

今回はWindowsのFAT領域も作りたいので、パーティションを変更します。

まず、OpenBSD領域を縮めます。次に、空いた領域にFATのパーティションを作成します。

パーティション情報を変更するには、-eオプションを付けてfdiskを対話モードで起動します。

test# fdisk -e sd1
Enter 'help' for information
sd1: 1> p  ← pコマンドでパーティション情報を表示
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
*3: A6      0   1   2 -   4177  85   4 [          64:    67108800 ] OpenBSD

パーティションを変更するには、対話モードのeコマンドを使用します。

sd1: 1> e 3
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*3: A6      0   1   2 -   4177  85   4 [          64:    67108800 ] OpenBSD
Partition id ('0' to disable) [01 - FF]: [A6] (? for help)  ← 変更しない
Do you wish to edit in CHS mode? [n]                        ← 項目はEnterのみ
Partition offset [0 - 67108863]: [64]                       ← 入力します
Partition size [1 - 67108800]: [67108800] 24g  ← サイズを変更
確認してみます。
sd1*: 1> p
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
*3: A6      0   1   2 -   3133   1   4 [          64:    50331648 ] OpenBSD

なお、pによる表示はgやmを付けることで、GBやMBなど、単位を変えて表示できます。

sd1*: 1> p g
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0G] Unused
 1: 00      0   0   0 -      0   0   0 [           0:           0G] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0G] Unused
*3: A6      0   1   2 -   3133   1   4 [          64:          24G] OpenBSD

OpenBSD領域を縮めることができましたので、次にFAT領域を追加してみます。

パーティション0をFAT領域にしてみましょう。
パーティションは、その種類ごとにパーティションIDというものが割り当てられています。まず、パーティションIDの一覧を表示してみます。

sd1*: 1> e 0
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
Partition id ('0' to disable) [01 - FF]: [00] (? for help) ?
Choose from the following Partition id values:
00 Unused         20 Willowsoft     66 NetWare 386    A9 NetBSD
01 FAT12          24 NEC DOS        67 Novell         AB MacOS X boot
02 XENIX /        27 Win Recovery   68 Novell         AF MacOS X HFS+
03 XENIX /usr     38 Theos          69 Novell         B7 BSDI filesy*
04 FAT16          39 Plan 9         70 DiskSecure     B8 BSDI swap
05 Extended DOS   40 VENIX 286      75 PCIX           BF Solaris
06 FAT16B         41 Lin/Minux DR   80 Minix (old)    C0 CTOS
07 NTFS           42 LinuxSwap DR   81 Minix (new)    C1 DRDOSs FAT12
08 AIX fs         43 Linux DR       82 Linux swap     C4 DRDOSs < 32M
09 AIX/Coherent   4D QNX 4.2 Pri    83 Linux files*   C6 DRDOSs >=32M
0A OS/2 Bootmgr   4E QNX 4.2 Sec    84 OS/2 hidden    C7 HPFS Disbled
0B FAT32          4F QNX 4.2 Ter    85 Linux ext.     DB CPM/C.DOS/C*
0C FAT32 (LBA)    50 DM             86 NT FAT VS      DE Dell Maint
0E FAT16B (LBA)   51 DM             87 NTFS VS        E1 SpeedStor
0F Extended LBA   52 CP/M or SysV   8E Linux LVM      E3 SpeedStor
10 OPUS           53 DM             93 Amoeba FS      E4 SpeedStor
11 OS/2 hidden    54 Ontrack        94 Amoeba BBT     EB BeOS/i386
12 Compaq Diag    55 EZ-Drive       99 Mylex          EE EFI GPT
14 OS/2 hidden    56 Golden Bow     9F BSDI           EF EFI Sys
16 OS/2 hidden    5C Priam          A0 NotebookSave   F1 SpeedStor
17 OS/2 hidden    61 SpeedStor      A5 FreeBSD        F2 DOS 3.3+ Sec
18 AST swap       63 ISC, HURD, *   A6 OpenBSD        F4 SpeedStor
19 Willowtech     64 NetWare 2.xx   A7 NeXTSTEP       FF Xenix BBT
1C ThinkPad Rec   65 NetWare 3.xx   A8 MacOS X

他OSとのデータ交換などには、パーティションIDが0CのFAT32 (LBA)がよさそうです。

Partition id ('0' to disable) [01 - FF]: [00] (? for help) 0C
Do you wish to edit in CHS mode? [n] 
Partition offset [0 - 67108863]: [0] 50331712 ← OpenBSD領域のすぐ後のセクタ位置です。
Partition size [1 - 16777152]: [1] *  ← *は「残り全て」       64+50331648=50331712

このように、新しくパーティションを作成する場合は、直前のパーティションの「開始位置+サイズ」から、新しいパーティションの開始位置を計算する必要があります。これには、電卓などがあると便利かもしれません。

OpenBSDでは、X Windowではxcalc、コマンドラインではbcという電卓プログラムが利用できます。

ここでいま一度、設定内容を確認してみましょう。

sd1*: 1> p
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 0C   3133   1   5 -   4177  85   4 [    50331712:    16777152 ] FAT32 (LBA)
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] Unused
*3: A6      0   1   2 -   3133   1   4 [          64:    50331648 ] OpenBSD
sd1*: 1> p g
Disk: sd1	geometry: 4177/255/63 [67108864 Sectors]
Offset: 0	Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 0C   3133   1   5 -   4177  85   4 [    50331712:           8G] FAT32 (LBA)
 1: 00      0   0   0 -      0   0   0 [           0:           0G] Unused
 2: 00      0   0   0 -      0   0   0 [           0:           0G] Unused
*3: A6      0   1   2 -   3133   1   4 [          64:          24G] OpenBSD

さて、設定変更は完了しましたが、これはまだディスクに書き込まれていません。

設定値が正しいことを確認したら、設定をディスクに書き込んでfdiskを終了します。

sd1*: 1> w
Writing MBR at offset 0.
sd1: 1> quit
test#

disklabelパーティションを設定

次に、disklabelコマンドでdisklabelパーティションの設定を行います。

最初にdisklabelコマンドをオプションなしで実行し、disklabelの内容を確認してみます。

test# disklabel sd1
disklabel sd1
# /dev/rsd1c:
type: SCSI
disk: SCSI disk
label: Block Device
duid: 0000000000000000
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 4177
total sectors: 67108864
boundstart: 64
boundend: 50331712

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:         67108864                0  unused
  i:         16777152         50331712   MSDOS

表示を見ると、DUIDがすべて0になっています。これはDUIDが未設定であることを表わしています。
また、OpenBSDバウンダリ(boundstartとboundend)とiパーティション(FAT領域)が隣接していることもわかります。

それでは、disklabelコマンドを-Eオプション付きで実行し、対話編集モードを起動します。
disklabelの対話コマンドを一覧を表示してから、OpenBSDのdisklabelパーティションを追加してみましょう。

test# disklabel -E sd1
Label editor (enter '?' for help at any prompt)
sd1> ?
Available commands:
 ? | h    - show help                 n [part] - set mount point
 A        - auto partition all space  p [unit] - print partitions
 a [part] - add partition             q        - quit & save changes
 b        - set OpenBSD boundaries    R [part] - resize auto allocated partition
 c [part] - change partition size     r        - display free space
 D        - reset label to default    s [path] - save label to file
 d [part] - delete partition          U        - undo all changes
 e        - edit label description    u        - undo last change
 i        - modify disklabel UID      w        - write label to disk
 l [unit] - print disk label header   x        - exit & lose changes
 M        - disklabel(8) man page     z        - delete all partitions
 m [part] - modify partition

Suffixes can be used to indicate units other than sectors:
 'b' (bytes), 'k' (kilobytes), 'm' (megabytes), 'g' (gigabytes) 't' (terabytes)
 'c' (cylinders), '%' (% of total disk), '&' (% of free space).
Values in non-sector units are truncated to the nearest cylinder boundary.
sd1> p g
OpenBSD area: 64-50331712; size: 24.0G; free: 24.0G
#                size           offset  fstype [fsize bsize   cpg]
  c:            32.0G                0  unused
  i:             8.0G         50331712   MSDOS

最初にbパーティション(スワップパーティション)を追加してみます。

sd1> a b
offset: [64] 
size: [50331648] 4G
FS type: [swap] 
sd1*> p g
OpenBSD area: 64-50331712; size: 24.0G; free: 20.0G
#                size           offset  fstype [fsize bsize   cpg]
  b:             4.0G               64    swap
  c:            32.0G                0  unused
  i:             8.0G         50331712   MSDOS

次に、データ用のdパーティションを追加します。

sd1*> a d
offset: [8401995] 
size: [41929717] *
FS type: [4.2BSD] 

確認してみます。

sd1*> p g
OpenBSD area: 64-50331712; size: 24.0G; free: 0.0G
#                size           offset  fstype [fsize bsize   cpg]
  b:             4.0G               64    swap
  c:            32.0G                0  unused
  d:            20.0G          8402016  4.2BSD   2048 16384     1
  i:             8.0G         50331712   MSDOS
sd1*> p
OpenBSD area: 64-50331712; size: 50331648; free: 21
#                size           offset  fstype [fsize bsize   cpg]
  b:          8401931               64    swap
  c:         67108864                0  unused
  d:         41929696          8402016  4.2BSD   2048 16384     1
  i:         16777152         50331712   MSDOS

ここで、dパーティションをよく見てみると、offsetを8401995と入力時したのに確認表示は8402016と、異った値になっています。
これは、ファイルの読み出し/書き込みが効率的に行われるよう設定値が自動的に調整されたためで、誤動作ではありません。

最後にdisklabel情報を実際にディスクに書き込んで、disklabelコマンドを終了します。

sd1*> w
sd1> q
No label changes.

あらためて確認してみます。

test# disklabel -pg sd1
# /dev/rsd1c:
type: SCSI
disk: SCSI disk
label: Block Device
duid: 5ed50d62e08d9cae
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 4177
total sectors: 67108864 # total bytes: 32.0G
boundstart: 64
boundend: 50331712

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  b:             4.0G               64    swap
  c:            32.0G                0  unused
  d:            20.0G          8402016  4.2BSD   2048 16384     1
  i:             8.0G         50331712   MSDOS
test#

この時点でDUIDが自動的に生成され、このディスクに付けられたこともわかります。

ファイルシステムの作成(フォーマット)

それでは、パーティションを作成したので、フォーマットを行い、ファイルシステムを作成します。OpenBSDでは、フォーマットにはnewfsコマンドを使います。

test# newfs /dev/rsd1d
/dev/rsd1d: 20473.5MB in 41929696 sectors of 512 bytes
102 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
super-block backups (for fsck -b #) at:
 160, 414880, 829600, 1244320, 1659040, 2073760, 2488480, 2903200, 3317920,
 3732640, 4147360, 4562080, 4976800, 5391520, 5806240, 6220960, 6635680,
 7050400, 7465120, 7879840, 8294560, 8709280, 9124000, 9538720, 9953440,
 10368160, 10782880, 11197600, 11612320, 12027040, 12441760, 12856480,
 13271200, 13685920, 14100640, 14515360, 14930080, 15344800, 15759520,
 16174240, 16588960, 17003680, 17418400, 17833120, 18247840, 18662560,
 19077280, 19492000, 19906720, 20321440, 20736160, 21150880, 21565600,
 21980320, 22395040, 22809760, 23224480, 23639200, 24053920, 24468640,
 24883360, 25298080, 25712800, 26127520, 26542240, 26956960, 27371680,
 27786400, 28201120, 28615840, 29030560, 29445280, 29860000, 30274720,
 30689440, 31104160, 31518880, 31933600, 32348320, 32763040, 33177760,
 33592480, 34007200, 34421920, 34836640, 35251360, 35666080, 36080800,
 36495520, 36910240, 37324960, 37739680, 38154400, 38569120, 38983840,
 39398560, 39813280, 40228000, 40642720, 41057440, 41472160, 41886880,
test#

このnewfsコマンドの実行の中で、新しい記法が2つ出てきていますので、それについて説明しましょう。

デバイスファイル

newfsでのパーティション指定を見てみると、/dev/rsd1cと、パーティションをファイルとして指定しています。実際に/dev/rsd1cというファイルは実在しています。

test# ls -l /dev/rsd1c
crw-r-----  1 root  operator  13, 66 Jun 27 21:09 /dev/rsd1c

Unix系のOSでは「入出力機器(デバイス)も通常のファイルと同じように扱える」という仕組みがあります。これをデバイスファイルと呼び、/dev/ディレクトリ以下に存在しています。この、/dev/rsd1cもデバイスファイルの一例です。

rawデバイスとblockデバイス

さらに、デバイス名を見てみると、sd1cではなく、rsd1cとなっています。このようにデバイス名の先頭にrが付くものをrawデバイス、つかないものをblockデバイスと呼びます。

rsd1cとsd1cはどちらも同じ「sd1ディスク全体」という意味ですが、扱いが異なります。

ざっくり言うと、rawデバイスはパーティション作成やフォーマットなど、ディスクデバイスを直接操作したい場合に使い、blockデバイスは、そのディスクにファイルを読み書きする、ファイルストレージとして使いたい場合に使います。

なお、先程、disklabelコマンドを使ったときに、disklabel -E sd1などと指定できたのは、disklabelコマンドがsd1を/dev/rsd1cと解釈してくれていたからです。実際にdisklabel -E /dev/rsd1cとしても実行できます。

それでは、さらにFATパーティションもフォーマットしてみます。これには、newfs_msdosコマンドを使います。

test# newfs_msdos /dev/rsd1i
newfs_msdos /dev/rsd1i
/dev/rsd1i: 16744416 sectors in 2093052 FAT32 clusters (4096 bytes/cluster)
bps=512 spc=8 res=32 nft=2 mid=0xf8 spt=63 hds=255 hid=50331712 bsec=16777152 bspf=16352 rdcl=2 infs=1 bkbs=2
test# 

これで、sd1ディスクのdパーティション、iパーティションともに利用可能になりました。

bパーティションは、スワップパーティションなので、OpenBSDではフォーマットのような初期化操作は必要ありません。

ファイルシステムのマウント

手動でマウントしてみる

それでは、フォーマットも完了したので、mountコマンドを使用して実際にマウントしてみます。

test# mount /dev/sd1d /mnt
test# ls -la /mnt
total 5
drwxr-xr-x  2 root  wheel  512 Jul 19 02:21 .
drwxr-xr-x  9 root  wheel  512 Jul 19 00:33 ..
test# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/rd0a      3.7M    1.7M    2.0M    46%    /
/dev/sd0a      1.1G    1.1G    8.7M   100%    /sysmedia
/dev/vnd5a     1.1G    1.1G    1.9M   100%    /fuguita
mfs:41757      2.9G   53.6M    2.7G     2%    /ram
/dev/sd1d     19.4G    2.0K   18.4G     1%    /mnt
test# umount /mnt
test# 

FATパーティションもマウントしてみます。

test# mount /dev/sd1i /mnt
test# ls -la /mnt
total 9
drwxr-xr-x  1 root  wheel  4096 Jan  1  1980 .
drwxr-xr-x  9 root  wheel   512 Jul 19 00:33 ..
test# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/rd0a      3.7M    1.7M    2.0M    46%    /
/dev/sd0a      1.1G    1.1G    8.7M   100%    /sysmedia
/dev/vnd5a     1.1G    1.1G    1.9M   100%    /fuguita
mfs:41757      2.9G   53.6M    2.7G     2%    /ram
/dev/sd1i      8.0G    4.0K    8.0G     1%    /mnt
test# umount /mnt
test#

以上で、新しいディスクデバイスにパーティションを作成し、利用可能にできました。

設定ファイルによりマウント

上の例では、手動でマウント、アンマウントしてみましたが、実際の使用では設定ファイルに記述しておき、システム起動時に自動的にマウントされるようにするのが一般的、かつ便利です。

  • 河豚板では、/etc/fuguita/fstab.tail、素のOpenBSDでは/etc/fstabファイルに記述します。
  • スワップファイルについては、河豚板では自動的に検出・有効化されるので、設定の必要はありません。素のOpenBSDでは、通常のパーティションと同じく/etc/fstabファイルに記述します。

おわりに

この文書では、OpenBSD、特に河豚板においてディスクデバイスにパーティションを作成・初期化を行い、使用できるようにするための手順を説明しました。

最後に、河豚板のusbfadmツールから一歩進んで、OpenBSDのコマンドを用いてディスクのパーティションやファイルシステムを操れるようになるためのポイントを幾つか挙げてみます:

  • いままで説明したように、OpenBSDのディスクの領域分割は、fdiskパーティションとdisklabelパーティションの二段構えになっています。この構造を理解することが重要です。
  • fdiskパーティションとdisklabelパーティションの2つを関連づける仕組みとして、OpenBSDバウンダリがあります。
  • パーティションの操作は一度行うと元に戻すのは困難です。以下の点に留意しましょう
    • fdisk, disklabel, newfsなどを行う前に、操作を行うデバイスに間違いがないか十分に確認しましょう
    • fdiskやdisklabelの対話的操作の際はp (print)コマンドを用い、十分に確認を行いながら操作を行いましょう
    • fdiskもdisklabelもw (write)コマンドを実行するまでは、実際にディスクへの書込みは行われません。その前に十分に確認しましょう

冒頭にも述べましたが、まず、基本はOpenBSDのマニュアルページ、そしてFAQ (Frequently Asked Questions)です。この文書は、河豚板を使う上で、それらを補足するという位置づけです。

この文書が、河豚板ユーザの皆様がOpenBSDの世界のさらに奥に分け入っていくための手助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?