diff options
| author | Karel Zak <kzak@redhat.com> | 2019-09-30 12:25:17 +0200 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2019-09-30 12:25:17 +0200 |
| commit | 980a25f9c4b66165363909a83d14b7d7ee4de9d1 (patch) | |
| tree | 6c68bc04a0453b07b4a4964c6b2e560cabfed4cd /disk-utils/sfdisk.c | |
| parent | 52a1f767c0d6d400790deaaa93109090d6052fa6 (diff) | |
| download | util-linux-980a25f9c4b66165363909a83d14b7d7ee4de9d1.tar.gz | |
sfdisk: (move-data) improve MiB/s progress bar
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
| -rw-r--r-- | disk-utils/sfdisk.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index ca85033bd2..3bda79ceca 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -377,6 +377,7 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa uintmax_t src, dst; int errsv, progress = 0; struct timeval prev_time; + uint64_t bytes_per_sec = 0; assert(sf->movedata); @@ -534,24 +535,33 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa fprintf(f, "%05zu: %12ju %12ju\n", cc, src, dst); if (progress && i % 10 == 0) { - unsigned int elapsed; /* usec */ - unsigned int bytes; /* bytes per usec */ + unsigned int elapsed = 0; /* usec */ struct timeval cur_time; gettimeofday(&cur_time, NULL); - elapsed = (cur_time.tv_sec * 1000000 + cur_time.tv_usec) - - (prev_time.tv_sec * 1000000 + prev_time.tv_usec); + if (cur_time.tv_sec - prev_time.tv_sec > 1) { + elapsed = ((cur_time.tv_sec - prev_time.tv_sec) * 1000000) + + (cur_time.tv_usec - prev_time.tv_usec); - bytes = ((i - prev) * ss) / elapsed; - fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%, %.1f MiB/s)."), + bytes_per_sec = ((i - prev) * ss) / elapsed; /* per usec */ + bytes_per_sec *= 1000000; /* per sec */ + + prev_time = cur_time; + prev = i; + } + + if (bytes_per_sec) + fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%, %.1f MiB/s)."), i + 1, nsectors, 100.0 / ((double) nsectors/(i+1)), - (double) (bytes * 1000000) / (1024 * 1024)); + (double) (bytes_per_sec / (1024 * 1024))); + else + fprintf(stdout, _("Moved %ju from %ju sectors (%.3f%%)."), + i + 1, nsectors, + 100.0 / ((double) nsectors/(i+1))); fflush(stdout); fputc('\r', stdout); - prev_time = cur_time; - prev = i; } if (!backward) |
