使 nautilus/cp/scp/rsync “进度”缓存感知

使 nautilus/cp/scp/rsync “进度”缓存感知

在 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 灯停止闪烁,我几乎可以立即再次安全地移除记忆棒。

  1. mount你的情况说明了什么?
  2. 您是否尝试过从实时 CD 启动并在那里进行测试?
  3. 您是否尝试使用 gparted 完全格式化 USB 驱动器并创建一个新的 fat32 分区?

相关内容