Disk Identification

The /dev/dsk and /dev/rdsk directories are checked for disk partition entries - that is, symbolic links with names of the form cN[tN]dNsN, where N represents a decimal number.

cN is the logical controller number, an arbitrary number assigned by this program to designate a particular disk controller. The first controller found on the first occasion this program is run on a system, is assigned number 0.

tN is the bus-address number of a subsidiary controller attached to a peripheral bus such as SCSI or IPI (the target number for SCSI, and the facility number for IPI controllers).

dN is the number of the disk attached to the controller, and

sN is the partition, or slice, number of the entry.

c0t0d0s0

c - controller

t - target (e.g. scsi target)

d - disk (usually 0)

s - slice

To map sd? style disk names to this format, check the link displayed on a long listing.

ls -l /dev/sd?c

Solstice disk suite

The disk suite package normally lives in /usr/opt/SUNWmd/usr/sbin. Add this to the PATH of the root user
PATH=$PATH:/usr/opt/SUNWmd/usr/sbin; export $PATH
The examples for mirror disks use the idea of a "mirror top". This is the metadisk which is actually mounted, as opposed to the two "sides" of the mirror.

Decoding the md.tab

concatentation of 2

d7 2 1 /dev/dsk/c0t0d0s0 1 /dev/dsk/c1t0d0s0

stripe of 2, with 16k interlace

d8 1 2 /dev/dsk/c0t0d0s0 /dev/dsk/c1t0d0s0 -i 16k

concat of 2 stripes of 2

d3 2 2 /dev/dsk/c0t0d0s0 /dev/dsk/c1t0d0s0 -i 16k \
        2 /dev/dsk/c0t0d1s0 /dev/dsk/c1t0d1s0

i.e. dx <number of concats> <number of stripe elements>

mirror

d1 -m d2

where d1 is top

Activating the md.tab

metainit -a will read whole file

metainit d2 will initialise given disk

metainit d2 will initialise top of mirror

metattach d1 d3 will attach other side of mirror (synch done in background)

To detach one side of a mirror

metadetach [ -f ] <mirror-top> <mirror-side>

To attach the "second side"

metattach <mirror-top> <mirror-side> Note that the newly attached side resilvers in the background automatically. Therefore, if multiple mirrors exist on the same physical disk beware of maxing out the IO on the physical drive if re-attaching multiple mirrors. It is possible to check the current amount of work complete as follows:

metstat | grep %

To clear errors on a metadisk

This procedure should only be applied where the error state is a result of SCSI errors - not when there is an actual error on the disk.

Note also that this process should only be applied for an unmounted disk.

metaclear <mdisk> clears the mdisk from the metadb. The reference will still exist in /usr/opt/SUNWmd/md.tab.

metainit <mdisk> re-reads the info in md.tab and activates the mdisk.

e.g.

# metastat d0
d0: Mirror
    Submirror 0: d32
      State: Needs maintenance 
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 4140480 blocks

d32: Submirror of d0
    State: Needs maintenance 
    Invoke: after replacing "Maintenance" components:
  metareplace d0 c1t4d0s1 <new device>
    Size: 4140480 blocks
    Stripe 0: (interlace: 64 blocks)
 Device              Start Block  Dbase State        Hot Spare
 c1t3d0s0                   0     No    Okay         
 c1t4d0s1                   0     No    Last Erred   
 c1t5d0s3                   0     No    Last Erred

# umount <filesystem>
# metaclear -r d0
# metainit d32
# metainit d0
# mount <filesystem>

To clear a mirror disk where one is in maintenance/one in last err

This procedure should only be applied where the error state is a result of SCSI errors - not when there is an actual error on the disk.

metareplace -e <mirror-top> /dev/dsk/c?td?s? where this is the maintenance side of the mirror.

Await resynching, then repeat for the last erred side of the mirror.

e.g.

# metastat d0

d0: Mirror
    Submirror 0: d32
      State: Needs maintenance 
    Submirror 1: d33
      State: Needs maintenance 
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 4149600 blocks

d32: Submirror of d0
    State: Needs maintenance 
    Invoke: metareplace d0 c1t0d0s0 <new device>
    Size: 4149600 blocks
    Stripe 0:
 Device              Start Block  Dbase State        Hot Spare
 c1t0d0s0                   0     No    Maintenance  

d33: Submirror of d0
    State: Needs maintenance 
    Invoke: after replacing "Maintenance" components:
  metareplace d0 c1t1d0s0 <new device>
    Size: 4149600 blocks
    Stripe 0:
 Device              Start Block  Dbase State        Hot Spare
 c1t1d0s0                   0     No    Last Erred


