fdisk

fdisk(8) is a disk partitioning utility. It is called when installing OpenBSD to change the default partition layout of the disk. It can also be called manually after installation when you want to add a new disk.

WARNING: BE CAREFUL! fdisk can cause irreversible data loss. We recommend you backup your files before attempting to run these commands. You should also double check every command to make sure you have made no typos or mistakes. A single typo could destroy your data forever!

NOTE: This guide is no substitute for reading the OpenBSD FAQ. In particular, you may want to read the section on Disk Setup.

Whole Disk for OpenBSD

If you want to set aside an entire disk for OpenBSD, it's relatively easy. First, find the correct disk using dmesg:

$ dmesg | grep -E '(wd|sd)[0-9]'
sd0 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, >
sd0: 20480MB, 512 bytes/sector, 41943040 sectors
sd1 at scsibus2 targ 0 lun 0: <VirtIO, Block Device, >
sd1: 256000MB, 512 bytes/sector, 524288000 sectors
root on sd0a (5f6d0b5c9f65249d.a) swap on sd0b dump on sd0b

NOTE: On OpenBSD, there are two disk drivers: wd and sd. wd is an IDE-like disk, and sd is a SCSI-like disk (including USB disks). Here, I have two SCSI-like disks.

In this case, the disk I want to add is sd1, a [[Vmctl/Disk|new disk]] for additional storage. Here is the simple way to create fdisk partitions (Master Boot Record partitions):

$ doas fdisk -iy sd1

I can then proceed to use disklabel, followed by newfs.

Interactive fdisk

Instead of running the above command, it is possible to edit the fdisk partitions interactively:

$ doas fdisk -e sd1
Enter 'help' for information

Type help to get help, manual to read the fdisk man page, and print to view the partitions:

sd1: 1> help
        help            Command help list
        manual          Show entire OpenBSD man page for fdisk
        reinit          Re-initialize loaded MBR (to defaults)
        setpid          Set the identifier of a given table entry
        disk            Edit current drive stats
        edit            Edit given table entry
        flag            Flag given table entry as bootable
        update          Update machine code in loaded MBR
        select          Select extended partition table entry MBR
        swap            Swap two partition entries
        print           Print loaded MBR partition table
        write           Write loaded MBR to disk
        exit            Exit edit of current MBR, without saving changes
        quit            Quit edit of current MBR, saving current changes
        abort           Abort program without saving current changes
sd1: 1> print
Disk: sd1       geometry: 66837/255/63 [1073741824 Sectors]
Offset: 0       Signature: 0x0
            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: 00      0   0   0 -      0   0   0 [           0:           0 ] unused      

This disk sd1 is completely blank, so it is probably safe to edit the fdisk partitions and format the disk.

WARNING: If the disk already has existing partitions, double check to make sure you are not wiping out important data!

First, let's reinit. This should automatically create an fdisk partition on the last partition, partition 3, for OpenBSD and use all available space. It will also initialize this as the boot block.

sd1: 1> reinit
Disk: sd1       geometry: 66837/255/63 [1073741824 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 -  66836 254  63 [          64:  1073736341 ] OpenBSD     
Use 'write' to update disk.

Notice that the Signature changes from 0x0 to 0xAA55, and partition #3 is now set to id A6 (the OpenBSD partition type).

This can also be done manually by using the edit command on partition 3:

sd1: 1> edit 3
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused      
Partition id ('0' to disable) [01 - FF]: [0] (? for help) A6
Do you wish to edit in CHS mode? [n] y
BIOS Starting cylinder [0 - 66836]: [0] 
BIOS Starting head [0 - 254]: [1] 
BIOS Starting sector [1 - 63]: [2] 
BIOS Ending cylinder [0 - 66836]: [0] 66836
BIOS Ending head [0 - 254]: [0] 254
BIOS Ending sector [1 - 63]: [1] 63

We need to edit in Cylinder-Head-Sector (CHS) mode. To use the full space of the disk, you will want to choose the lowest numbers in the range for the starting cylinder, head, and sector; and the highest possible numbers for the ending cylinder, head, and sector.

We now write to disk:

sd1*: 1> write
Writing MBR at offset 0.

We'll print G to see everything in gigabytes:

sd1: 1> print G
Disk: sd1       geometry: 66837/255/63 [1073741824 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 -  66836 254  63 [          64:         512G] OpenBSD     

If everything looks good,

sd1: 1> quit

We can now proceed to use disklabel, followed by newfs.