我一直在尝试测试读取和写入 3.5 英寸软盘上 FAT 文件系统的整个可用空间需要多长时间。读取不是什么大问题。只要在测试之前没有读取过文件,我就可以简单地运行time cp /media/user/disk/file .
。但是,写入却比较麻烦。
如果我使用cp
as 进行读取,我得到的结果接近于零。命令完成,驱动器在接下来的 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
$