# metareplace -e d0 /dev/dsk/c1t0d0s0
# #wait 
metareplace -e d0 /dev/dsk/c1t1d0s0

Boot

Boot Block

To install the boot information at the start of a given disk (in a reserve area, so data is not overwritten)

installboot /usr/platform/<architecture>/lib/fs/ufs/bootblk /dev/rdsk/c?t?d?s?

where architecture is like sun4d . This can be ascertained from uname -m

prtdiag

prtdiag displays system configuration and diagnostic information.

/usr/platform/<architecture>/sbin/prtdiag -v

where architecture is like sun4d . This can be ascertained from uname -a

The boot prompt is ok

The boot command

boot for full, normal, multiuser
-r to reconfigure device tree (if devices added or removed)
-s single user
-v verbose
-w writable (for cdrom boot)
-a interactive - rarely used, this option asks location of kernel, root filesys type, etc

boot cdrom -svwr to boot from cdrom, single user,verbose, writable fsys, build device tree

boot kadb to boot with lkernel debugger

Getting to the prom

To be precise, ok is the "prom prompt" rather than the "boot prompt" but mostly, we just want to boot when there is an ok prompt. Sometimes, you may need to get to the prom on a running system. The method depends on the console you have. If it is a proper Sun console, there's a good chance that stop-A will work. Otherwise, try F5, Break or L1-A. Be aware that this can hang or kill the system, so use it with caution.

A hanging system

If the system is hanging or you are trying to crash it, be sure to sync the system before rebooting. This way, you have a chance of getting a core dump as the system comes back up.
ok sync
After reboot, if you don't have enough room in /var/crash (and, really, you should have a /var/crash which is larger than physical memory), you can attempt a manual savecore to another area.

e.g.

# cd /spare
# savecore -d .

While you're at the prom level

banner for additional info

reset run hardware diagnostics and reboot

help [command] list of commands or help on given command

probe-scsi-all look for attached SCSI devices

test [device|device-type] run selftests on device e.g. test net

printenv all bootflags

setenv <bootflag> <value> e.g. setenv auto-boot? False

eeprom is the os-level equivalent of printenv and setenv

e.g.

eeprom auto-boot\?=false

Disk Formatting

Disk geometry

An example disk geometry from /etc/format.dat

disk_type = "SUN9.0G" \
        : ctlr = SCSI : fmt_time = 4 \
        : ncyl = 4924 : acyl = 2 : pcyl = 4926 : nhead = 27 \
        : nsect = 133 : rpm = 7200

disk_type is a label

ncyl - number of cylinders available

acyl - additional cylinders

pcyl - ?

nhead - number of heads

nsect - number of sectors per track: 1 sector = 1 block = 512 bytes

rpm - rpm

nsect * nhead = blocks per cylinder

ncyl * nsect * nhead / 2048 = useable space in Mb

VTOC

An example VTOC from /etc/format.dat

partition = "SUN9.0G_4-4GB"\
 : disk = "SUN9.0G" : ctlr = SCSI\
 : 2 = 0, 17682084\
 : 0 = 0, 8618400\
 : 1 = 2400, 438102\
 : 3 = 2522, 8618400\
 : 7 = 4922, 7182

partition is a label

disk matches a defined disk geometry

<partion number> = <start cylinder> , <length in blocks> \

where \ is a continuation character

length in blocks should be a multiple of nsect * nhead

partition 2 is the whole disk. Length in blocks of partition 2 should be equal to useable size i.e. nsect * nhead * ncyl Note that with the format menu, the shortest unique string will do - a is sufficient rather than analyze below.

It is often easier to use fmthard to duplicate a disk format

prtvtoc /dev/rdsk/c1t0d0s2 > /tmp/vtoc

fmthard -s /tmp/vtoc /dev/rdsk/c1t1d0s2

# format
Specify disk (enter its number): 3
selecting c0t3d0
[disk formatted]
Warning: Current Disk has mounted partitions.

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        quit
format> analyze

