vfs: add --vfs-disk-space-total-size option to manually set the total disk space

Now you can specify --vfs-disk-space-total-size to set the total disk
space (default to -1)

fixes #3270
This commit is contained in:
Claudio Maradonna 2022-07-05 18:29:14 +02:00 committed by Nick Craig-Wood
parent 2e54b56a01
commit 62bcc84f6f
4 changed files with 63 additions and 47 deletions

View File

@ -307,6 +307,13 @@ If the flag is not provided on the command line, then its default value depends
on the operating system where rclone runs: "true" on Windows and macOS, "false"
otherwise. If the flag is provided without a value, then it is "true".
### VFS Disk Options
This flag allows you to manually set the statistics about the filing system.
It can be useful when those statistics cannot be read correctly automatically.
--vfs-disk-space-total-size Manually set the total disk space size (example: 256G, default: -1)
### Alternate report of used bytes
Some backends, most notably S3, do not report the amount of bytes used.

View File

@ -604,6 +604,7 @@ func (vfs *VFS) Statfs() (total, used, free int64) {
return
}
}
if u := vfs.usage; u != nil {
if u.Total != nil {
total = *u.Total
@ -615,6 +616,11 @@ func (vfs *VFS) Statfs() (total, used, free int64) {
used = *u.Used
}
}
if int64(vfs.Opt.DiskSpaceTotalSize) >= 0 {
total = int64(vfs.Opt.DiskSpaceTotalSize)
}
total, used, free = fillInMissingSizes(total, used, free, unknownFreeBytes)
return
}

View File

@ -34,6 +34,7 @@ type Options struct {
ReadAhead fs.SizeSuffix // bytes to read ahead in cache mode "full"
UsedIsSize bool // if true, use the `rclone size` algorithm for Used size
FastFingerprint bool // if set use fast fingerprints
DiskSpaceTotalSize fs.SizeSuffix
}
// DefaultOpt is the default values uses for Opt
@ -61,6 +62,7 @@ var DefaultOpt = Options{
WriteBack: 5 * time.Second,
ReadAhead: 0 * fs.Mebi,
UsedIsSize: false,
DiskSpaceTotalSize: -1,
}
// Init the options, making sure everything is withing range

View File

@ -39,5 +39,6 @@ func AddFlags(flagSet *pflag.FlagSet) {
flags.FVarP(flagSet, &Opt.ReadAhead, "vfs-read-ahead", "", "Extra read ahead over --buffer-size when using cache-mode full")
flags.BoolVarP(flagSet, &Opt.UsedIsSize, "vfs-used-is-size", "", Opt.UsedIsSize, "Use the `rclone size` algorithm for Used size")
flags.BoolVarP(flagSet, &Opt.FastFingerprint, "vfs-fast-fingerprint", "", Opt.FastFingerprint, "Use fast (less accurate) fingerprints for change detection")
flags.FVarP(flagSet, &Opt.DiskSpaceTotalSize, "vfs-disk-space-total-size", "", "Specify the total space of disk")
platformFlags(flagSet)
}