为啥天翼云盘要以 30 GB/hour 的速度往 C 盘写东西?(保存目录在 D 盘)

@Ta 2022-12-20 178点击

任务管理器界面

起因:任务管理器显示,天翼云盘以高于网络的速度,往硬盘写东西

tasker.webp(8.32 KB)

到性能页一看,C 盘正以 10 MB/s 左右的速度被写东西。然而,我的数据保存目录在 D 盘啊。。

tasker2.webp(25.6 KB)

资源监视器界面

打开资源监视器,发现天翼云盘在实时往 C 盘写数据库和 C:\$LogFile。。

perfmon.webp(44.82 KB)

增删文件很频繁

打开天翼云盘的数据目录,发现增删文件很频繁。。(下图是 GIF 动画)

explorer.gif(114.01 KB)

为啥这些下载软件,都这么吃(看起来没必要浪费的)资源呢?

回复列表(16|隐藏机器人聊天)
  • @Ta / 2022-12-20 / /

    @卷心菜,感觉 C:\$LogFile,或者 52 KB 的 xxx.db,都不是分段临时文件呀。。

  • @Ta / 2022-12-20 / /

    自动同步?
    小米MIX2s(白)

  • @Ta / 2022-12-20 / /

    @天蓝,没,只是下载别人分享的文件。

    为啥自动同步会写 C:\$LogFile 或 52 KB 的 xxx.db 呢?

  • @Ta / 2022-12-20 / /

    @无名啊,猜测的,之前听说同步盘会先把文件存在C盘的某个目录
    小米MIX2s(白)

  • @Ta / 2022-12-20 / /

    @天蓝,有些软件应该是这样(TEMP 目录?)

    但你看帖子第三张图(附在下面了),天翼云盘应该直接写入目标文件了D:\天翼云盘下载\xxx.rar.ecdl

    perfmon.webp(44.82 KB)

  • @Ta / 2022-12-20 / /

    @天蓝,另外,帖子第二张图(如下)显示,12 MB/s 的写入速度,固态盘 C:\ 繁忙程度就有近 50% 了

    我觉得应该是大量随机写入导致的。顺序写入的话,可以参考 D:\E:\ 普通硬盘,也是 7~8 MB/s 的速度,但占用小的很

    tasker2.webp(25.6 KB)

  • @Ta / 2022-12-21 / /

    @卷心菜@天蓝,感觉你们可能是对的,天翼云盘应该有分段下载

    下载一个 4 GB 的文件,天翼云盘可能干了啥?

    • 被分了 18W 份进行下载,且每一份都有一个单独的临时文件
    • 反反复复开事务写一个 52 KB 的数据库 66W
    • 读写配置文件 47W
    • 写目标文件 1500 次
    • 还有个 35W 次的,对程序目录的操作,我看不懂。。

    SandBoxie 来拦截文件操作,并分析日志

    我最近发现,新版的 SandBoxie-Plus 支持跟踪沙盘内程序的文件操作,也能导出日志(图附在文末)

    我拦截了天翼云盘对 C 盘的操作,花了 13 分钟下载了一个 4 GB 的文件,然后分析了日志。

    下载一个 4 GB 的文件,要操作约 170WC: 盘不相干的)文件?!

    下列 Shell 命令分析了操作次数最多的文件列表(只列出至少操作了 2 次的)

    $ awk -F$'\t' -v OFS=$'\t' '$5 ~ /^File/{arr[$7]++} END{for (k in arr) if (arr[k] > 1) print arr[k], k}' sandboxie.log | sort -rn
    666140  \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\transManNew_###########@189.cn.db-journal
    470862  \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\setting.xml
    353936  \Device\HarddiskVolume3\Program Files (x86)\ecloud
    1544    \Device\HarddiskVolume9\??????\????????\????????.part11.rar
    23      \Device\HarddiskVolume3\Program Files (x86)\ecloud\Config\ecloud\transfercfg.xml
    22      \Device\HarddiskVolume3\Program Files (x86)\ecloud\eCloud.exe
    18      \Device\HarddiskVolume3\WINDOWS\System32\drivers\etc\hosts
    11      \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\setting.xml.tmp
    11      \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud
    6       \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\LogFileTransfer_###########@189.cn.db-journal
    4       \Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\userinfo.xml
    2       \Device\HarddiskVolume9\??????\????????\????????.part11.rar.ecdl
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_ZNx3dAAodr46ERcahHyp
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_z84dXqNPNdgIWChWt1PM
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_Z2RJUJnPusih593Oxc9F
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_ylQaBzpTKmd9O7nXb447
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_XaAabe9g3PxVgRtbBPff
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_X2XEpRBBSfbNoRlXyCSa
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_VW5XBHbCfAMSHQboxLR0
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_uSrTPYjHvBhmRWHVahW7
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_OoWej1Tem5f3eyFM0xyO
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_l4KBl48XABfJGdxQLHQJ
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_hwMfgrAxJ1ifutFS7Zs7
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_gwQmbdE13cTjIEocCywc
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_fycm3JVGoHpIcdEheQjT
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_FFAoGqQPa3edwBPR7Aoq
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_FeRyO8ovcavG2oT4xNoB
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_e6hlUdnjH9pECYPs60um
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_dEAgSch6p3LebI8qNb4z
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_CaGkTSpdXxTc9IGUmn5W
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_bzsMzCbnGelcuBGfSdZ4
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_a4mcJBcNVIdv4QIAHp0Z
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_8Md9F6uef9YdfbLvtPR6
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_80hINpkIcbPTFAqMKBqc
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_3TdEJaFs7Beu13hhHD3q
    2       \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_1ZeoSTTO9YqtVTjmAAWg
    

    临时目录里,约有 18W 个诸如 \Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_xxx 这样的临时文件:

    $ awk -F$'\t' '$5 ~ /^File/' sandboxie.log | grep -F '\Device\HarddiskVolume3\Users\wuxun\AppData\Local\Temp\etilqs_' | wc -l
    176974
    

    附图

    SandBoxie-Plus 跟踪日志图:

    sandboxie.webp(23.53 KB)

  • @Ta / 2022-12-21 / /

    @无名啊$LogFile不是真实的文件,它是NTFS意外断电恢复日志。读写它的操作由NTFS驱动程序自动完成,应用程序无法控制。在对文件系统进行结构更改(创建文件、删除文件、文件大小变更)时,会伴随$LogFile的读写。只改变文件的内容不改变大小通常不需要读写它。
    https://www.dgxue.com/huifu/203.html

    至于.db-journal,它是写入SQLite数据库(.db文件)时产生的回滚日志,也用于意外断电的数据恢复。它由SQLite数据库引擎自动产生,应用程序可以把它设为不自动删除,这样会减少重新创建文件的开销(对$LogFile的读写也会减少)。
    https://blog.csdn.net/mozart_cai/article/details/26815339

    总的来说,应用程序只是在读写自己的SQLite数据库,但是因为该数据库默认每次写入都自动创建删除.db-journal文件,所以在NTFS的$LogFile日志上产生了意料之外的写入开销。这可以认为是日志文件系统的写入放大效应。

  • @Ta / 2022-12-21 / /

    @无名啊,顺便一提,由于你的内存紧缺(80%),所以这张图里的12MB/s也有一部分可能是在读写页面文件(C:\pagefile.sys)。

    20221221122940-1671596980854-link.img.jpg(25.6 KB)

  • @Ta / 2022-12-21 / /

    @老虎会游泳

    1. $LogFile 是类似 MySQLredo logSQLiteWAL 吗?顺序写入的?

    那 C 盘 40% 占用的主要原因,应该不是 $LogFile,而是其他的随机写入导致的

    1. 老虎看下 8 楼,天翼云盘还在 13 分钟内操作了 18W 个临时文件呢。。还频繁读写 47W 次设置文件?(不知我对 SandBoxie 日志的理解是否正确)
  • @Ta / 2022-12-21 / /

    @无名啊

    1. $LogFile的设计目的是redo log,至于它的具体实现细节,我没有资料。
    2. 哦,这也会造成频繁读写$LogFile
  • @Ta / 2022-12-21 / /

    @老虎会游泳,我把这 13 分钟内,沙箱的日志整理了下(只留下对文件的操作,省略注册表等。抹掉了账号信息)

    老虎若是愿意瞅瞅,可以下载:sandboxie.log.xz(4.89 MB)(解压完 200 MB 左右)

    预览:

    07:58:12.051	eCloud.exe	14012	16280	File (U)	Open (2) 	\Device\HarddiskVolume9\??????\????????\????????.part11.rar.ecdl	
    07:58:12.051	eCloud.exe	14012	16280	File (U)	(2) 	\Device\HarddiskVolume3\Program Files (x86)\ecloud\Config\ecloud\transfercfg.xml	
    07:58:12.051	eCloud.exe	14012	16280	File (U)	(2) 	\Device\HarddiskVolume3\Program Files (x86)\ecloud\eCloud.exe	
    07:58:12.051	eCloud.exe	14012	16280	File (U)	(2) 	\Device\HarddiskVolume3\Program Files (x86)\ecloud\Config\ecloud\transfercfg.xml	
    07:58:12.066	eCloud.exe	14012	16280	File (U)		\Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud	
    07:58:12.066	eCloud.exe	14012	16280	File (U)		\Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\setting.xml.tmp	
    07:58:12.066	eCloud.exe	14012	16280	File (U)		\Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\setting.xml	
    07:58:12.129	eCloud.exe	14012	16280	File (U)	(2) 	\Device\HarddiskVolume3\Program Files (x86)\ecloud\Config\ecloud\transfercfg.xml	
    07:58:12.129	eCloud.exe	14012	16280	File (U)	(2) 	\Device\HarddiskVolume3\Users\wuxun\AppData\Roaming\ecloud\setting.xml	
    07:58:12.129	eCloud.exe	14012	16280	File (U)		\Device\HarddiskVolume3\WINDOWS\System32\drivers\etc\hosts	
    
  • @Ta / 04-20 10:48 / /

    @无名啊,现在天翼云盘 还会这样吗?我打算开始用了

  • @Ta / 04-20 11:59 / /

    @胡椒舰长,不知道,我对他们改了不抱希望,毕竟对他们有害无利(损伤的又不是他们的硬盘,投入几天程序员工资改了,又不会多挣钱)。。

    如果你对此感到担忧的话,推荐你花几分钟:

    1. 开个内存盘(如 Z: 盘)
    2. Sandboxie 重定向保存目录设为 Z:
    3. Sandboxie 设置允许对 D: 盘的写入(或你设置的其他保存路径)
    4. Sandboxie 内运行天翼云盘,让沙箱来将云盘对 C: 盘的写入,重定向到内存盘里,但又放开对 D: 盘的写入
  • @Ta / 04-20 12:01 / /

    @无名啊,这样的话,是不是用alist挂载效果好点

  • @Ta / 04-20 12:52 / /

    @胡椒舰长,也没咋用过诶。。但第三方实现应该都不差吧,没有项目压力,可以精雕细琢。。

添加新回复
回复需要登录