mirror of
https://github.com/minio/minio.git
synced 2025-11-06 20:33:07 -05:00
fix: for containers use root-disk detection cleverly (#11593)
root-disk implemented currently had issues where root disk partitions getting modified might race and provide incorrect results, to avoid this lets rely again back on DeviceID and match it instead. In-case of containers `/data` is one such extra entity that needs to be verified for root disk, due to how 'overlay' filesystem works and the 'overlay' presents a completely different 'device' id - using `/data` as another entity for fallback helps because our containers describe 'VOLUME' parameter that allows containers to automatically have a virtual `/data` that points to the container root path this can either be at `/` or `/var/lib/` (on different partition)
This commit is contained in:
@@ -217,9 +217,35 @@ func newXLStorage(ep Endpoint) (*xlStorage, error) {
|
||||
if env.Get("MINIO_CI_CD", "") != "" {
|
||||
rootDisk = true
|
||||
} else {
|
||||
rootDisk, err = disk.IsRootDisk(path, "/")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if IsDocker() || IsKubernetes() {
|
||||
// Start with overlay "/" to check if
|
||||
// possible the path has device id as
|
||||
// "overlay" that would mean the path
|
||||
// is emphemeral and we should treat it
|
||||
// as root disk from the baremetal
|
||||
// terminology.
|
||||
rootDisk, err = disk.IsRootDisk(path, "/")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !rootDisk {
|
||||
// No root disk was found, its possible that
|
||||
// path is referenced at "/data" which has
|
||||
// different device ID that points to the original
|
||||
// "/" on the host system, fall back to that instead
|
||||
// to verify of the device id is same.
|
||||
rootDisk, err = disk.IsRootDisk(path, "/data")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// On baremetal setups its always "/" is the root disk.
|
||||
rootDisk, err = disk.IsRootDisk(path, "/")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user