diff --git a/cmd/erasure-sets.go b/cmd/erasure-sets.go index c1bcb327c..3aa70fc7f 100644 --- a/cmd/erasure-sets.go +++ b/cmd/erasure-sets.go @@ -1213,12 +1213,7 @@ func markRootDisksAsDown(storageDisks []StorageAPI, errs []error) { // HealFormat - heals missing `format.json` on fresh unformatted disks. func (s *erasureSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.HealResultItem, err error) { - storageDisks, errs := initStorageDisksWithErrorsWithoutHealthCheck(s.endpoints) - for i, derr := range errs { - if derr != nil && derr != errDiskNotFound { - return madmin.HealResultItem{}, fmt.Errorf("Disk %s: %w", s.endpoints[i], derr) - } - } + storageDisks, _ := initStorageDisksWithErrorsWithoutHealthCheck(s.endpoints) defer func(storageDisks []StorageAPI) { if err != nil { @@ -1279,8 +1274,14 @@ func (s *erasureSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.H } // Save new formats `format.json` on unformatted disks. - if err = saveUnformattedFormat(ctx, storageDisks, tmpNewFormats); err != nil { - return madmin.HealResultItem{}, err + for index, format := range tmpNewFormats { + if storageDisks[index] == nil || format == nil { + continue + } + if err := saveFormatErasure(storageDisks[index], format, true); err != nil { + logger.LogIf(ctx, fmt.Errorf("Disk %s failed to write updated 'format.json': %v", storageDisks[index], err)) + tmpNewFormats[index] = nil // this disk failed to write new format + } } s.erasureDisksMu.Lock() diff --git a/cmd/format-erasure.go b/cmd/format-erasure.go index 795ff1d8c..81b9eaee2 100644 --- a/cmd/format-erasure.go +++ b/cmd/format-erasure.go @@ -698,22 +698,6 @@ func initErasureMetaVolumesInLocalDisks(storageDisks []StorageAPI, formats []*fo return nil } -// saveUnformattedFormat - populates `format.json` on unformatted disks. -// also adds `.healing.bin` on the disks which are being actively healed. -func saveUnformattedFormat(ctx context.Context, storageDisks []StorageAPI, formats []*formatErasureV3) error { - for index, format := range formats { - if format == nil { - continue - } - if storageDisks[index] != nil { - if err := saveFormatErasure(storageDisks[index], format, true); err != nil { - return err - } - } - } - return nil -} - // saveFormatErasureAll - populates `format.json` on disks in its order. func saveFormatErasureAll(ctx context.Context, storageDisks []StorageAPI, formats []*formatErasureV3) error { g := errgroup.WithNErrs(len(storageDisks))