mirror of
https://github.com/minio/minio.git
synced 2024-12-26 07:05:55 -05:00
18ec933085
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)
40 lines
1018 B
Go
40 lines
1018 B
Go
// +build !windows
|
|
|
|
/*
|
|
* MinIO Cloud Storage, (C) 2021 MinIO, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package disk
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
// SameDisk reports whether di1 and di2 describe the same disk.
|
|
func SameDisk(disk1, disk2 string) (bool, error) {
|
|
st1 := syscall.Stat_t{}
|
|
st2 := syscall.Stat_t{}
|
|
|
|
if err := syscall.Stat(disk1, &st1); err != nil {
|
|
return false, err
|
|
}
|
|
|
|
if err := syscall.Stat(disk2, &st2); err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return st1.Dev == st2.Dev, nil
|
|
}
|