From: Jeff M. <je...@em...> - 2008-02-21 19:11:20
|
I'm trying to make a custom filesystem with FUSE, and I see this weird behavior. I'm developing it as the user "kde4user" and running it as that user as well, mounting it to a directory that I have write permissions. Here's the output of ls -al as kde4user looking at the mount point: total 1 drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. drwxr-xr-x 2 kde4user kde4user 48 2008-02-21 14:03 mount As root, it looks exactly the same. After I mount my filesystem, however, I get the following from kde4user: total 1 drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. drwxr-xr-x 2 kde4user kde4user 0 1969-12-31 19:00 mount (should I be worried about that size 0?) I can go into mount and see some of the structures I am populating in there without difficulty. However, if I do an ls -al as root: ls: cannot access mount: Permission denied total 1 drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. ?????????? ? ? ? ? ? mount I'm not really sure why that happens. I can unmount the mounted filesystem as root, but I can't otherwise access/stat/whatever it. This is the same for any other user than kde4user. I thought perhaps I needed a statfs function, so I made one that should always give the proper f_files value for any directory. I saw from beaglefs that they set f_bsize to getpagesize(), but I'm not really sure why, or if that's appropriate, or what other value should be there...(?) And I've seen when mounting with -d that the statfs function is never accessed anyways. Any help is appreciated...I've looked at a few other small FUSE filesystems and I don't think I see anything very different from mine in the code that should cause such weird issues. Thanks, Jeff |
From: Miklos S. <mi...@sz...> - 2008-02-27 13:37:34
|
> I'm trying to make a custom filesystem with FUSE, and I see this weird > behavior. I'm developing it as the user "kde4user" and running it as > that user as well, mounting it to a directory that I have write > permissions. Here's the output of ls -al as kde4user looking at the > mount point: > > total 1 > drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . > drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. > drwxr-xr-x 2 kde4user kde4user 48 2008-02-21 14:03 mount > > As root, it looks exactly the same. > > After I mount my filesystem, however, I get the following from kde4user: > > total 1 > drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . > drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. > drwxr-xr-x 2 kde4user kde4user 0 1969-12-31 19:00 mount > > (should I be worried about that size 0?) > > I can go into mount and see some of the structures I am populating in > there without difficulty. However, if I do an ls -al as root: > > ls: cannot access mount: Permission denied > total 1 > drwxr-xr-x 3 kde4user kde4user 72 2008-02-21 14:03 . > drwxr-xr-x 3 kde4user users 472 2008-02-21 14:03 .. > ?????????? ? ? ? ? ? mount > > I'm not really sure why that happens. I can unmount the mounted > filesystem as root, but I can't otherwise access/stat/whatever it. This > is the same for any other user than kde4user. Yup, this is normal. To allow root and other users access the filesystem you have to use the '-oallow_root' or '-oallow_other' options. Miklos |
From: Jeff M. <je...@em...> - 2008-02-27 14:17:14
|
Miklos Szeredi wrote: >> I'm not really sure why that happens. I can unmount the mounted >> filesystem as root, but I can't otherwise access/stat/whatever it. This >> is the same for any other user than kde4user. >> > > Yup, this is normal. To allow root and other users access the > filesystem you have to use the '-oallow_root' or '-oallow_other' > options. > Yes, someone pointed that out to me. But I still don't have answers for the other questions. Thanks, Jeff |
From: Miklos S. <mi...@sz...> - 2008-02-27 14:42:57
|
> >> I'm not really sure why that happens. I can unmount the mounted > >> filesystem as root, but I can't otherwise access/stat/whatever it. This > >> is the same for any other user than kde4user. > >> > > > > Yup, this is normal. To allow root and other users access the > > filesystem you have to use the '-oallow_root' or '-oallow_other' > > options. > > > Yes, someone pointed that out to me. But I still don't have answers for > the other questions. About statfs? f_bsize is very poorly defined, but to avoid trouble it should be set to the same value as f_frsize, which has a well defined meaning (see 'man statvfs'). So the value should depend on the granularity of space allocation in your filesystem. Miklos |
From: Jeff M. <kd...@em...> - 2008-02-27 15:10:29
|
Miklos Szeredi wrote: > About statfs? f_bsize is very poorly defined, but to avoid trouble it > should be set to the same value as f_frsize, which has a well defined > meaning (see 'man statvfs'). So the value should depend on the > granularity of space allocation in your filesystem. > I checked the man page. My filesystem isn't real; it's all smoke and mirrors, displaying "files" that upon access trigger actions, so there isn't actually any space allocation...so f_frsize should be set to zero? I initially was putting in the statfs function because directory sizes are showing up as zero. I'm not sure why (or if it even matters)...I thought perhaps f_files needed to be provided, but that didn't change anything. But during my testing using -d, the statfs function was never accessed anyways...is this normal? One other thing I've stumbled upon is that I'd like to be able to list it in fstab and have it be able to be mounted by any user. But I always end up with fuse: invalid argument `/home/jeff/fuse-test/mountpoint' I've tried giving the device in the fstab entry as things like /dev/zero and such, and even actual zero-filled files, but nothing seem to work. Tried it as a loopback device too, no luck. How does one go about this? Thanks, Jeff |
From: Allen P. <pul...@co...> - 2008-02-27 15:13:31
|
> so f_frsize should be set to zero? A safe approach is to just call the block size 512 bytes and where appropriate compute # blocks = (size + 511) / 512 |
From: Miklos S. <mi...@sz...> - 2008-02-27 15:30:06
|
> > About statfs? f_bsize is very poorly defined, but to avoid trouble it > > should be set to the same value as f_frsize, which has a well defined > > meaning (see 'man statvfs'). So the value should depend on the > > granularity of space allocation in your filesystem. > > > I checked the man page. My filesystem isn't real; it's all smoke and > mirrors, displaying "files" that upon access trigger actions, so there > isn't actually any space allocation...so f_frsize should be set to zero? > > I initially was putting in the statfs function because directory sizes > are showing up as zero. I'm not sure why (or if it even matters)...I > thought perhaps f_files needed to be provided, but that didn't change > anything. > > But during my testing using -d, the statfs function was never accessed > anyways...is this normal? statfs() is called by 'df' or 'stat -f path'. f_bsize can be set to zero, which will result in 'df' not showing the filesystem. Not implementing the statfs() method has the same effect. Some programs check the free space in statfs(), and if it's zero or too small, then they refuse to write to the filesystem. That's why for example sshfs always displays a dummy value (1000G) for free space. > One other thing I've stumbled upon is that I'd like to be able to list > it in fstab and have it be able to be mounted by any user. But I always > end up with > > fuse: invalid argument `/home/jeff/fuse-test/mountpoint' > > I've tried giving the device in the fstab entry as things like /dev/zero > and such, and even actual zero-filled files, but nothing seem to work. > Tried it as a loopback device too, no luck. How does one go about this? The way to do it is: FSNAME[#src] mountpoint fuse options 0 0 Mount will search in the path for the program FSNAME and start that with the given arguments and options. Fuse-2.7 supports a nicer format as well: src mountpoint fuse.FSNAME options 0 0 But currently you also need to create a symlink for this to work: ln -s mount.fuse /sbin/mount.FSNAME Miklos |
From: Jeff M. <kd...@em...> - 2008-02-27 15:44:14
|
Miklos Szeredi wrote: > The way to do it is: > > FSNAME[#src] mountpoint fuse options 0 0 > > Mount will search in the path for the program FSNAME and start that > with the given arguments and options. > Sorry if I'm being naive here, but: myfs /home/jeff/fuse-test/mountpoint fuse defaults 0 0 Gives me: /bin/sh: /bin/myfs: Text file busy (/bin/myfs is a symlink to /home/jeff/fuse-test/myfs) There's no program that has myfs open, according to fuser, and the mountpoint is not already mounted. Thanks, Jeff |
From: Miklos S. <mi...@sz...> - 2008-02-27 15:33:37
|
> ln -s mount.fuse /sbin/mount.FSNAME That should be: ln -s mount.fuse /sbin/mount.fuse.FSNAME Miklos |