This describes how to install NetBSD (i386/amd64) using a USB memory stick instead of a CD-ROM Drive.

Contents

  1. With an downloaded image
    1. Downloading the installation image
    2. Copying the installation image to the memory stick
    3. Installation process
  2. Build your own image
  3. Manual method
    1. Make the memory stick bootable
    2. Copy the installation sets to the memory stick
    3. The installation process
    4. Alternative Method
  4. # dd if=NetBSD-7.0-i386-install.img of=/dev/sdb bs=1M conv=sync

With an downloaded image

From NetBSD 5.1.2 on for the i386 and amd64 ports it is possible to download a USB memory stick image for installing instead of downloading and transforming a CD image.

This section describes in detail how to use this method. If you want to create an image yourself, please see below.

Downloading the installation image

Installation images are available on the NetBSD mirrors under the images/ directory, their filenames match the *install.img.gz pattern.

Note that as of 9.2_STABLE, there are two amd64 images, *install.img.gz and *bios-install.img.gz. The latter is intended for older hardware which is unable to boot using a hybrid MBR and GPT image.

For example if we want to download NetBSD 9.2 for amd64:

# ftp ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/images/NetBSD-9.2-amd64-install.img.gz

Copying the installation image to the memory stick

To prepare the memory stick under a Unix system you can just use dd(1). Whenever using dd(1), remember to set the blocksize by specifying the bs parameter in order to speed up the write to the installation media a bit (e.g. 1m). For example if the memory stick is recognized as sd0 (Warning: this will overwrite all the contents on your memory stick):

# gunzip NetBSD-9.2-amd64-install.img.gz
# dd if=NetBSD-9.2-amd64-install.img of=/dev/rsd0d bs=1m

In the previous command we have used rsd0d in order to refer to the whole sd0 disk.

On Linux the command is similar although it need some minor adjustments, if the memory stick is recognized as sdb (Warning: this will overwrite all the contents on your memory stick):

# gunzip NetBSD-9.2-amd64-install.img.gz
# dd if=NetBSD-9.2-amd64-install.img of=/dev/sdb bs=1M

On Windows you can use rawrite32 to copy the image to the stick.

Installation process

After NetBSD is booted from the memory stick the installation process is usual (you can find an example in The NetBSD Guide). Just pay attention when choosing the installation media: if you want to install using the installation sets on the memory stick when choosing the installation media select g: local directory and then clear the base (by default it points to release/).

Build your own image

Use build.sh -U release install-image with your usual build settings from your src directory.

Carry on with the instructions after download above.

Manual method

Make the memory stick bootable

First, install the Master Boot Record (MBR):

# fdisk -i /dev/rsd0d

Then, create an fdisk partition for NetBSD:

# fdisk -u /dev/rsd0d
Disk: /dev/rsd0d
NetBSD disklabel disk geometry:
cylinders: 974, heads: 128, sectors/track: 8 (1024 sectors/cylinder)
total sectors: 997375
BIOS disk geometry:
cylinders: 974, heads: 128, sectors/track: 8 (1024 sectors/cylinder)
total sectors: 997375
Do you want to change our idea of what BIOS thinks? [n] n
Partition table:
0: Primary DOS with 32 bit FAT (sysid 11)
   start 8, size 997367 (487 MB, Cyls 0-973/127/8)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
Which partition do you want to change?: [none] 0
The data for partition 0 is:
Primary DOS with 32 bit FAT (sysid 11)
   start 8, size 997367 (487 MB, Cyls 0-973/127/8)
sysid: [0..255 default: 11] 169
start: [0..974cyl default: 8, 0cyl, 0MB] (RETURN)
size: [0..974cyl default: 997367, 974cyl, 487MB]
bootmenu: [] (RETURN)
Partition table:
0: NetBSD (sysid 169)
   start 8, size 997367 (487 MB, Cyls 0-973/127/8)
1: <UNUSED>
2 :<UNUSED>
3: <UNUSED>
Bootselector disabled.
Which partition do you want to change?: [none] (RETURN)
We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
   start 8, size 997367 (487 MB, Cyls 0-973/127/8)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
Should we write new partition table? [n] y

