UFS logging in Solaris (updated)
On Solaris 7 and later, the UFS file system code was extended to provide file system logging.
When enabled, all changes to file system meta-data are written to an intent log prior to being written out to the file system itself. If the machine then crashes, the log is used to roll back any unfinished changes to the meta-data, negating the need to analyse the file system structures. This reduces the fsck for UFS based file systems to a matter of seconds.
Enabling UFS logging
To enable this facility simply specify the logging mount option in /etc/vfstab
# grep logging /etc/vfstab /dev/dsk/c1t0d0s4 /dev/rdsk/c1t0d0s4 /data ufs 2 yes logging
From the above, /data has logging enabled, or we can specify the -o logging if manually mounting a file system.
# mount -o logging /dev/dsk/c1t0d0s4 /data
Disabling UFS logging
If you do not require logging of a UFS file system, then either remove the logging entry from /etc/vfstab or explicitly specify using the no_logging option.
# grep logging /etc/vfstab /dev/dsk/c1t1d0s4 /dev/rdsk/c1t1d0s4 /data2 ufs 2 yes no_logging
From the above /data2 has no logging explicitly set
Solaris 9 onwards...
With Solaris 9 9/04 logging is enabled by default for all UFS file systems except under the following conditions:
- When logging is explicitly disabled.
- If there is insufficient file system space for the log.
Troubleshooting
If you don't have enough disk space for logging data, a message similar to the following is displayed:
# mount /dev/dsk/c1t0d0s4 /data /data: No space left on device Could not enable logging for /mnt on /dev/dsk/c1t0d0s4.
From the mount_ufs man page...
logging | nologging
If logging is specified, then logging is
enabled for the duration of the mounted
file system. Logging is the process of
storing transactions (changes that make up
a complete UFS operation) in a log before
the transactions are applied to the file
system. Once a transaction is stored, the
transaction can be applied to the file sys-
tem later. This prevents file systems from
becoming inconsistent, therefore eliminat-
ing the need to run fsck. And, because
fsck can be bypassed, logging reduces the
time required to reboot a system if it
crashes, or after an unclean halt. The
default behavior is nologging.
The log is allocated from free blocks on
the file system, and is sized approximately
1 Mbyte per 1 Gbyte of file system, up to a
maximum of 64 Mbytes. Logging can be
enabled on any UFS, including root (/).
The log created by UFS logging is continu-
ally flushed as it fills up. The log is
totally flushed when the file system is
unmounted or as a result of the lockfs -f
command.