code: func (daemon *Daemon) SystemDiskUsage(ctx context.Context) (*types.DiskUsage, error) {
  	if !atomic.CompareAndSwapInt32(&daemon.diskUsageRunning, 0, 1) {
  		return nil, fmt.Errorf("a disk usage operation is already running")
  	}
  	defer atomic.StoreInt32(&daemon.diskUsageRunning, 0)
  
  	// Retrieve container list
  	allContainers, err := daemon.Containers(&types.ContainerListOptions{
  		Size: true,
  		All:  true,
  	})
  	if err != nil {
  		return nil, fmt.Errorf("failed to retrieve container list: %v", err)
  	}
  
  	// Get all top images with extra attributes
  	allImages, err := daemon.imageService.Images(filters.NewArgs(), false, true)
  	if err != nil {
  		return nil, fmt.Errorf("failed to retrieve image list: %v", err)
  	}
  
  	localVolumes, err := daemon.volumes.LocalVolumesSize(ctx)
  	if err != nil {
  		return nil, err
  	}
  
  	allLayersSize, err := daemon.imageService.LayerDiskUsage(ctx)
  	if err != nil {
  		return nil, err
  	}
  
  	return &types.DiskUsage{
  		LayersSize: allLayersSize,
  		Containers: allContainers,
  		Volumes:    localVolumes,
  		Images:     allImages,
  	}, nil
  }
docs: // SystemDiskUsage returns information about the daemon data disk usage