Mel wrote:

On Tuesday 16 December 2008 15:18:19 Bernard Dugas wrote:
I want to extract the list of files changed between 2 snapshots, to be
able to do efficient backups.

Just use dump(8)?

Yes in first step, may be. But for fast replication of changes ?

Imagine i have a 1TB drive with 1 partition on serverA, and i want it duplicated on another 1TB drive serverB, with 1Gbps network between them, so network speed is not a problem.

I begin with dump or any copy mean to have the 2 drives having the partitions in the same state, from a first "snapshot image 0" which is the reference on serverA, made with mksnap_ffs.

A user change only 1 small file on serverA.

After 1mn, i create "snapshot0+1" file on serverA.

To find the files changed on serverA between snapshot0 and snapshot0+1, any current dump or equivalent will have to read all file records of 1TB partition, inside snapshot0+1 complete view of partition, to find 1 changed file. Even on nice day, it may take more than 1mn.

But the beauty and efficiency of snapshot concept is that snapshot0 file (internal structure) contains a reference to all data blocks changed between snapshot0 and snapshot0+1 : this is why a snapshot file is so small and efficient.

It is certainly possible to find in snapshot0 file inside structure the list of blocks changed until snapshot0+1 was made, and then find which file is the owner of the changed blocks.

Then it will appear that only 1 file has been changed on whole partition and we just have to send this changed file from snapshot0+1 view to serverB.

So using the internal structure of snapshots file is far more efficient than reading all directory records for last change time...

Please note that i try to use the expressions "snapshot file" and "snapshot view" very cautiosly, because they don't mean the same at all :-)

And what snapshots do you mean? As in mksnap_ffs? Cause that's described in /usr/src/sys/ufs/ffs/ffs_snapshot.c:
   127  TAILQ_HEAD(snaphead, inode);
   129  struct snapdata {
   130          struct snaphead sn_head;
   131          daddr_t sn_listsize;
   132          daddr_t *sn_blklist;
   133          struct lock sn_lock;
   134  };

and not exposed to userland.

Thanks, this is a good hint ! Just needing some doc and help to understand how to use it : i'm more in design now, programmation skills are far away :-(

Best regards,
Bernard DUGAS Mobile +33 615 333 770
_______________________________________________ mailing list
To unsubscribe, send any mail to ""

Reply via email to