Installing 2.11BSD: Disk preparation - bad RM03 needs RL02 boot step

Parent Category: How-to's Category: 2.11BSD Unix on PDP-11/44 Written by Administrator

I install onto my Fujitsu MK2312 SMD disk. It is connected to an Emulex SC31 controller, who emulates a RM03 disk. It has 70MB, and many bad sectors. So bad sector handling is essential.

Bad sectors on the system drive

There are several reason I can not used bad sector forwarding after DEC STD 144.

  1. I can not format the MK2312K with DEC formatter ZRMLB1, because my Emulex SC31 SMD controller is not compatible enough.
  2. PDP11GUI could write the bad sector file after DEC STD 144, but can not mark bad sectors with header bits, as required for bad sector forwarding in 2.11BSD.
  3. Even if I could mark bad sector on the disk, I can not mark them on the SimH image: I can write a bad sector file at the end of disk, but I can not set bad sector header flags, as the SimH disk image does not simulate sector headers, only data content.

So I mark bad sector with the “badsect(8)” utility, which simly constructs special disk files containing all bad sectors. I still write a bad sector file onto the image, so bad144(8) can display them inside on 2.11BSD.

SimH: Installing a mini kernel onto a separate RL02 disk

Before I can use my M2312K disk, I must mark bad sectors on it. To do this, I need an temporary 2.11BSD installation on another drive. We are under SimH and can use every drive we want, but I choosed an RL02, because I also have a physical one connected.

Well, lets begin!

Minimal SimH configuration file

Source code Info
set cpu 11/44 4096K fpp nocis
My PDP-11/44 has full 4 MB
set tm enabled
attach tm0 ..\211bsd.tap
“211bsd.tap” is the image of the 2.11BSD installation tape, you can get it here.
The Setup file is here, you MUST read it!
set rl0 rl02
att rl0 stage.rl02
The RL02 for the temporary installation is called “stage.rl02”
set rp0 rm03
att rp0 211bsd.rm02
“rp” is the controller for RP and RM03 drives.”211.bsd.rm02” is the file name of the target image, it will be moved to te real MK2312 drive.
boot tm0
Boot from the installation tape


(Later we may add statements to emulte a DELUA network card and a DZ11 terminal multiplexer)

The tape boodloader will prompt:

44Boot from tm(0,0,0) at 0172522

It waits for a file to load an run

The stand-alone disklabel program

“disklabel” writes partitions and drive data onto an 2.11BSD disk.

Use it to generate this partitions layout on the RL02 disk:

44Boot from tm(0,0,0) at 0172522
: tm(0,1)
Boot: bootdev=0401 bootcsr=0172522
Disk? rl(0,0)
'rl(0,0)' is unlabeled or the label is corrupt.
Proceed? [y/n] y
d(isplay) D(efault) m(odify) w(rite) q(uit)?

... use disklabel program ....

:d(isplay) n(umber) s(elect) q(uit)? d                 

type: old DEC
label: DEFAULT
bytes/sector: 512
sectors/track: 20
tracks/cylinder: 2
sectors/cylinder: 40
cylinders: 512
rpm: 3600
drivedata: 0 0 0 0 0

8 partitions:
size   offset    fstype  [fsize bsize]
a: 16000  0         2.11BSD   1024 1024     # (Cyl. 0 - 399)
b: 4000   16000     swap                    # (Cyl. 400 - 499)
c: 20480  0         unused    1024 1024     # (Cyl. 0 - 511)

Refer to the 2.11bsd_setup.pdf, Appendix B on how to do this.

The menue of "disklabel" is like a text adventure game: "You are in a maze of twisty little passages, all different". Here is a map (every menu level has an additional “d(isplay)” and a “q(uit)” entry, these are not shown here).

Level 1 Level 2 Level 3 Level 4

Creating UNIX root file system on RL02

Boot von 2.11BSD tape, call tape file #2.

44Boot from tm(0,0,1) at 0172522
: tm(0,2)
Boot: bootdev=0402 bootcsr=0172522
file system: rl(0,0)
file sys size [8000]:
bytes per inode [4096]:
interleaving factor (m; 2 default):
interleaving modulus (n; 20 default):
isize = 2000
m/n = 2 20
Exit called

44Boot from tm(0,0,2) at 0172522

Restoring the root file system on RL02

Boot von 2.11BSD tape, call tape file #3. Filesystem archive is tape file #5.

