SYMPTOMS
If a Solaris system fails to boot with messages similar to the following are encountered, the system will need to be booted from alternate Oracle Solaris media ( e.g. the failsafe archive, cd / dvd media, or an install image over the network) in order to update the boot_archive:
ok boot
Boot device: disk:a File and args:
Warning: Fcode sequence resulted in a net stack depth change of 1
The file just loaded does not appear to be executable.
ok
or
ok boot
Boot device: disk:a File and args:
ERROR: /packages/ufs-file-system: Last Trap: Division by Zero
The file just loaded does not appear to be executable.
ok
or
WARNING: The following files in / differ from the boot archive:
changed /kernel/drv/md.conf
The recommended action is to reboot to the failsafe archive to correct
the above inconsistency. To accomplish this, on a GRUB-based platform,
reboot and select the "Solaris failsafe" option from the boot menu.
On an OBP-based platform, reboot then type "boot -F failsafe". Then
follow the prompts to update the boot archive. Alternately, to continue
booting at your own risk, you may clear the service by running:
"svcadm clear system/boot-archive"
Mar 28 13:42:53 svc.startd[7]: svc:/system/boot-archive:default: Method "/lib/svc/method/boot-archive" failed with exit status 95.
Mar 28 13:42:53 svc.startd[7]: system/boot-archive:default failed fatally: transitioned to maintenance (see 'svcs -xv' for details)
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run
Note: The "files that differ" in the above message may be different than the above example, and may be any file contained within the boot_archive.
or
after system has been patched, boot messages such as:
Dec 01 10:06:39 UTC 2012 Boot device: /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@0,0:a File and args: -s
Dec 01 10:06:46 UTC 2012 SunOS Release 5.10 Version Generic_144488-14 64-bit
Dec 01 10:06:46 UTC 2012 Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/mntfs: undefined symbol 'zone_hold_ref'
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/mntfs: undefined symbol 'zone_init_ref'
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/mntfs: undefined symbol 'zone_rele_ref'
Dec 01 10:07:08 UTC 2012 WARNING: mod_load: cannot load module 'mntfs'
Dec 01 10:07:08 UTC 2012 WARNING: Cannot mount /etc/mnttab
Dec 01 10:07:08 UTC 2012 /kernel/drv/sparcv9/ip: undefined symbol 'ucredminsize'
Dec 01 10:07:08 UTC 2012 WARNING: mod_load: cannot load module 'ip'
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_disconnect'
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_getsockname'
Dec 01 10:07:08 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'nd_free'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'nd_load'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'UDP_WR'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_create'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_close'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_listen'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'udp_output'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_recvd'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'mi_mpprintf'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_alloc_hdr'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_get_opt'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'tcp_wput'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'mi_sprintf'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_bind'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_getpeername'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_sendmsg'
Dec 01 10:07:09 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_set_opt'
Dec 01 10:07:10 UTC 2012 /kernel/fs/sparcv9/sockfs: undefined symbol 'sctp_connect'
Dec 01 10:07:10 UTC 2012 WARNING: mod_load: cannot load module 'sockfs'
SOLUTION
A.Steps to update the boot_archive for UFS root
For UFS with a Solaris Volume Manager encapsulated root disk:
Reference: How to access (root) disk under Solaris Volume Manager Control from failsafe or CDROM (Document 1340586.1)
which includes the procedure to update the boot_archive in an Solaris Volume Manager encapsulated root environment
For UFS with no Solaris Volume Manager:
Fsck, then mount the root file system to an alternate mount point:
# fsck /dev/rdsk/c#t#d#s#
c# is the controller number, t# is the target number, d# is the disk number and s# is the slice number
Then mount the partition(s) to the mount point /mnt and maintain the same hierarchy:
# mount /dev/dsk/c#t#d#s# /mnt
Steps to update the boot_archive:
1. Note the timestamp and size of the existing boot_archive:
# cd /mnt/platform/`uname -m`
# ls -l boot_archive
2. Use bootadm to update the boot_archive:
# bootadm update-archive -R /mnt
3. Check the timestamp and size if the boot_archive again to make certain it was updated:
# ls -l boot_archive
4. If the timestamp on the boot_archive has not changed, the update of the boot_archive can be forced with:
# bootadm update-archive -fvR /mnt
Note: The bootadm update-archive command will take longer to finish when -f is used.
Example:
# bootadm update-archive -fvR /mnt
forced update of archive requested
cannot find: /mnt/etc/cluster/nodeid: No such file or directory
cannot find: /mnt/etc/mach: No such file or directory
Creating boot_archive for /mnt
updating /mnt/platform/sun4u/boot_archive
15+0 records in
15+0 records out
Note: The above "cannot find" messages are expected.
5. Check the timestamp and size if the boot_archive again. It should reflect a current timestamp now:
# ls -l boot_archive
6. Unmount the root file system and reboot:
# cd /
# umount /mnt
# reboot
B.Steps to update the boot_archive for ZFS root
Import and mount the ZFS root pool (rpool)
Reference: Document 1020186.1 How to mount zfs root pool (rpool) booting from DVD or network.
Steps to update the boot_archive:
1. Note the timestamp and size of the existing boot_archive:
# cd /mnt/platform/`uname -m`
# ls -l boot_archive
2. Use bootadm to update the boot_archive:
# bootadm update-archive -R /mnt
3. Check the timestamp and size if the boot_archive again to make certain it was updated:
# ls -l boot_archive
4. If the timestamp on the boot_archive has not changed, the update of the boot_archive can be forced with:
# bootadm update-archive -fvR /mnt
Note: The bootadm update-archive command will take longer to finish when -f is used.
Example:
# bootadm update-archive -fvR /mnt
forced update of archive requested
cannot find: /mnt/etc/cluster/nodeid: No such file or directory
cannot find: /mnt/etc/mach: No such file or directory
Creating boot_archive for /mnt
updating /mnt/platform/sun4u/boot_archive
15+0 records in
15+0 records out
Note: The above "cannot find" messages are expected.
5. Check the timestamp and size if the boot_archive again. It should reflect a current timestamp now:
# ls -l boot_archive
6. Export the root pool and reboot:
# cd /
# zpool export rpool
# reboot