juicedata/juicefs · warning

1. ALL objects in the data storage: %s

Error message

1. ALL objects in the data storage: %s

What it means

First item of the 'juicefs destroy' destruction summary: it warns that ALL objects under the volume's data storage prefix (blob URL) will be deleted. This includes every file chunk, slice reference, and internal object written by the client.

Source

Thrown at cmd/destroy.go:154

			logger.Fatalf("list sessions: %s", err)
		}
		if num := len(sessions); num > 0 {
			ss := make([][3]string, num)
			for i, s := range sessions {
				ss[i] = [3]string{strconv.FormatUint(s.Sid, 10), s.HostName, s.MountPoint}
			}
			logger.Fatalf("%d sessions are active, please disconnect them first:\n%s", num, printSessions(ss))
		}
		var totalSpace, availSpace, iused, iavail uint64
		_ = m.StatFS(meta.Background(), meta.RootInode, &totalSpace, &availSpace, &iused, &iavail)

		fmt.Printf(" volume name: %s\n", format.Name)
		fmt.Printf(" volume UUID: %s\n", format.UUID)
		fmt.Printf("data storage: %s\n", blob)
		fmt.Printf("  used bytes: %d\n", totalSpace-availSpace)
		fmt.Printf(" used inodes: %d\n", iused)
		warn("The target volume will be permanently destroyed, including:")
		warn("1. ALL objects in the data storage: %s", blob)
		warn("2. ALL entries in the metadata engine: %s", utils.RemovePassword(uri))
		if !ctx.Bool("yes") && !userConfirmed() {
			logger.Fatalln("Aborted.")
		}
	}

	objs, err := object.ListAll(ctx.Context, blob, "", "", true, false)
	if err != nil && strings.Contains(err.Error(), "NoSuchBucket") {
		if !ctx.Bool("force") {
			logger.Fatalf("data storage %s does not exist (error: %v); retry with \"--force\" to skip object deletion", blob, err)
		}
		logger.Warnf("data storage %s does not exist (error: %v); will skip object deletion", blob, err)
	} else {
		if err != nil {
			logger.Fatalf("list all objects: %s", err)
		}
		progress := utils.NewProgress(false)
		spin := progress.AddCountSpinner("Deleted objects")

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Check the printed blob URL matches the intended bucket/prefix before confirming
  2. If other volumes share the bucket, verify prefix isolation is correct
  3. Cancel (answer no) and re-verify with 'juicefs status' if the storage URL looks wrong

Example fix

// before (destroying without checking blob)
juicefs destroy $META $UUID --yes
// after (inspect storage first)
juicefs status $META | grep -i storage && juicefs destroy $META $UUID
Defensive patterns

Strategy: validation

Validate before calling

st, _ := juicefsStatus(metaURI)
if st.Storage != expectedBlobURL { abort() } // verify storage target matches

Try / catch

if strings.Contains(out, "ALL objects in the data storage") && !verifiedBlob { cancel() }

Prevention

When it happens

Trigger: The confirmation output of 'juicefs destroy META UUID' listing the object storage bucket/prefix that will be wiped.

Common situations: Shared buckets holding multiple volumes — a careless destroy deletes objects of the destroyed volume only, but operators must confirm the listed blob path is the intended one (especially with shared buckets and prefixes).

Related errors


AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06). Data as JSON: /api/errors/f9ab95a0c4131e80. Report an issue: GitHub.