diff --git a/cmd/control/docker_init.go b/cmd/control/docker_init.go index 8c4fac86..502409f7 100644 --- a/cmd/control/docker_init.go +++ b/cmd/control/docker_init.go @@ -95,6 +95,11 @@ func dockerInitAction(c *cli.Context) error { } } + err = checkZfsBackingFS(cfg.Rancher.Docker.StorageDriver, cfg.Rancher.Docker.Graph) + if err != nil { + log.Fatal(err) + } + args := []string{ "bash", "-c", diff --git a/cmd/control/util.go b/cmd/control/util.go index 0df289a7..4f7730c9 100644 --- a/cmd/control/util.go +++ b/cmd/control/util.go @@ -3,11 +3,15 @@ package control import ( "bufio" "fmt" + "io/ioutil" "os" "strings" + "time" "github.com/rancher/os/config" "github.com/rancher/os/pkg/log" + + "github.com/pkg/errors" ) func yes(question string) bool { @@ -56,6 +60,25 @@ func symLinkEngineBinary(version string) []symlink { return baseSymlink } +func checkZfsBackingFS(driver, dir string) error { + if driver != "zfs" { + return nil + } + for i := 0; i < 4; i++ { + mountInfo, err := ioutil.ReadFile("/proc/self/mountinfo") + if err != nil { + continue + } + for _, mount := range strings.Split(string(mountInfo), "\n") { + if strings.Contains(mount, dir) && strings.Contains(mount, driver) { + return nil + } + } + time.Sleep(1 * time.Second) + } + return errors.Errorf("BackingFS: %s not match storage-driver: %s", dir, driver) +} + func checkGlobalCfg() bool { _, err := os.Stat("/proc/1/root/boot/global.cfg") if err == nil || os.IsExist(err) {