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" 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". 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 ### Alternate report of used bytes
Some backends, most notably S3, do not report the amount of bytes used. 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 return
} }
} }
if u := vfs.usage; u != nil { if u := vfs.usage; u != nil {
if u.Total != nil { if u.Total != nil {
total = *u.Total total = *u.Total
@ -615,6 +616,11 @@ func (vfs *VFS) Statfs() (total, used, free int64) {
used = *u.Used used = *u.Used
} }
} }
if int64(vfs.Opt.DiskSpaceTotalSize) >= 0 {
total = int64(vfs.Opt.DiskSpaceTotalSize)
}
total, used, free = fillInMissingSizes(total, used, free, unknownFreeBytes) total, used, free = fillInMissingSizes(total, used, free, unknownFreeBytes)
return return
} }

View File

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