在 nautilus 中向 USB 磁盘传输中等大小的文件(~500-800 MB)或从 USB 磁盘传输文件时,或者使用 (s)cp(带有进度条)http://chris-lamb.co.uk/2008/01/24/can-you-get-cp-to-give-a-progress-bar-like-wget/),或者在使用 rsync 时... 报告的进度远非准确。显然,ubuntu 11.10 64 位中的默认文件系统缓存大小比 32 位大很多。因此,对于 nautilus 或 rsync 或任何正在执行复制的程序来说,文件似乎已被完全复制,而实际上文件的大部分内容仍未写入,但整个部分都已缓存,因此程序似乎已写入文件(即,因为从系统调用的角度来看,它已经写入)。但是,实际输出文件实际上需要 10-20 秒才能填满。有没有办法调整这些软件中的任何一个以报告“已将多少数据写入实际输出文件”而不是“已将多少数据写入操作系统”的进度。
我特别恼火的是,这些程序都报告文件已写入,但随后挂起一段时间,什么也没报告。我怀疑这是因为“写入”系统调用已完成,但“关闭文件”系统调用正在等待缓存刷新。
答案1
我也使用 ubuntu 11.10 64 位。您可以使用lsof
命令轮询并查看缓存是否已写入。此命令列出哪些进程/命令保持文件打开。我不确定它是否适用于 usb 棒缓存。
- 我测试了
rsync
~2gb的文件传输 - usb 棒:总线 002 设备 004:ID 8564:1000(Transcend Jetflash 8gb 可伸缩,一个 FAT32 分区)
mount
命令显示:/dev/sdd1 on /media/19D1-8868 type vfat (rw,nosuid,nodev,uid=1001,gid=1001,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
使用的命令:
rsync -Pr ./testfile /media/19D1-8868/test/
“-P”显示进度。
传输时 lsof:
$ lsof +f -- /media/19D1-8868/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 23132 testme cwd DIR 8,49 4096 33 /media/19D1-8868/test
rsync 23133 testme cwd DIR 8,49 4096 33 /media/19D1-8868/test
rsync 23133 testme 1u REG 8,49 666271744 350 /media/19D1-8868/test/.testfile.2Ejgei
完成后 lsof:
$ lsof +f -- /media/19D1-8868/
但是,我不能重现您所说的内容rsync
。我几乎可以立即(2-3 秒)使用“安全移除”选项移除 USB。
另外,当我尝试使用 进行传输时nautilus
,传输卡在“还剩 2 秒”的状态,直到它传输了整个文件(可能包括缓存),因为 USB LED 灯停止闪烁,我几乎可以立即再次安全地移除记忆棒。
mount
你的情况说明了什么?- 您是否尝试过从实时 CD 启动并在那里进行测试?
- 您是否尝试使用 gparted 完全格式化 USB 驱动器并创建一个新的 fat32 分区?