44Boot from tm(0,0,1) at 0172522
: tm(0,3)
Boot: bootdev=0403 bootcsr=0172522
Tape? tm(0,5)

Disk? rl(0,0)
Last chance before scribbling on disk. End of tape

44Boot from tm(0,0,3) at 0172522


Installation on RL02 is ready now. Check the disk size:

Booting unix from boot tape

sim> b tm

44Boot from tm(0,0,0) at 0172522
: rl(0,0)unix
Boot: bootdev=03400 bootcsr=0174400

2.11 BSD UNIX #115: Sat Apr 22 19:07:25 PDT 2000
This email address is being protected from spambots. You need JavaScript enabled to view it.:/usr/src/sys/GENERIC

phys mem = 3932160
avail mem = 3708224
user mem = 307200

June 8 21:21:24 init: configure system

hk 0 csr 177440 vector 210 attached
ht ? csr 172440 vector 224 skipped:  No CSR.
ra 0 csr 172150 vector 154 vectorset attached
rl 0 csr 174400 vector 160 attached
tm 0 csr 172520 vector 224 attached
tms 0 csr 174500 vector 260 vectorset attached
ts ? csr 172520 vector 224 interrupt vector already in use.
xp 0 csr 176700 vector 254 attached
erase, kill ^U, intr ^C

Check the disk size:

# df
Filesystem 1K-blocks    Used   Avail Capacity Mounted on
root             7873    2738     5135    35%   /


NEVER remove power from an Unix system without shutting it properly down.


