|
@@ -3,7 +3,6 @@
|
|
|
package overlay2 // import "github.com/docker/docker/daemon/graphdriver/overlay2"
|
|
|
|
|
|
import (
|
|
|
- "bufio"
|
|
|
"context"
|
|
|
"errors"
|
|
|
"fmt"
|
|
@@ -133,10 +132,6 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- if err := supportsOverlay(); err != nil {
|
|
|
- return nil, graphdriver.ErrNotSupported
|
|
|
- }
|
|
|
-
|
|
|
// require kernel 4.0.0 to ensure multiple lower dirs are supported
|
|
|
v, err := kernel.GetKernelVersion()
|
|
|
if err != nil {
|
|
@@ -152,6 +147,11 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
|
|
|
testdir = filepath.Dir(testdir)
|
|
|
}
|
|
|
|
|
|
+ if err := overlayutils.SupportsOverlay(testdir, true); err != nil {
|
|
|
+ logger.Error(err)
|
|
|
+ return nil, graphdriver.ErrNotSupported
|
|
|
+ }
|
|
|
+
|
|
|
fsMagic, err := graphdriver.GetFSMagic(testdir)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -176,16 +176,6 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if kernel.CompareKernelVersion(*v, kernel.VersionInfo{Kernel: 4, Major: 0, Minor: 0}) < 0 {
|
|
|
- if opts.overrideKernelCheck {
|
|
|
- logger.Warn("Using pre-4.0.0 kernel for overlay2, mount failures may require kernel update")
|
|
|
- } else {
|
|
|
- if err := overlayutils.SupportsMultipleLowerDir(testdir); err != nil {
|
|
|
- logger.Debugf("Multiple lower dirs not supported: %v", err)
|
|
|
- return nil, graphdriver.ErrNotSupported
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
supportsDType, err := fsutils.SupportsDType(testdir)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -274,33 +264,6 @@ func parseOptions(options []string) (*overlayOptions, error) {
|
|
|
return o, nil
|
|
|
}
|
|
|
|
|
|
-func supportsOverlay() error {
|
|
|
- // Access overlay filesystem so that Linux loads it (if possible).
|
|
|
- mountTarget, err := ioutil.TempDir("", "supportsOverlay2")
|
|
|
- if err != nil {
|
|
|
- logrus.WithError(err).WithField("storage-driver", "overlay2").Error("could not create temporary directory, so assuming that 'overlay' is not supported")
|
|
|
- return graphdriver.ErrNotSupported
|
|
|
- }
|
|
|
- /* The mounting will fail--after the module has been loaded.*/
|
|
|
- defer os.RemoveAll(mountTarget)
|
|
|
- unix.Mount("overlay", mountTarget, "overlay", 0, "")
|
|
|
-
|
|
|
- f, err := os.Open("/proc/filesystems")
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- defer f.Close()
|
|
|
-
|
|
|
- s := bufio.NewScanner(f)
|
|
|
- for s.Scan() {
|
|
|
- if s.Text() == "nodev\toverlay" {
|
|
|
- return nil
|
|
|
- }
|
|
|
- }
|
|
|
- logger.Error("'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.")
|
|
|
- return graphdriver.ErrNotSupported
|
|
|
-}
|
|
|
-
|
|
|
func useNaiveDiff(home string) bool {
|
|
|
useNaiveDiffLock.Do(func() {
|
|
|
if err := doesSupportNativeDiff(home); err != nil {
|