ANALYZE MENU:
        read     - read only test   (doesn't harm SunOS)
        refresh  - read then write  (doesn't harm data)
        test     - pattern testing  (doesn't harm data)
        write    - write then read      (corrupts data)
        compare  - write, read, compare (corrupts data)
        purge    - write, read, write   (corrupts data)
        verify   - write entire disk, then verify (corrupts data)
        print    - display data buffer
        setup    - set analysis parameters
        config   - show analysis parameters
        quit
		

Package info

/var/sadm/install/contents holds details of all packages on the system. pkginfo gives list of packages installed.

Photon arrays

Minimal configuration is 5 disks. The first slots to be filled must be 3 and 6 at the front and 0,3 and 6 in the back. This minimum configuration is a requirement because circuitry on the disk drives regenerate and retime the data signals which corrects signal quality loss accumulated through the bypass circuitry between empty slots. Empty backplanes can generate errors which are intermittent and difficult to isolate. As disks are added they should be spaced to minimize the gaps between disks.

Incorrect screen size

stty rows 24
stty cols 80

Too many open files

The default value for maximum number of files open in Solaris 2.5.1 is 64 - this can be checked with ulimit -n. To set this to a higher default value in 2.5.1, add the following to /etc/system

set rlim_fd_max=<the maximum value> #(NOT greater then 1024)
set rlim_fd_cur=<the default for all shells>

and reboot the system.

To set the value for one user or session;

ulimit <the maximum value> #(NOT greater then 1024)

Installing Disks

If disks are added and the system is booted without a reconfigure, these can be "seen" by running drvconfig ensures the /devices tree is up to date and correct

disks creates the symbolic links to /devices in /dev/[r]dsk

tapes creates the symbolic links to /devices in /dev/[r]mt

Reading utmp and wtmp

/usr/bin/last converts /var/adm/wtmpx to readable data. cat /var/adm/utmp | /usr/lib/acct/fwtmp > /tmp/utmp.ascii can be used to make utmp readable.

swapfile

To add additional (temporary) swap, can create a filesystem swap file

# mkfile 32M /u/swapfile
# swap -a /u/swapfile

add a line like the following to /etc/vfstab to make it permanent

/u/swapfile  - - swap - no -

kernel drivers

To find out modules are currently loaded into the kernel:

# modinfo 

Id Loadaddr   Size Info Rev Module Name
  5 600fa000   3b30   1   1  specfs (filesystem for specfs)
  7 6011f000   2bc8   1   1  TS (time sharing sched class)
  8 600f0a88    4a4   -   1  TS_DPTBL (Time sharing dispatch table)
  9 60142000  234b8   2   1  ufs (filesystem for ufs)
 10 6017c000   dc4b 226   1  rpcmod (RPC syscall)
 10 6017c000   dc4b   1   1  rpcmod (rpc interface str mod)
 11 60196000  277ef   0   1  ip (IP Streams module)
 11 60196000  277ef   3   1  ip (IP Streams device)
 12 60123550   127f   1   1  rootnex (sun4u root nexus)
 . . .

The first field of output is an identifier. It is possible to unload a module from the kernel using that number. This will fail if the driver is busy.

# modunload -i 23

To load a module

# cd /kernel/drv #(or wherever it lives e.g. /usr/kernel/drv )
# modload st

To unload the st driver

The st driver is used to control tape drives. If a tape drive definition has changed, the driver needs to be reloaded before it will use the new definitions. It is possible to manually load it as show above, but it will be autoloaded as soon as atape drive is used. Make sure none of your tape drives are in use:

# for tape in /dev/rmt/?
> do
> mt -f $tape rewind
> done
# 

If you get an error like "/dev/rmt/0: no tape loaded or drive offline" don't worry it just means no tapes are loaded and therefore the device can't be in use.

Remote root login

It is, of course, a bad idea to allow network logins as root all the time but it can be extremely useful during initial install once you've got the network up. Edit /etc/default/login and comment out the following line to allow remote login by root.
CONSOLE=/dev/console
Remember to uncomment it when you're done

Network Printers

These days, most printers which are going to be accessed from a Sun box will already be set up and working on the office network. They will already have a name defined in DNS and/or a well known IP address. This can be added to /etc/hosts if required. Once you know where it is, you need to tell the print service as follows:
lpadmin -p printername -s printername
If the printer is not directly on the network but can be accessed via a defined print server, you can use the following form:
lpadmin -p printername -s print_server!printername
To make a printer the default for the server:
lpadmin -d printername

Pretty printing

A sub-topic for setting up printing is to actually print nicely. Desktop-oriented printers probably aren't going to cope well with unix style files but it is possible to get around this using a the 'mp' print pre-processor. The simplest example is:
mp filename | lpr
Or
filep -l -h filename
# -l for landscape format, -h no header page
Look at the man page for more tips and tricks.

makewhatis

What do you do when you get annoying messages like
/usr/man/windex: No such file or directory
when you try a to use man -k (also known as apropos) ?

You need to find and use makewhatis to make your index.

Patching

However much - or little - patching you do, knowing the patch return codes is very useful. The most 'ignorable' codes are 2 (patch already applied) and 8 (attempt to patch a non-installed package). For a complete list, have a look here.