如何才能准确看到将文件写入外部介质需要多长时间?

如何才能准确看到将文件写入外部介质需要多长时间?

我一直在尝试测试读取和写入 3.5 英寸软盘上 FAT 文件系统的整个可用空间需要多长时间。读取不是什么大问题。只要在测试之前没有读取过文件,我就可以简单地运行time cp /media/user/disk/file .。但是,写入却比较麻烦。

如果我使用cpas 进行读取,我得到的结果接近于零。命令完成,驱动器在接下来的 45 秒左右继续写入。我还尝试使用dd if=/dev/urandom of=/media/user/disk/file bs=1457664 count=1动态生成随机数据以放入磁盘,但结果相同。我尝试的最终解决方案是pv file > /media/user/disk/file,同样得到相同的结果,只是呈现方式不同。至少我发现声称的 192MiB/s 写入速度很有趣。

我怀疑这不会带来太大的不同,但我正在运行 Ubuntu 18.04 x64 MATE。该驱动器使用 USB 供电和传输数据。

答案1

Linux 广泛使用缓冲内存来读取/写入文件。因此,对驱动器的写入可能看起来更早完成,而实际上,Linux 继续将数据提交到驱动器。要将缓冲区刷新到磁盘,可以使用“sync”命令。因此,诸如此类的命令time sh -c "cp /media/user/disk/file .. && sync"可以更好地了解将副本完全写入驱动器所需的实际时间。

需要带有“sh”的构造,因为命令时间仅支持单个命令作为其参数。

答案2

您可以使用 来time测量命令本身写入所用的时间cp,然后用于sync刷新缓冲区,并在这些之外测量总时间。请参阅以下示例。

写入通过 SATA 连接的硬盘驱动器:

$ time bash -c 'time cp ubuntu-18.04-desktop-amd64.iso /media/multimed-2/ttt && time sync;echo -e "\n----------\ntotal time"'

real    0m23,207s
user    0m0,009s
sys 0m3,908s

real    0m1,328s
user    0m0,000s
sys 0m0,006s

----------
total time

real    0m24,538s
user    0m0,012s
sys 0m3,914s

写入 USB 3 闪存盘:

$ sudo time bash -c 'time -p cp ubuntu-18.04-desktop-amd64.iso /mnt/sd1/usbdata/ttt && time sync;echo -e "\n----------\ntotal time"'
[sudo] password for sudodus: 

real    0m55,390s
user    0m0,029s
sys 0m5,279s

real    0m17,595s
user    0m0,000s
sys 0m0,003s

----------
total time
real 72.98
user 0.03
sys 5.28

请注意,写入 pendrive 时,刷新缓冲区所需的时间要多得多,但复制命令所需的时间也会增加。

bc可以从文件大小和总时间计算出复制速度。

$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
scale=2
1921843200/24.538/10^6
78.32
1921843200/72.98/10^6
26.33
quit
$ 

相关内容