# halt
syncing disks... done
HALT instruction, PC: 000014 (MOV #1,17406)

Write a boot sector to the RL02 disk:

This enables you to boot from the RL drive, if the tape is unmounted.
The raw a partitions is “/dev/rrl0a”

# dd if=/mdec/rluboot of=/dev/rrl0a count=1
1+0 records in
1+0 records out
# sync
# halt

Boot from RL02:

So you boot after the boot sector has been written:

This email address is being protected from spambots. You need JavaScript enabled to view it.:/usr/src/sys/GENERIC
Loading selected tools + kernel sources from tape

The root file system needs some add-ons to configure the RM03. Here I load also everything to build a kernel on the RL drive. We cannot just load the whole /usr tree, the RL02 drive is far too small for this. Tape file #6 is a tar of /usr.

# cd /dev;rm *mt*; ./MAKEDEV tm0; sync                 
# cd /usr
# mt rew ; mt fsf 6 ; tar xvpbf 20 /dev/rmt12 \
include include/sys \
bin/touch bin/sort bin/install \
lib/libkern.a \
ucb/symcompact ucb/strcompact ucb/symorder ucb/symdump \
bin/ex ucb/vi share/misc/termcap

# sync
# df
Filesystem 1K-blocks    Used   Avail Capacity Mounted on
root             7873    3013     4860    38%   /

Building a kernel from RL drive has a great show effect, since for long time the drive will be busy! You must move the image file “stage.rl02” to a physical RL02 for this with PDP11GUI.

These are the required kernel files from tape file #7:

# cd /
# mkdir /usr/src
# mkdir /usr/src/sys
# mt rew ; mt fsf 7 ; tar xvpbf 20 /dev/rmt12 \
sys/conf \
sys/h \
sys/pdp \
sys/sys \
sys/pdpif \
sys/pdpuba \
sys/net \
sys/netinet \
sys/netimp \
sys/netns \
# sync
# df
Filesystem 1K-blocks    Used   Avail Capacity Mounted on
root             7873    5625     2248    71%   /

After kernel build, the RL02 is filled up to 82%. Do always a “make clean” after “make install” !

Swap device

In /dev there is a device node “swap”. The script “/dev/MAKEDEV.local” lets it point to /dev/hk1a by default:

rm -f swap;             ln hk1a swap

Change this (with “vi”, already imported) to

rm -f swap;             ln rl0b swap

as we partitioned the swap partition to be the 2nd one on the RL02 drive.
Then do

# cd /dev
# ./MAKEDEV local
# halt

Preparing the RM03/MK2312 disk

To write bad sector information onto the RM03 drive, you first must partition it with the stand -alone disklabel program. Boot from tape, repeat as above, but the device code is “xp” for RM03 instead of “rl”. So it’s

Disk? xp(0,0)

Setup this layout (notice the flags and the ‘h’ partition).
swap is 4MB, last track=32 sectors are bad sector file, 126 sector before are replacement area -> complete last track with 5*32=160 sectors is unused

d(isplay) D(efault) m(odify) w(rite) q(uit)? d

type: SMD
disk: M2312K
label: DEFAULT
flags: ecc badsect
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 5
sectors/cylinder: 160
cylinders: 823
rpm: 3600
drivedata: 0 0 0 0 0

8 partitions:
#        size  offset   fstype   [fsize bsize]
a: 123328 0  2.11BSD   1024 1024    # (Cyl. 0 - 770*)
b: 8192 123328 swap                 # (Cyl. 770*- 821*)
c: 131680 0  unused    1024 1024     # (Cyl. 0 - 822)
h: 131680 0  unused    1024 1024     # (Cyl. 0 - 822)

Then create the root file system, as above. Load “tm(0,2)”, and it is

file system: xp(0,0)

Then boot Unix from RL disk again.

At first: check the new file system on the RM03 rive:

# fsck /dev/rxp0a

Badsect utility

The badsect(8) utility generates files which cotains bad sectors, so they will not be used by other files. It is important to mark the bad sectors before any other data is moved onto the disk. For generating a bad sector list, see . “badsect” is not the best approach to handle bad sectors, bad sector forwarding by 2.11BSD would be far more better. You should read “man bad144” and “man badsect”. Just google for it, man pages are not installed on the small RL02 disk. And don’t forget the heart of all:

Here I read bad sectors from the bad sector file on the rm03 image (written there by PDP11GUI, or read in from  the physical pack)

# bad144 rm03 xp0
bad block information at 0x4048000 in /dev/rxp0h:
cartridge serial number: 0(10)
sn=580, cn=3, tn=3, sn=4
sn=708, cn=4, tn=2, sn=4
sn=1220, cn=7, tn=3, sn=4
sn=1444, cn=9, tn=0, sn=4
sn=1796, cn=11, tn=1, sn=4
sn=2052, cn=12, tn=4, sn=4
sn=2084, cn=13, tn=0, sn=4
sn=2180, cn=13, tn=3, sn=4
sn=2404, cn=15, tn=0, sn=4
sn=4819, cn=30, tn=0, sn=19
sn=17138, cn=107, tn=0, sn=18
sn=17362, cn=108, tn=2, sn=18
sn=17425, cn=108, tn=4, sn=17
sn=29297, cn=183, tn=0, sn=17
sn=30802, cn=192, tn=2, sn=18

The sector numbers are counted against the offset of the file system xp0a ... but this has an offset of 0.

Let’s mount the new RM03 disk

# mount /dev/xp0a /mnt
# mount
root on /
/dev/xp0a on /mnt

Now let’s mark those bad sectors in a directoy /BAD::

# cd mnt
# ls
# mkdir BAD
# cd BAD
# pwd
# badsect 580 708 1220 1444 1459 1796 2052 2084 2180 2404 3917 4819 17138 17362 17425 29297 30802
# ls
1220   1459  17362  1796  2084   2404  30802  4819  708
1444   17138 17425  2052  2180   29297 3917   580

Now all bad sectors are in files AND still in the free list. So fsck is absolutely needed! Clear everything up, but do not touch the /BAD/* files.

# sync
cd /
# umount /dev/xp0a
# fsck /dev/rxp0a
** /dev/rxp0a
File System: /mnt                 

** Last Mounted on /mnt
** Phase 1 - Check Blocks and Sizes

354 BAD I=102
** Phase 2 - Check Pathnames
DUP/BAD  I=102 OWNER=root MODE=100600
SIZE=57569 MTIME=Jun 8 22:10 1995


DUP/BAD  I=101 OWNER=root MODE=100600
SIZE=57569 MTIME=Jun 8 22:10 1995
DUP/BAD  I=100 OWNER=root MODE=100600
SIZE=57569 MTIME=Jun 8 22:10 1995
DUP/BAD  I=99  OWNER=root MODE=100600
SIZE=57569 MTIME=Jun 8 22:10 1995

DUP/BAD  I=98  OWNER=root MODE=100600
SIZE=57569 MTIME=Jun 8 22:10 1995


** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Free List

** Phase 6 - Salvage Free List
19 files, 14 used, 56654 free


badsect(8) leaves you with a few BIG cave-at’s for the rest of the live time of your 2.11BSD installation:

Now we’re finally ready to install 2.11BSD onto the RM03 disk. The RL02 installation is not used anymore ... but may serve as “emergency disk”.