Skip to content
This repository was archived by the owner on Feb 8, 2023. It is now read-only.
This repository was archived by the owner on Feb 8, 2023. It is now read-only.

FUSE interface design #131

Open
Open
@Kubuxu

Description

@Kubuxu

As I am getting finally to split the fuse out of the main go-ipfs daemon here are my thoughts about the design and layout.

I think that using one mount instead of 2 (and possibly 3) is beneficial and that is why I propose following layout:

  • /mfs/ - mutable file system root
    • /mfs/ipfs/ - ipfs root
    • /mfs/ipns/ - ipns root
      • /mfs/ipns/local - symlink for local name which is mutable
    • /mfs/.pins/ - pined - only direct and roots of recursive - maybe symlinks that could be named (and act as labels - connected with Build-in notes for pins. kubo#2544) - top level is mutable but only allows symlinks to /mfs/ipfs/Qm...AAA or /ipfs/Qm...AAA
    • /mfs/.local/ - locally available blocks
    • /mfs/... - user files and everything else
  • /ipfs/ -> /mfs/ipfs/ - symlink
  • /ipns/ -> /mfs/ipns - symlink

Only problem I see is that we won't be able to handle cp command so it doesn't perform byte by byte copy. It would be possible if FUSE was allowing to implement reflink syscall and the default cp was compiled with --reflink=auto instead of --relink=never by default. So in short, the reflink way won't happen. If anyone has any ideas how we can implement zero cost cp command using FUSE, please share.

@whyrusleeping what do you think about general direction?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions