Annotation of wikisrc/guide/misc.mdwn, revision 1.3

1.3     ! jdf         1: **Contents**
        !             2: 
        !             3: [[!toc levels=3]]
        !             4: 
1.1       jdf         5: # Miscellaneous operations
                      6: 
                      7: This chapter collects various topics, in sparse order
                      8: 
                      9: ## Installing the boot manager
                     10: 
                     11: ### fdisk
                     12: 
1.2       jdf        13: Sysinst, the NetBSD installation program, usually installs the NetBSD boot
                     14: manager on the hard disk. The boot manager can also be installed or reconfigured
                     15: at a later time, if needed, with the
1.1       jdf        16: [fdisk(8)](http://netbsd.gw.com/cgi-bin/man-cgi?fdisk+8+NetBSD-current)
                     17: command. For example:
                     18: 
                     19:     # fdisk -B wd0
                     20: 
1.2       jdf        21: If NetBSD doesn't boot from the hard disk, you can boot it from the installation
                     22: floppy and start the kernel on the hard disk. Insert the installation disk and,
1.1       jdf        23: at the boot prompt, give the following command:
                     24: 
                     25:     > boot wd0a:netbsd
                     26: 
1.2       jdf        27: This boots the kernel on the hard disk (use the correct device, for example sd0a
1.1       jdf        28: for a SCSI disk).
                     29: 
1.2       jdf        30: *Note*: Sometimes `fdisk -B` doesn't give the expected result (at least it
                     31: happened to me), probably if you install/remove other operating systems like
                     32: Windows 95 or Linux with LILO. In this case, try running `fdisk -i` (which is
1.1       jdf        33: known as `fdisk /mbr` from DOS) and then run again `fdisk` from NetBSD.
                     34: 
                     35: ### installboot
                     36: 
                     37: There is another tool for installing a bootloader, named
                     38: [installboot(8)](http://netbsd.gw.com/cgi-bin/man-cgi?installboot+8+NetBSD-current).
1.2       jdf        39: Depending on the platform you are using, its usage differs, so you should read
1.1       jdf        40: the manpage and its extensive *EXAMPLES* section.
                     41: 
1.2       jdf        42: E.g., if you want to install the bootloader for a ffs filesystem to the
1.1       jdf        43: partition you have your NetBSD in (in this case, `sd0c`), you would use:
                     44: 
                     45:     installboot -v /dev/rsd0c /usr/mdec/bootxx_ffs
                     46: 
                     47: ## Deleting the disklabel
                     48: 
1.2       jdf        49: Though this is not an operation that you need to perform frequently, it can be
                     50: useful to know how to do it in case of need. Please be sure to know exactly what
1.1       jdf        51: you are doing before performing this kind of operation. For example:
                     52: 
                     53:     # dd if=/dev/zero of=/dev/rwd0c bs=8k count=1
                     54: 
1.2       jdf        55: The previous command deletes the disklabel (not the MBR partition table). To
1.1       jdf        56: completely delete the disk, the whole device `rwd0d` must be used. For example:
                     57: 
                     58:     # dd if=/dev/zero of=/dev/rwd0d bs=8k
                     59: 
1.2       jdf        60: The commands above will only work as expected on the i386 and amd64 ports of
1.1       jdf        61: NetBSD. On other ports, the whole device will end in c, not d (e.g. `rwd0c`).
                     62: 
                     63: ## Speaker
                     64: 
1.2       jdf        65: I found this tip on a mailing list (I don't remember the author). To output a
1.1       jdf        66: sound from the speaker (for example at the end of a long script) the
                     67: [spkr(4)](http://netbsd.gw.com/cgi-bin/man-cgi?spkr+4+NetBSD-current)
1.2       jdf        68: driver can be used in the kernel config, which is mapped on `/dev/speaker`. For
1.1       jdf        69: example:
                     70: 
                     71:     echo 'BPBPBPBPBP' > /dev/speaker
                     72: 
1.2       jdf        73: *Note*: The `spkr` device is not enabled in the generic kernel; a customized
1.1       jdf        74: kernel is needed.
                     75: 
                     76: ## Forgot root password?
                     77: 
                     78: If you forget root's password, not all is lost and you can still recover the
                     79: system with the following steps: boot single user, mount `/` and change root's
                     80: password. In detail:
                     81: 
1.2       jdf        82: 1. Boot single user: when the boot prompt appears and the five seconds
1.1       jdf        83:    countdown starts, give the following command:
                     84: 
                     85:        > boot -s
                     86: 
                     87: 2. At the following prompt
                     88: 
                     89:        Enter pathname of shell or RETURN for sh:
                     90: 
                     91:    press Enter.
                     92: 
                     93: 3. Write the following commands:
                     94: 
                     95:        # fsck -y /
                     96:        # mount -u /
                     97:        # fsck -y /usr
                     98:        # mount /usr
                     99: 
                    100: 4. Change root's password:
                    101: 
                    102:        # passwd root
                    103:        Changing local password for root.
                    104:        New password: (not echoed)
                    105:        Retype new password: (not echoed)
1.2       jdf       106:        #
1.1       jdf       107: 
                    108: 5. Exit the shell to go to multiuser mode.
                    109: 
                    110:        # exit
                    111: 
                    112: 
                    113: If you get the error `Password file is busy`, please see the section below.
                    114: 
                    115: ## Password file is busy?
                    116: 
1.2       jdf       117: If you try to modify a password and you get the mysterious message `Password
                    118: file is busy, it probably means that the file `/etc/ptmp` has not been deleted
                    119: from the system. This file is a temporary copy of the `/etc/master.passwd` file;
1.1       jdf       120: check that you are not losing important information and then delete it:
                    121: 
1.2       jdf       122:     # rm /etc/ptmp
1.1       jdf       123: 
1.2       jdf       124: *Note*: If the file `/etc/ptmp` exists you can also receive a warning message at
1.1       jdf       125: system startup. For example:
                    126: 
                    127:     root: password file may be incorrect - /etc/ptmp exists
                    128: 
                    129: ## Adding a new hard disk
                    130: 
1.2       jdf       131: This section describes how to add a new hard disk to an already working NetBSD
                    132: system. In the following example a new SCSI controller and a new hard disk,
                    133: connected to the controller, will be added. If you don't need to add a new
                    134: controller, skip the relevant part and go to the hard disk configuration. The
                    135: installation of an IDE hard disk is identical; only the device name will be
1.1       jdf       136: different (`wd#` instead of `sd#`).
                    137: 
1.2       jdf       138: As always, before buying new hardware, consult the hardware compatibility list
                    139: of NetBSD or ask on a mailing list to make sure the new device is supported by
1.1       jdf       140: NetBSD.
                    141: 
1.2       jdf       142: When the SCSI controller has been physically installed in the system and the new
                    143: hard disk has been connected, it's time to restart the computer and check that
1.1       jdf       144: the device is correctly detected, using the
                    145: [dmesg(8)](http://netbsd.gw.com/cgi-bin/man-cgi?dmesg+8+NetBSD-current)
                    146: command. This is the sample output for an NCR-875 controller:
                    147: 
                    148:     ncr0 at pci0 dev 15 function 0: ncr 53c875 fast20 wide scsi
                    149:     ncr0: interrupting at irq 10
                    150:     ncr0: minsync=12, maxsync=137, maxoffs=16, 128 dwords burst, large dma fifo
                    151:     ncr0: single-ended, open drain IRQ driver, using on-chip SRAM
                    152:     ncr0: restart (scsi reset).
                    153:     scsibus0 at ncr0: 16 targets, 8 luns per target
                    154:     sd0(ncr0:2:0): 20.0 MB/s (50 ns, offset 15)
                    155:     sd0: 2063MB, 8188 cyl, 3 head, 172 sec, 512 bytes/sect x 4226725 sectors
                    156: 
1.2       jdf       157: If the device doesn't appear in the output, check that it is supported by the
                    158: kernel that you are using; if necessary, compile a customized kernel (see
1.1       jdf       159: [[Compiling the kernel|guide/kernel]]).
                    160: 
1.2       jdf       161: Now the partitions can be created using the
1.1       jdf       162: [fdisk(8)](http://netbsd.gw.com/cgi-bin/man-cgi?fdisk+8+NetBSD-current)
                    163: command. First, check the current status of the disk:
                    164: 
                    165:     # fdisk sd0
                    166:     NetBSD disklabel disk geometry:
                    167:     cylinders: 8188 heads: 3 sectors/track: 172 (516 sectors/cylinder)
                    168:     
                    169:     BIOS disk geometry:
                    170:     cylinders: 524 heads: 128 sectors/track: 63 (8064 sectors/cylinder)
                    171:     
                    172:     Partition table:
                    173:     0: sysid 6 (Primary 'big' DOS, 16-bit FAT (> 32MB))
                    174:         start 63, size 4225473 (2063 MB), flag 0x0
                    175:             beg: cylinder    0, head   1, sector  1
                    176:             end: cylinder  523, head 127, sector 63
                    177:     1: <UNUSED>
                    178:     2: <UNUSED>
                    179:     3: <UNUSED>
                    180: 
1.2       jdf       181: In this example the hard disk already contains a DOS partition, which will be
1.1       jdf       182: deleted and replaced with a native NetBSD partition. The command
1.2       jdf       183: `fdisk -u sd0` allows to modify interactively the partitions. The modified data
                    184: will be written on the disk only before exiting and fdisk will request a
1.1       jdf       185: confirmation before writing, so you can work relaxedly.
                    186: 
                    187: **Disk geometries**
                    188: 
1.2       jdf       189: The geometry of the disk reported by fdisk can appear confusing. Dmesg reports
                    190: 4226725 sectors with 8188/3/172 for C/H/S, but 8188\*3\*172 gives 4225008 and
                    191: not 4226725. What happens is that most modern disks don't have a fixed geometry
                    192: and the number of sectors per track changes depending on the cylinder: the only
                    193: interesting parameter is the number of sectors. The disk reports the C/H/S
                    194: values but it's a fictitious geometry: the value 172 is the result of the total
1.1       jdf       195: number of sectors (4226725) divided by 8188 and then by 3.
                    196: 
1.2       jdf       197: To make things more confusing, the BIOS uses yet another *fake* geometry (C/H/S
                    198: 524/128/63) which gives a total of 4225536, a value which is a better
                    199: approximation to the real one than 425008. To partition the disk we will use the
                    200: BIOS geometry, to maintain compatibility with other operating systems, although
1.1       jdf       201: we will lose some sectors (4226725 - 4225536 = 1189 sectors = 594 KB).
                    202: 
1.2       jdf       203: To create the BIOS partitions the command `fdisk -u` must be used; the result is
1.1       jdf       204: the following:
                    205: 
                    206:     Partition table:
                    207:     0: sysid 169 (NetBSD)
                    208:         start 63, size 4225473 (2063 MB), flag 0x0
                    209:             beg: cylinder    0, head   1, sector  1
                    210:             end: cylinder  523, head 127, sector 63
                    211:     1: <UNUSED>
                    212:     2: <UNUSED>
                    213:     3: <UNUSED>
                    214: 
1.2       jdf       215: Now it's time to create the disklabel for the NetBSD partition. The correct
1.1       jdf       216: steps to do this are:
                    217: 
                    218:     # disklabel sd0 > tempfile
                    219:     # vi tempfile
                    220:     # disklabel -R -r sd0 tempfile
                    221: 
                    222: If you try to create the disklabel directly with
                    223: 
                    224:     # disklabel -e sd0
                    225: 
                    226: you get the following message
                    227: 
                    228:     disklabel: ioctl DIOCWDINFO: No disk label on disk;
                    229:     use "disklabel -I" to install initial label
                    230: 
                    231: because the disklabel does not yet exist on the disk.
                    232: 
1.2       jdf       233: Now we create some disklabel partitions, editing the `tempfile` as already
1.1       jdf       234: explained. The result is:
                    235: 
                    236:     #      size   offset   fstype [fsize bsize   cpg]
                    237:     a:  2048004       63   4.2BSD   1024  8192    16 # (Cyl.  0*- 3969*)
                    238:     c:  4226662       63   unused      0     0       # (Cyl.  0*- 8191*)
                    239:     d:  4226725        0   unused      0     0       # (Cyl.  0 - 8191*)
                    240:     e:  2178658  2048067   4.2BSD   1024  8192    16 # (Cyl.  3969*- 8191*)
                    241: 
1.2       jdf       242: *Note*: When the disklabel has been created it is possible to optimize it
                    243: studying the output of the command `newfs -N /dev/rsd0a`, which warns about
                    244: the existence of unallocated sectors at the end of a disklabel partition. The
                    245: values reported by newfs can be used to adjust the sizes of the partitions with
1.1       jdf       246: an iterative process.
                    247: 
1.2       jdf       248: The final operation is the creation of the file systems for the newly defined
1.1       jdf       249: partitions (`a:` and `e:`).
                    250: 
                    251:     # newfs /dev/rsd0a
                    252:     # newfs /dev/rsd0e
                    253: 
1.2       jdf       254: The disk is now ready for usage, and the two partitions can be mounted. For
1.1       jdf       255: example:
                    256: 
                    257:     # mount /dev/sd0a /mnt
                    258: 
1.2       jdf       259: If this succeeds, you may want to put an entry for the partition into
1.1       jdf       260: `/etc/fstab`.
                    261: 
                    262: ## How to rebuild the devices in /dev
                    263: 
1.2       jdf       264: First shutdown to single user, partitions still mounted `rw` (read-write); You
                    265: can do that by just typing `shutdown now` while you are in multi user mode, or
1.1       jdf       266: reboot with the `-s` option and make `/` and `/dev` read-writable by doing.
                    267: 
                    268:     # mount -u /
                    269:     # mount -u /dev
                    270: 
                    271: Then:
                    272: 
                    273:     # mkdir /newdev
                    274:     # cd /newdev
                    275:     # cp /dev/MAKEDEV* .
                    276:     # sh ./MAKEDEV all
                    277:     # cd /
                    278:     # mv dev olddev
                    279:     # mv newdev dev
                    280:     # rm -r olddev
                    281: 
                    282: Or if you fetched all the sources in `/usr/src`:
                    283: 
                    284:     # mkdir /newdev
                    285:     # cd /newdev
                    286:     # cp /usr/src/etc/MAKEDEV.local .
                    287:     # ( cd /usr/src/etc ; make MAKEDEV )
                    288:     # cp /usr/src/etc/obj*/MAKEDEV .
                    289:     # sh ./MAKEDEV all
                    290:     # cd /
                    291:     # mv dev olddev; mv newdev dev
                    292:     # rm -r olddev
                    293: 
                    294: You can determine $arch by
                    295: 
                    296:     # uname -m
                    297: 
                    298: or
                    299: 
                    300:     # sysctl hw.machine_arch
                    301: 

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