Example #1
0
        public ProcMount(DriveType driveType, string name, string mount, string type, MountOptions mountOptions)
        {
            DriveType     = driveType;
            Name          = name;
            RootDirectory = mount;
            DriveFormat   = type;
            MountOptions  = mountOptions;

            _unixDriveInfo = new UnixDriveInfo(mount);
        }
Example #2
0
        private static int Mount(IServiceProvider provider, MountOptions options, CancellationToken token)
        {
            provider.GetRequiredService <WorkshopMounter>()
            .Mount(token)
            .GetAwaiter()
            .GetResult();

            ConsoleHelpers.WaitBeforeExiting(TimeSpan.FromSeconds(5), PrimaryCancellationSource.Token)
            .GetAwaiter()
            .GetResult();

            return(0);
        }
Example #3
0
 public void Start(VFSProvider data, MountOptions opts)
 {
     this.data = data;
     base.MountPoint = opts.MountPoint;
     logger.Debug ("Unmounting previous...");
     Process p = new Process {
         StartInfo = new ProcessStartInfo {
             FileName = "fusermount",
             Arguments = "-u " + base.MountPoint
         }
     };
     p.Start ();
     p.WaitForExit ();
     logger.Debug ("Done. Mounting...");
     base.Start ();
 }
Example #4
0
        static async Task Main(string[] args)
        {
            if (args.Length < 2)
            {
                throw new Exception($"Usage: NeoFS narpv|neovirt mountpoint <fuse-args>");
            }

            var fileType   = args[0].ToLowerInvariant();
            var mountPoint = args[1];

            args = args.Skip(2).ToArray();

            var conn       = Environment.GetEnvironmentVariable("MONGO_URI");
            var Connection = new MongoClient(conn);

            var NeoDb = Connection.GetDatabase("NeoAlexandria");

            var narps = NeoDb.NARPs();

            if (!Fuse.CheckDependencies())
            {
                Console.WriteLine(Fuse.InstallationInstructions);
                return;
            }

            // Test to see if we can new a FuseFileInfo

            IFuseFileSystem fileSystem;

            switch (fileType)
            {
            case "neofs":

                var provisioner = new ProvisionFilesystem();
                fileSystem = provisioner.CreateFs(NeoDb, narps);

                break;

            case "neovirt":
                fileSystem = new NeoVirtFS.NeoVirtFS(NeoDb);
                break;

            default:
                throw new Exception($"Unknown filesystem: {fileType}");
            }

            System.Console.WriteLine($"Mounting filesystem at {mountPoint}");

            Fuse.LazyUnmount(mountPoint);

            // Ensure mount point directory exists
            Directory.CreateDirectory(mountPoint);

            try
            {
                var mo = new MountOptions
                {
                    SingleThread = false
                };

                // Debug = "-d"
                using (var mount = Fuse.Mount(mountPoint, fileSystem, mo, Arguments: new string[] { "-o", "allow_other" }))
                {
                    await mount.WaitForUnmountAsync();
                }
            }
            catch (FuseException fe)
            {
                Console.WriteLine($"Fuse throw an exception: {fe}");

                Console.WriteLine("Try unmounting the file system by executing:");
                Console.WriteLine($"fuser -kM {mountPoint}");
                Console.WriteLine($"sudo umount -f {mountPoint}");
            }
        }
Example #5
0
 public DriveInfoMount(DriveInfo driveInfo, DriveType driveType = DriveType.Unknown, MountOptions mountOptions = null)
 {
     _driveInfo   = driveInfo;
     _driveType   = driveType;
     MountOptions = mountOptions;
 }
Example #6
0
 public void Start(VFSProvider data, MountOptions opts)
 {
     this.data = data;
     DokanOptions dokanOpts = new DokanOptions () {
         DebugMode = true,
         UseStdErr = true,
         MountPoint = opts.MountPoint,
         VolumeLabel = opts.VolumeLabel,
         FileSystemName = opts.FileSystemName
     };
     int status = DokanNet.DokanMain (dokanOpts, this);
     switch (status) {
     case DokanNet.DOKAN_SUCCESS:
         logger.Debug ("Clean shutdown");
         break;
     case DokanNet.DOKAN_DRIVE_LETTER_ERROR:
         logger.Fatal ("Drive letter error");
         break;
     case DokanNet.DOKAN_DRIVER_INSTALL_ERROR:
         logger.Fatal ("Driver install error");
         break;
     case DokanNet.DOKAN_MOUNT_ERROR:
         logger.Fatal ("Mount error");
         break;
     case DokanNet.DOKAN_START_ERROR:
         logger.Fatal ("Start error");
         break;
     case DokanNet.DOKAN_ERROR:
         logger.Fatal ("Unknown error");
         break;
     default:
         logger.Fatal ("Unknown status: %d", status);
         break;
     }
 }