The /devices and /dev directories on one of my Solaris 9 hosts got majorly borked a few weeks back, and the trusy old `devfsadm -Cv’ command wasn’t able to fix our problem. To clean up the device tree, I booted from CDROM into single user mode and manually cleaned up the device hierarchy. Here is what I did to fix my problems (WARNING: This fixed my problem, but there is no guarantee that this will work for you. Please test changes similar to this on non-production systems prior to adjusting production systems.):
Step 1: Boot from CDROM into single user mode
Step 2: Mount the “/” partition to your favorite place (if your boot devices are mirrored, you will need to perform the following operations on each half of the mirror):
$ mount /dev/dsk/c0t0d0s0 /a
Step 3: Move the existing path_to_inst aside:
$ mv /a/etc/path_to_inst /a/etc/08012007.path_to_inst.orig
Step 4: Clean out the /devices and /dev directories:
$ rm -rf /a/devices/
$ rm -rf /a/dev/
Step 5: Replicate the /devices and /dev directories that were created during boot:
$ cd /devices; find . | cpio -pmd /a/devices
$ cd /dev; find . | cpio -pmd /a/dev
Step 6: Adjust the vfstab to reflect any device changes
Step 7: Boot with the “-a”, “-s” and “-r” options to create a new path_to_inst (you can optionally use `devfsadm -C -r /a -p /a/etc/path_to_inst -v’ to create the path_to_inst from single user mode), and to add device entries that weren’t found while booted from single user mode
Step 8: Grab a soda and enjoy the fruits of your labor! :)