Chris Lu
5 years ago
2 changed files with 0 additions and 193 deletions
@ -1,84 +0,0 @@ |
|||||
Mount the SeaweedFS via FUSE |
|
||||
|
|
||||
# Mount by fstab |
|
||||
|
|
||||
|
|
||||
``` |
|
||||
$ # on linux |
|
||||
$ sudo apt-get install fuse |
|
||||
$ sudo echo 'user_allow_other' >> /etc/fuse.conf |
|
||||
$ sudo mv weedfuse /sbin/mount.weedfuse |
|
||||
|
|
||||
$ # on Mac |
|
||||
$ sudo mv weedfuse /sbin/mount_weedfuse |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
On both OS X and Linux, you can add one of the entries to your /etc/fstab file like the following: |
|
||||
|
|
||||
``` |
|
||||
# mount the whole SeaweedFS |
|
||||
localhost:8888/ /home/some/mount/folder weedfuse |
|
||||
|
|
||||
# mount the SeaweedFS sub folder |
|
||||
localhost:8888/sub/dir /home/some/mount/folder weedfuse |
|
||||
|
|
||||
# mount the SeaweedFS sub folder with some options |
|
||||
localhost:8888/sub/dir /home/some/mount/folder weedfuse user |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
To verify it can work, try this command |
|
||||
``` |
|
||||
$ sudo mount -av |
|
||||
|
|
||||
... |
|
||||
|
|
||||
/home/some/mount/folder : successfully mounted |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
If you see `successfully mounted`, try to access the mounted folder and verify everything works. |
|
||||
|
|
||||
|
|
||||
To debug, run these: |
|
||||
``` |
|
||||
|
|
||||
$ weedfuse -foreground localhost:8888/ /home/some/mount/folder |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
|
|
||||
To unmount the folder: |
|
||||
``` |
|
||||
|
|
||||
$ sudo umount /home/some/mount/folder |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
<!-- not working yet! |
|
||||
|
|
||||
# Mount by autofs |
|
||||
|
|
||||
AutoFS can mount a folder if accessed. |
|
||||
|
|
||||
``` |
|
||||
# install autofs |
|
||||
$ sudo apt-get install autofs |
|
||||
``` |
|
||||
|
|
||||
Here is an example on how to mount a folder for all users under `/home` directory. |
|
||||
Assuming there exists corresponding folders under `/home` on both local and SeaweedFS. |
|
||||
|
|
||||
Edit `/etc/auto.master` and `/etc/auto.weedfuse` file with these content |
|
||||
``` |
|
||||
$ cat /etc/auto.master |
|
||||
/home /etc/auto.weedfuse |
|
||||
|
|
||||
$ cat /etc/auto.weedfuse |
|
||||
# map /home/<user> to localhost:8888/home/<user> |
|
||||
* -fstype=weedfuse,rw,allow_other,foreground :localhost\:8888/home/& |
|
||||
|
|
||||
``` |
|
||||
|
|
||||
--> |
|
@ -1,109 +0,0 @@ |
|||||
package main |
|
||||
|
|
||||
import ( |
|
||||
"flag" |
|
||||
"fmt" |
|
||||
"os" |
|
||||
"strings" |
|
||||
|
|
||||
"github.com/chrislusf/seaweedfs/weed/command" |
|
||||
"github.com/chrislusf/seaweedfs/weed/glog" |
|
||||
"github.com/jacobsa/daemonize" |
|
||||
"github.com/kardianos/osext" |
|
||||
) |
|
||||
|
|
||||
var ( |
|
||||
fuseCommand = flag.NewFlagSet("weedfuse", flag.ContinueOnError) |
|
||||
options = fuseCommand.String("o", "", "comma separated options rw,uid=xxx,gid=xxx") |
|
||||
isForeground = fuseCommand.Bool("foreground", false, "starts as a daemon") |
|
||||
) |
|
||||
|
|
||||
func main() { |
|
||||
|
|
||||
err := fuseCommand.Parse(os.Args[1:]) |
|
||||
if err != nil { |
|
||||
glog.Fatal(err) |
|
||||
} |
|
||||
fmt.Printf("options: %v\n", *options) |
|
||||
|
|
||||
// seems this value is always empty, need to parse it differently
|
|
||||
optionsString := *options |
|
||||
prev := "" |
|
||||
for i, arg := range os.Args { |
|
||||
fmt.Printf("args[%d]: %v\n", i, arg) |
|
||||
if prev == "-o" { |
|
||||
optionsString = arg |
|
||||
} |
|
||||
prev = arg |
|
||||
} |
|
||||
|
|
||||
device := fuseCommand.Arg(0) |
|
||||
mountPoint := fuseCommand.Arg(1) |
|
||||
|
|
||||
fmt.Printf("source: %v\n", device) |
|
||||
fmt.Printf("target: %v\n", mountPoint) |
|
||||
|
|
||||
nouser := true |
|
||||
for _, option := range strings.Split(optionsString, ",") { |
|
||||
fmt.Printf("option: %v\n", option) |
|
||||
switch option { |
|
||||
case "user": |
|
||||
nouser = false |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
maybeSetupPath() |
|
||||
|
|
||||
if !*isForeground { |
|
||||
startAsDaemon() |
|
||||
return |
|
||||
} |
|
||||
|
|
||||
parts := strings.SplitN(device, "/", 2) |
|
||||
filer, filerPath := parts[0], parts[1] |
|
||||
|
|
||||
command.RunMount( |
|
||||
filer, "/"+filerPath, mountPoint, "", "000", "", |
|
||||
4, !nouser, 0, 1000000) |
|
||||
|
|
||||
} |
|
||||
|
|
||||
func maybeSetupPath() { |
|
||||
// sudo mount -av may not include PATH in some linux, e.g., Ubuntu
|
|
||||
hasPathEnv := false |
|
||||
for _, e := range os.Environ() { |
|
||||
if strings.HasPrefix(e, "PATH=") { |
|
||||
hasPathEnv = true |
|
||||
} |
|
||||
fmt.Println(e) |
|
||||
} |
|
||||
if !hasPathEnv { |
|
||||
os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
func startAsDaemon() { |
|
||||
|
|
||||
// adapted from gcsfuse
|
|
||||
|
|
||||
// Find the executable.
|
|
||||
var path string |
|
||||
path, err := osext.Executable() |
|
||||
if err != nil { |
|
||||
glog.Fatalf("osext.Executable: %v", err) |
|
||||
} |
|
||||
|
|
||||
// Set up arguments. Be sure to use foreground mode.
|
|
||||
args := append([]string{"-foreground"}, os.Args[1:]...) |
|
||||
|
|
||||
// Pass along PATH so that the daemon can find fusermount on Linux.
|
|
||||
env := []string{ |
|
||||
fmt.Sprintf("PATH=%s", os.Getenv("PATH")), |
|
||||
} |
|
||||
|
|
||||
err = daemonize.Run(path, args, env, os.Stdout) |
|
||||
if err != nil { |
|
||||
glog.Fatalf("daemonize.Run: %v", err) |
|
||||
} |
|
||||
|
|
||||
} |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue