A fairly common question I get asked is “How can I find out what files were backed up?”
This is actually fairly easy, particularly if you’re prepared to use the command line. You need to run two commands – mminfo, and nsrinfo.
The command mminfo accesses the NetWorker media database, and is used to pull out details of the saveset whose files you want to view. The nsrinfo command is then used to retrieve the relevant information from the client file index.
For example, consider the following situation – there’s two incremental backups of the “/etc” directory on the machine “faero”, and we want to know what was backed up in each backup. First, run mminfo to retrieve the nsavetime, which we use in nsrinfo. The mminfo command might resemble the following:
# mminfo -q "name=/etc,volume=Default.001.RO,level=incr" -r "savetime(22),nsavetime" date time save time 01/27/09 09:57:52 1233010672 01/27/09 16:39:04 1233034744
Having retrieved the nsavetime field, we can then feed that into nsrinfo in order to get the list of files for that backup:
# nsrinfo -t 1233034744 faero scanning client `faero' for savetime 1233034744(Tue Jan 27 16:39:04 2009) from the backup namespace /etc/svc/volatile// /etc/svc/ /etc/mnttab// /etc/ / 5 objects found
(So the most common invocation format of nsrinfo is: “nsrinfo -t nsavetime clientName”)
Like most NetWorker commands, nsrinfo will also accept a “-v” option for verbosity. Include this in your nsrinfo command and you get a whole lot more information. For example, a short excerpt from the same nsavetime/saveset used above would resemble the following:
# nsrinfo -v -t 1233034744 faero scanning client `faero' for savetime 1233034744(Tue Jan 27 16:39:04 2009) from the backup namespace UNIX ASDF v2 file `/etc/svc/volatile//', NSR size=160, fid = 0.0, file size=512 UNIX ASDF v2 file `/etc/svc/', NSR size=632, fid = 4294967295.1520, file size=1024 ndirentry->1433 .. ndirentry->0 volatile// ndirentry->1945 repository.db ndirentry->978 repository-boot ndirentry->1002 repository-manifest_import ndirentry->4310 repository-manifest_import-20070225_055641 ndirentry->714 repository-boot-20070907_074755 ndirentry->1001 repository-manifest_import-20070907_074828 ndirentry->44611 repository-manifest_import-20070225_093651 ndirentry->988 repository-boot-20071004_111149 ndirentry->1014 repository-boot-20080414_023012 ndirentry->1066 repository-boot-20070920_041017 UNIX ASDF v2 file `/etc/mnttab//', NSR size=156, fid = 0.0, file size=512 UNIX ASDF v2 file `/etc/', NSR size=5040, fid = 4294967295.1433, file size=4608 ndirentry->2 .. ndirentry->1434 TIMEZONE
As you can see, this is a lot more information. It’s not necessarily information you need all the time, but like so many other chunks of information retievable from NetWorker, it’s useful to know how to retrieve it, and that it’s available should you need it.
If you’re wondering how NetWorker knows which saveset to retrieve based on the nsavetime, it’s simple – for any individual client, no two savesets will ever be generated with the same nsavetime. Check it out for yourself if you’re not sure. For example, from a backup with parallelism of 12 for one client (i.e,. higher parallelism than savesets), the savesets were generated as follows:
# mminfo -q "client=faero" -r "name,level,savetime(22),nsavetime" -ot name lvl date time save time /opt/ActivePerl-5.8 full 01/27/09 09:49:01 1233010141 /opt/IDATA full 01/27/09 09:49:02 1233010142 /space/debug/2 full 01/27/09 09:49:03 1233010143 /space/debug/1 full 01/27/09 09:49:04 1233010144 /opt/SUNWrtvc full 01/27/09 09:49:05 1233010145 /opt/SUNWmlib full 01/27/09 09:49:06 1233010146 /etc full 01/27/09 09:50:15 1233010215 index:faero full 01/27/09 09:55:29 1233010529 bootstrap full 01/27/09 09:55:30 1233010530
So you can see – even with parallelism greater than one, there’s always at least one second difference between the start time for savesets.
Is there any way to search for a particular file in a group of savesets?
Using nsrinfo, about the only way you can do this is just search by client instead of saveset. E.g., “nsrinfo clientName”; however, this is going to return everything browsable. The nsrinfo command does take a filename argument, but then it becomes an exact search.
It’s more the case that you’d need to script that sort of search. This is part of why we came up with IDATA Tools and the find-files utility; it will take a partial filename and then search all savesets for the nominated client(s) across the nominated time period.
I guess I’m correct that this works only for browseable savesets right?
Yes – only browsable savesets have the information retained in the indices to support this option.