[Box Backup] inode, fsid, and OS dependencies

Joe Krahn boxbackup@fluffy.co.uk
Fri, 17 Dec 2004 18:13:32 -0500


Nick Knight wrote:
> Speaking from the win32 port - I agree with all of that, win32 however
> does support a file number, unique to that file on that file system.
OK; Does it stay the same on a rename, to allow for the renamed-file 
tracking? And (for my own info) how do you access this number?

I suppose Win32 should put this in the stat inode field, but Win32 isn't 
very ANSI/POSIX friendly.

Joe

> 
> -----Original Message-----
> From: boxbackup-admin@fluffy.co.uk [mailto:boxbackup-admin@fluffy.co.uk]
> On Behalf Of Joe Krahn
> Sent: 14 December 2004 16:44
> To: boxbackup@fluffy.co.uk
> Subject: [Box Backup] inode, fsid, and OS dependencies
> 
> While looking into info about inodes and filesystem IDs, I found some 
> compatibility issues, even for POSIX systems. It also made me think 
> about OS dependencies in general. So, here's some info/ideas:
> 
> When native Win32 support is merged, OS dependency issues will increase.
> 
> If it were me, I would try to keep the code clean by consolidating 
> OS-dependent code. So, instead of #ifdef WIN32/LINUX/etc., you just make
> 
> a set of generic functions, then include source files for these 
> depending on the OS, such as BoxWindows.cpp, BoxPosix.cpp, etc.
> 
> If it were me, I would use plain C for the OS functions. An alternative 
> C++ approach would be an OperatingSystem class. It might be nice to have
> 
> a POSIX class, then make subclass variants for BSD/Linux/etc.
> 
> As for filesystem ID (fsid) and inodes, the purpose, I think, is to use 
> (fsid,inode) as a globally unique file identifier that does not change 
> when renamed. Technically, struct statfs.f_fsid is the unique filesystem
> 
> ID, but this field is not well supported. Struct stat.st_dev is well 
> supported, but could change if a disk is added or removed. So, the 
> mountpoint is a reasonable compromise. But, I would put this in the 
> "OS-dependent" category. It may be better to use a filesystem label or 
> GUID/UUID instead, depending on the OS.
> 
> Inodes are a further problem: Windows doesn't support inodes. (Maybe the
> 
> Longhorn FS will.) It also turns out that inode is not always unique in 
>    a POSIX system: some file systems have a larger actual inode number, 
> and only return a hash of the real inode in stat.st_dev (i.e. Coda uses 
> 128 bit inodes). So, inode is also an OS dependent thing.
> 
> It might be good to have the inode field variable sized. Is that the 
> case now? I haven't looked at the way data is stored on the server end.
> 
> Joe Krahn
> _______________________________________________
> boxbackup mailing list
> boxbackup@fluffy.co.uk
> http://lists.warhead.org.uk/mailman/listinfo/boxbackup
> 
> 
> _______________________________________________
> boxbackup mailing list
> boxbackup@fluffy.co.uk
> http://lists.warhead.org.uk/mailman/listinfo/boxbackup