Healing process should not heal root disk (#7089)

This commit is contained in:
Krishna Srinivas
2019-01-23 15:29:29 -08:00
committed by kannappanr
parent e8c18bc145
commit 82af0be1aa
4 changed files with 66 additions and 8 deletions

View File

@@ -303,9 +303,10 @@ func (s *posix) IsOnline() bool {
// DiskInfo is an extended type which returns current
// disk usage per path.
type DiskInfo struct {
Total uint64
Free uint64
Used uint64
Total uint64
Free uint64
Used uint64
RootDisk bool
}
// DiskInfo provides current information about disk space usage,
@@ -319,12 +320,17 @@ func (s *posix) DiskInfo() (info DiskInfo, err error) {
if !s.diskMount {
used = atomic.LoadUint64(&s.totalUsed)
}
return DiskInfo{
Total: di.Total,
Free: di.Free,
Used: used,
}, nil
rootDisk, err := disk.IsRootDisk(s.diskPath)
if err != nil {
return info, err
}
return DiskInfo{
Total: di.Total,
Free: di.Free,
Used: used,
RootDisk: rootDisk,
}, nil
}
// getVolDir - will convert incoming volume names to

View File

@@ -1029,6 +1029,18 @@ func (s *xlSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.HealRe
}
}(storageDisks)
for i, disk := range storageDisks {
info, err := disk.DiskInfo()
if err != nil {
storageDisks[i] = nil
}
if info.RootDisk {
// We should not heal on root disk. i.e in a situation where the minio-administrator has unmounted a
// defective drive we should not heal a path on the root disk.
storageDisks[i] = nil
}
}
formats, sErrs := loadFormatXLAll(storageDisks)
if err = checkFormatXLValues(formats); err != nil {
return madmin.HealResultItem{}, err