初めに
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
-
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パーティションの関係を図示すると、下図のようになります。

- パーティションの名前はaからpまでの16個です
- このうち、以下のパーティションは役割りが固定されています
- a: ルートパーティション
- b: スワップパーティション
- c: ディスク全体を表します
- また、他のOSのパーティション(WindowsのFATやLinuxのEXTFSなど)には、慣習的にi, j, kなどが割り当てられることが多いです
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パーティション
今回の例では、データ保存用のみの用途を想定します。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
このように、新しくパーティションを作成する場合は、直前のパーティションの「開始位置+サイズ」から、新しいパーティションの開始位置を計算する必要があります。これには、電卓などがあると便利かもしれません。
ここでいま一度、設定内容を確認してみましょう。
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の世界のさらに奥に分け入っていくための手助けになれば幸いです。