After that, set the NetBSD partition active (it's partition number 0):

# fdisk -a /dev/rsd0d
Disk: /dev/rsd0d
NetBSD disklabel disk geometry:
cylinders: 974, heads: 128, sectors/track: 8 (1024 sectors/cylinder)
total sectors: 997375
BIOS disk geometry:
cylinders: 974, heads: 128, sectors/track: 8 (1024 sectors/cylinder)
total sectors: 997375
Partition table:
0: NetBSD (sysid 169)
   start 8, size 997367 (487 MB, Cyls 0-973/127/8)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
Do you want to change the active partition? [n] y
Choosing 4 will make no partition active.
active partition: [0..4 default: 4] 0
Are you happy with this choice? [n] y

Then, create the NetBSD disklabel and add the partitions "a" and "d":

# disklabel -i -I sd0
partition> a
Filesystem type [?] [MSDOS]: 4.2BSD
Start offset ('x' to start after partition 'x') [0.0078125c, 8s, 0.00390625M]: 63
Partition size ('$' for all remaining) [973.991c, 997367s, 486.996M]: $
partition> d
Filesystem type [?] [unused]: (RETURN)
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]: (RETURN)
Partition size ('$' for all remaining) [973.999c, 997375s, 487M]: (RETURN)
partition> W
Label disk [n]? y
Label written
We haven't written the MBR back to disk yet.  This is your last chance.
Should we write new partition table? [n] y

Next, create a new NetBSD filesystem on partition sd0a:

# newfs /dev/rsd0a

Now, make the partition sd0a bootable:

# mkdir /stick
# mount /dev/sd0a /stick
# cp /usr/mdec/boot /stick
# umount /stick
# installboot -v -o timeout=1 /dev/rsd0a /usr/mdec/bootxx_ffsv1

Copy the installation sets to the memory stick

For the installation you need an installation kernel and the installation sets. To get them, fetch for example a NetBSD CD-image file from a local FTP-Mirror 1:

$ cd /home/mark
$ ftp -a ftp://ftp.netbsd.org/pub/NetBSD/iso/4.0.1/i386cd-4.0.1.iso

Now mount the CD-image file:

$ su
# mkdir /image
# vnconfig -c vnd0 /home/mark/i386cd-4.0.1.iso
# mount_cd9660 /dev/vnd0d /image

And then, mount the memory stick and copy the install kernel and sets:

# mount /dev/sd0a /stick
# cp /image/i386/binary/kernel/netbsd-INSTALL.gz /stick/netbsd.gz
# cp -R /image/i386/binary/sets /stick/sets
# umount /stick
# rmdir /stick

Now you can unmount the CD-image:

# umount /image
# vnconfig -u vnd0
# rmdir /image

The memory stick is now ready to boot the NetBSD-Install system. Just reboot and change your BIOS to boot the USB memory stick.

The installation process

If the memory stick boots fine, proceed with the installation as usual, but the selection of the install sets is not quite intuitive:

"Your disk is now ready for installing the kernel and the distributions sets [...]"
[...]
Install from
f: Unmounted fs

Press RETURN and the following screen appears:

"Enter the unmounted local device and directory on that device where the distribution is located. [...]"

Choose the following options:

a: Device             sd0a
b: File system        ffs
c: Base directory       
d: Set directory      /sets

Yes, "c: Base directory" is left empty, because we had copied the distribution .tgz files to the /sets directory on the memory stick (9.)

Now continue with the installation as usual. Good luck!

Alternative Method

An alternative setup method saves space on the stick at the expense of sysinst automation and is therefore more advanced. This method skips the sysinst tool by copying the sets and the normal GENERIC kernel instead of the install kernel.

Extract the sets from the hard disk directly on to the memory stick (/mnt):

# tar xvfzp sets.tgz -C /mnt 

Extract the kernel to the target root:

# tar xvfzp GENERIC-kernel.tgz -C /mnt

All you need to do is now to create a valid /etc/fstab and modify /etc/rc.conf to RC_CONFIGURED=yes on the target root (/mnt) and reboot. All fine tuning can be done when you're logged in.

There is an error which I picked up on last year and has not been corrected yet. So I thought I should inform you in the setting "/sets" is not correct needs "/i386/binary/sets".

Comment by Michael in the wee hours of Sunday night, June 4th, 2012
If you prepare the memory stick with the sets copied to /sets (as is done in the "manual" section), they will be in /sets.
Comment by spz late Tuesday morning, December 18th, 2012

When booting 6.0.1 amd image on hp6300 the usb boots fine until it attempts to find the root partition. It apparently sees the usb on scsibus1 at umass1 and if I unplug it and plug it in it shows up as sd5.

I'll try to unplug the devices on scsibus0 - looks like sd plugins.

johnh...

Comment by John in the wee hours of Tuesday night, February 13th, 2013

1m will not work on Linux. m must be CAPITAL not lower char.

# dd if=NetBSD-7.0-i386-install.img of=/dev/sdb bs=1M conv=sync

Comment by buhara13 early Monday morning, February 22nd, 2016

Unlike as in Linux, in NetBSD please note /dev/rsd0d represents full disk - not /dev/sdb

Regards,

Comment by cemkayali at midnight, May 21st, 2016

Hello buhara13 and cemkayali! I've just updated the page according to your suggestion.

Please let me know if I've missed something!

Thank you very much! L.

Comment by leot mid-morning Saturday, May 21st, 2016