fssnap of / (root) fails under Solaris
Using fssnap
we can quickly take a temporary image (snapshot) of any UFS file system and then use this snapshot for backup operations.
fssnap
creates a temporary image of a file system by creating a virtual device and a backing store file. The virtual device acts like a real device and can be backed up, whilst the backing store contains copies of the pre-snapshot data that has changed since the creation of the snapshot.
For example:
# fssnap -o bs=/share/snapshots /
however this will fail if you do not disable ntp
while taking a snapshot of /. The following error is shown:
fssnap: ioctl: error 22: Invalid argument
from the error messages albeit ambigious, this is generated as xntpd is active, when I shut down xntpd, I can fssnap just fine.
fssnap_ufs says:
The file system is used as backing store by an application that uses mlock(3C) to lock its pages. Typically, these are real time applications, such as xntpd(1M)
.
- xntpd locks all its process memomry, including possible future mappings which might come from /lib/libc.so.1, etcxntpd puts itself in the realtime scheduling class.
- NOTE: only snapshots of / are affect, any other filesystems will be successful whilst xntpd is running
Therefore, the best practice would be as follows:
- Place NTP into maintenance*
# svcadm mark -t maintenance ntp
- Generate snapshot
# fssnap -o bs=/share/snapshots /
- Clear the NTP maintenance flag
# svcadm clear ntp
- You'll need to decide where to back it up to, for example:
# ufsdump 0uf /share/backups/root.ufsdump /dev/fssnap/0
- Finally, delete the snapshot
# fssnap -d /dev/fssnap/0
* Using the svcadm mark -t maintenance/clear
approach will work regardless. If not if the ntp service is disabled or enabled, you could easily use:
svcadm disable ntp svcadm enable ntp