File:  [NetBSD Developer Wiki] / wikisrc / users / spz / moderndisk.mdwn
Revision 1.28: download - view: text, annotated - select for diffs
Mon May 7 06:42:28 2018 UTC (3 years, 2 months ago) by wiki
Branches: MAIN
CVS tags: HEAD
web commit by spz: errant :, as pointed out by soda@

## UEFI-Boot, GPT and raidframe

I have a new machine that wants to boot UEFI, and it has two disks that I want to mirror. I have booted NetBSD-8.0_BETA-amd64-uefi-install.img off a USB stick, and went from sysinst to shell. This implies I have tools and sets (in /amd64/binary/sets) locally, and a /targetroot directory.

Several config files need to be created; I show them as "cat > file" because that shows what goes in there but by all means use a proper editor if you can't use cut+paste.

UEFI does not use installboot, but instead you create a UEFI boot partition which is msdos:

    gpt create wd0
    gpt create wd1
    gpt add -l uefiboot1 -a 1024k -s 128M -t efi wd0
    gpt add -l uefiboot2 -a 1024k -s 128M -t efi wd1

if your disks have 4k native sectors, use -s 256M.

while I'm here, also make the raid wedges and raided swap space. I have 1TB disks, and want enough swap to be able to dump my entire RAM if necessary:

    gpt add -l raidsys1   -a 4k -s 36G  -t raid wd0
    gpt add -l raidsys2   -a 4k -s 36G  -t raid wd1
    gpt add -l raidswap1  -a 4k -s 24G  -t raid wd0
    gpt add -l raidswap2  -a 4k -s 24G  -t raid wd1
    gpt add -l raidhome1  -a 4k -s 870G -t raid wd0
    gpt add -l raidhome2  -a 4k -s 870G -t raid wd0

then raid the raids:

check with dkctl wd0 listwedges and dkctl wd1 listwedges which dk devices represent the raid gpt wedges; sample output:

    /dev/rwd0: 4 wedges:
    dk2: uefiboot1, 262144 blocks at 2048, type: msdos
    dk4: raidsys1, 75497472 blocks at 264192, type: raidframe
    dk6: raidswap1, 50331648 blocks at 75761664, type: raidframe
    dk8: raidhome1, 1827431816 blocks at 126093312, type: raidframe

and insert them instead of dk4 and dk5 if yours differ:

    cat > /tmp/raid0.conf
    START array
    1 2 0

    START disks
    /dev/dk4
    /dev/dk5

    START layout
    128 1 1 1

    START queue
    fifo 100
    ^D

and apply:

    raidctl -C /tmp/raid0.conf raid0
    raidctl -I `date +%Y%m%d00` raid0
    raidctl -i raid0

raid0 is supposed to have the root on it:

    raidctl -A softroot raid0

and the swap raid:

    cat > /tmp/raid1.conf
    START array
    1 2 0

    START disks
    /dev/dk6
    /dev/dk7

    START layout
    128 1 1 1

    START queue
    fifo 100
    ^D

and apply:

    raidctl -C /tmp/raid1.conf raid1
    raidctl -I `date +%Y%m%d01` raid1
    raidctl -i raid1
    raidctl -A yes raid1

the home raid (raid2) gets built the same as the swap raid, apart from taking a long time in the raid -i stage.

### system raid: with disklabel

since uefi needs the rootfs 64 blocks after the end of the uefi partition, and the raidframe label already uses those up.

    disklabel -e raid0
     -> 2 partitions, a and e, 26G and 10G respectively, a starting at 0

    newfs -O2 /dev/raid0a
    newfs -O2 /dev/raid0e

### swap raid

    gpt create raid1
    gpt add -a 4k -t swap -l swap raid1

### home raid

    gpt create raid2

align to 4k for somewhat better performance

    gpt add -a 4k -l home raid2

and newfs:

    newfs -O2 name=home


### put an OS on

    mount /dev/raid0a /targetroot
    mkdir /targetroot/var /targetroot/home
    mount /dev/raid0e /targetroot/var
    mount name=home /targetroot/home
    cd /targetroot

    for i in base comp etc games kern-GENERIC man misc modules tests text; do
        tar xzpf /amd64/binary/sets/$i.tgz
    done

    cd dev
    ./MAKEDEV all

### bootability

    mkdir /targetroot/entropy

create msdos filesystems on the uefiboot wedges:

    dkctl wd0 listwedges
     -> my uefiboot1 is dk2
    newfs_msdos -F 32 -b 1024 /dev/rdk2
    dkctl wd1 listwedges
     -> my uefiboot2 is dk3
    newfs_msdos -F 32 -b 1024 /dev/rdk3

copy the uefi boot things to both:

    mount name=uefiboot1 /mnt
    mkdir -p /mnt/EFI/boot
    cp /usr/mdec/*.efi /mnt/EFI/boot
    cat > /mnt/boot.cfg
    menu=Boot normally:dev hd0b:;rndseed /entropy/entropy-file;boot hd0b:netbsd
    menu=Boot single user:dev hd0b:;rndseed /entropy/entropy-file;boot hd0b:netbsd -s
    menu=Drop to boot prompt:prompt
    default=1
    timeout=5
    clear=1
    ^D
    umount /mnt

usually the system will boot from wd0 aka hd0, but if that disk has a problem, depending on how dead it is you may want to boot from wd1-as-hd0 or wd1-as-hd1:

    mount name=uefiboot2 /mnt
    mkdir -p /mnt/EFI/boot
    cp /usr/mdec/*.efi /mnt/EFI/boot
    cat > /mnt/boot.cfg
    menu=Boot normally:dev hd0b:;rndseed /entropy/entropy-file;boot hd0b:netbsd
    menu=Boot single user:dev hd0b:;rndseed /entropy/entropy-file;boot hd0b:netbsd -s
    menu=Boot normally from hd1b:dev hd1b:;rndseed /entropy/entropy-file;boot hd1b:netbsd
    menu=Boot single user from hd1b:dev hd1b:;rndseed /entropy/entropy-file;boot hd1b:netbsd -s
    menu=Drop to boot prompt:prompt
    default=1
    timeout=5
    clear=1
    ^D
    umount /mnt

If the system is going to be in an inconvenient location (so walking up to it with a memstick becomes a project), consider also putting an install kernel on uefiboot* as rescue++.

### configure the system (manually, colorful curses elided. sysinst Needs Work.)

    chroot /targetroot su -

    passwd root

    cd /etc
    cat > fstab
    /dev/raid0a     /               ffs     rw 1 1
    /dev/raid0e     /var            ffs     rw 1 2
    NAME=home       /home           ffs     rw 1 3
    NAME=swap       none            swap    sw 0 0
    kernfs          /kern           kernfs  rw
    ptyfs           /dev/pts        ptyfs   rw
    procfs          /proc           procfs  rw
    tmpfs           /tmp            tmpfs   rw,-s128m
    ^D

    mkdir /kern /proc

    vi rc.conf
     -> hostname, dhcpcd, wscons, sshd, random_file=/entropy/entropy-file, ...

fix up timezone if necessary:

    rm localtime && ln -s /usr/share/zoneinfo/<yourzone> localtime

edit wscons.conf for the encoding of your keyboard if not US

add users, edit security.conf and daily.conf

reboot from disk

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb