writing flexible filesystems in fuse-python
TRANSCRIPT
Writing flexible filesystems with
FUSE-Python — Anurag Patel Red Hat, Pune
FilesystemsFS Platform
vfat Windows
hfs+ OS X
ext4 Linux
xfs IRIX, Linux
nfs Linux*
iso9660 CD-ROM
fuse Linux*
# cat /proc/filesystems
FilesSymbol Meaning
d Directory
l Symbolic link
c Character device
b Block device
s Socket
p Named pipe
- Regular file
Why FUSE?Usable by unprivileged usersEasier development cycleEasy to install (apt-get install sshfs)Multiple language support and bindingsC, C++, Python, Java, Ruby, Perl, Golang, LuaPorted to FreeBSD, Mac OSX, OpenSolaris
The stat structureMember Description
st_mode Inode protection mode
st_ino File serial number
st_dev Device ID
st_nlink Number of hard links
st_uid User ID of file
st_gid Group ID of file
st_size File size in bytes
st_atime Time of last access
st_mtime Time of last data modification
st_ctime Time of last status change
ref: <sys/stat.h>
$ stat /etc/fstab[anurag@zomg toyfs]$ stat /etc/fstab File: ‘/etc/fstab’ Size: 481 Blocks: 8 IO Block: 4096 regular fileDevice: fd01h/64769d Inode: 259076 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Context: system_u:object_r:etc_t:s0Access: 2015-02-20 14:46:16.248920273 +0530Modify: 2015-02-11 20:42:51.750210844 +0530Change: 2015-02-11 21:56:52.520767293 +0530 Birth: -[anurag@zomg toyfs]$
st_modest.st_mode = stat.S_IFDIR | 0755
Each bit of the output is 0 if the corresponding bitof x AND of y is 0, otherwise it's 1
ST_MODE flagsType Flag
d stat.S_IFDIR
l stat.S_IFLNK
c stat.S_IFCHR
b stat.S_IFBLK
s stat.S_IFSOCK
p stat.S_IFIFO
- stat.S_IFREG
ref: Python stat module
Filesystem methodsGeneral File operation
getattr(path) open(path, flags)
mkdir(path, mode) create(path, flags, mode)
rename(old, new) read(path, length, offset)
mknod(path, mode, rdev) write(path, buf, offset)
link(target, name) fgetattr(path)
symlink(target, name) ftruncate(path, len)
readlink(path) flush(path)
unlink(path) release(path)
fsinit(self) fsync(path, fdatasync)
FUSE filesystemsfuse-zip, rarfs, mysqlfs, cryptfs, httpfs, sshfs,
imapfs, gmailfs, flickrfs, ntfs-3g, gitfs, and manymany more...