dudiskbitte.22.08.17

群里有人发了一个sex syndrome里某个叫做近卫的小乳房萌妹的全集度盘链接🤔

一般来说我不会用我的度盘解析脚本处理这种玩意的,因为我去年刚做这个脚本的时候,就知道它没法用来解析unicode文件名,尤其是这个链接里还全都是各种申必日文字符时🤔但如果是近卫的话,那我倒是想试一试(迫真🤔

果然,它根本解析不出任何东西🤔所以我今天干脆改进下这个脚本得了(半恼🤔

bugfix

首先我需要解决它返回的json里全都是\uXXXX这种玩意的问题🤔这个还算比较好办的,比如先用一个变量保存下度盘api返回的结果,然后用echo -en取代echo来将其塞进解析各种参数的管道里,这样它应该就能还原文件名了(确信🤔

接下来这个脚本还有问题,对一个文件名里充满[]的文件,它可能读到]就不再解析后面的文件了🤔在我的114514次调试之后,我发现是grep的问题,最后设置了一个贪婪匹配,这次所有文件都被解析了出来🤔

但至少我最怕的递归解析部分是完全正常的,我以前用pascal编程的时候,那狗逼玩意只要一递归就出问题,搞得我现在每次写递归都担心它能否按预期运行(恼🤔

现在文件数目是对的,但文件名很多都没有解析出来(恼🤔我接着排查,发现是我写的上古grep语句的问题🤔一年前我大概喜欢用grep -Po的方式来检索json里的某个键值,但现在我完全不用这种低级方法,我现在都是先将逗号便乘回车让每一个键值便乘一行,然后直接用一个不加任何参数的fixed grep(当然不fixed也行,反正我也没写什么正则表达式)来筛选出含有某个键的行🤔

这种方法可以筛选出值里有任何奇怪字符的行,而老办法遇到奇怪字符可能就搞不出任何结果了🤔本质上来说,老办法用到了正则表达式,所以有正则表达式法的各种缺陷,比如在此处它就有可能直接被某个申必字符橄榄🤔而我现在搞的这一套,本质上来说利用了源字符串中的数据结构信息(比如无论json树的结构如何,所有键值对之间一定会用一个逗号分隔),所以能够在不用任何艹蛋正则表达式的情况下完成解析(确信🤔

接下来还有一个问题,这个脚本解析出来的文件路径前面还包括一坨什么parent_dir,我应该返回的路径是这个路径减去parent_dir,但我发现脚本里删除这个子串的操作并没有成功🤔其实是因为parent_dir和json别的地方不同,它居然用了url encode而非json encode来表示/,难怪我替换不出来🤔我自从用echo -en处理json encode之后,我基本上把所有的url decode全部删了,看来至少在这个变量处我得加回来(🤔

另外该填进aria2c的--dir参数里的文件夹路径,我发现也没有配置对,它貌似并不能删除后面的文件名,非常有可能是因为文件名里面有什么奇奇怪怪的字符(确信🤔那么,我干脆将它最后一个斜杠和后面的所有内容删掉得了🤔哪怕在最极端的情况,也就是分享的不是文件夹而是一堆文件时,它应该也会剩下一个./塞进--dir(确信🤔

至此,这个脚本已经改进完了,我也拿它解析出了所有近卫的片子链接,而且保留了所有目录结构🤔现在,我只需将其上传到我的vps,bash它,很快度盘里面这个文件夹是什么样,我本地也会是什么样了(确信🤔

extras

除此之外,我还给这个脚本加了一点点功能,比如现在它第三个参数是options🤔当然我并没有写什么正经参数处理,现在这部分options里只要包括连续的关键词单词就可生效,比如包括一个dryrun就可以实现不解析文件链接,而是用一个占位符来表示文件链接,生成的脚本仍然可以下载,但下下来的东西只能体现目录结构🤔discord drive相关部分也被我整成了一个option,只要包括discorddrive,它生成的脚本就不再尝试恢复目录结构,而是将文件统一放在temp目录里面,而将路径便乘文件名,斜杠被点替代🤔至少dudisk2discord脚本里面就是每次下载后都将temp目录里的所有东西都上传到discord drive一遍并删除它们🤔

more problems

现在它用来处理单文件分享链接可能会有点问题,parent_dir会便乘一个叫做.zip或者诸如此类的玩意,导致最后生成的脚本里,--dir会便乘..zip这样的极其令人迷惑的东西(恼🤔

可能它需要特别的处理,比如当检测出它是这坨寄吧时,直接强行便乘./🤔但我现在懒得测试了,因为我还在impact cuties,我感觉这次活动搞不好打不完了(全恼🤔

gpupv.22.08.16

今天我突然看到极客湾也开始玩什么四人一机了🤔我对gpu虚拟化技术向来有比较高的兴趣,所以我看了下,他那个视频用到的应该是hyper-v的gpu虚拟化🤔

那玩意我以前应该介绍过,用起来相当灵活,没有其他负载的话虚拟gpu基本上和主机gpu性能差不多(其实,开启hyper-v后所谓主机也会便乘一个大虚拟机),有其他负载的话各个负载自己抢夺资源(确信🤔

但那个视频最有意思的是,他们最后用parsec和另外一款串流工具连上虚拟机玩了一把三排,另外一个没有排上的在虚拟机里跑3dmark和cinebench卡死那三个🤔原来极客湾也玩parsec啊(意味深🤔

parsecthonk

他们折腾到最后发现网上已经有全自动配置gpu虚拟化的powershell脚本了,好巧不巧,这个脚本是一个parsec的开发者做的🤔项目已经在github上开源了,叫做Easy-GPU-PV🤔

我打开看了下,发现它自动化程度还是非常高的,只需要指定一张win10的iso镜像,就能自动完成从设置hyper-v虚拟机参数到创建虚拟机到安装系统和驱动到安装parsec的全过程,甚至说是只需要等15分钟,虚拟机就会出现在parsec的主机列表里🤔

当然,最后一步我是持怀疑态度的,因为以我自己配置parsec的经验,登录parsec需要用proxifier拐,登录后也得在配置文件里面写入代理参数,它这个自动脚本准备如何解决parsec中心服务器在中修被墙这件事🤔除非,它其实可以将配置文件也自动加载进去,而且登录的时候直接从主机拷某种登录凭据过去,再对这些配置文件进行某种申必重新初始化操作生成一个新的peer id(我现在只知道一种生成新peer id的方法,就是删掉所有配置文件重新登录🤔

这么搞还有一个额外的好处,hyper-v的gpu虚拟化一直以来有一个问题,就是它得关掉什么增强屏幕会话,导致它基本上,只能用rdp来连虚拟机,而非像vmware workstation那样直接在一个窗口里玩虚拟机的游戏🤔换句话说,开了gpu虚拟化的hyper-v虚拟机无限接近于一个无头系统(确信🤔而rdp打游戏的体验那就不用多说了,此时用parsec取代rdp就太寄吧爽了,不仅可以4k 60fps,还能在自家局域网外打游戏,四舍五入算一个私有geforce now了(确信🤔

thonkeqing

另外,现在gpu虚拟化还进入了下一个阶段,那就是使用nvidia显卡自带的虚拟gpu功能🤔

话说nvidia一直以来和gpu虚拟化的一般通过用户极其不对付,因为在它看来,gpu虚拟化是只有grid和某些高端quadro等黑色高级显卡才能使用的功能🤔而所有新出的nvidia显卡,至少从⑨代(maxwell)开始,都有支持gpu虚拟化的硬件,它只是在驱动层面简单粗暴地阻止用户玩gpu虚拟化,无论是gpu直通虚拟机,还是所谓的虚拟gpu(恼🤔

以前我看到有人魔改显卡pcb板上的某些电阻,从而改变pci id让nvidia的死🐴驱动认为插入的是一张quadro,从而让gpu直通虚拟机用🤔或者用nvidia-vbios-vfio-patcher这样的玩意刷vbios(这玩意貌似只支持10系卡🤔但今天我看到了一个叫做vgpu_unlock的神奇项目,它也是魔改pci id,但它使用了一种极其巧妙的方法:hook内核模块🤔

具体来说,他们通过逆向工程等方法,发现nvidia驱动(以内核模块的形式存在)每次使用虚拟gpu功能时,会去读某段和显卡硬件相关的内核地址空间(如果我没记错的话,x86的所有io设备都是通过在内存中占据一片地址空间的方式被处理器使用的,使用io和读写内存的汇编语句应该没啥差别),从中读取两个加了密的申必参数,解密之后值就是pci id,然后通过比对pci id来判断要不要给开gpu虚拟化功能🤔所以他们用另外一个内核模块hook了这个内核模块,这样每次nvidia的内核模块要调用memcopy函数读这两个参数时,就先去解密这两个参数获取nvidia内核模块原来获取的pci id,再用其对应型号的grid卡的pci id给它重新构造那两个参数并返回给它,这样它解密后,发现是grid的pci id,いいよ!来いよ!把虚拟gpu塞进这些虚拟机的虚拟pcie槽里!pcie槽里!!(错乱🤔

而这个魔改内核模块如何知道该给nvidia的内核模块返回什么pci id?🤔他们又写了一个应该是用python实现的用户空间守护进程,用来检测这台机子上装的所有nvidia显卡,用它内置的数据库来判断这些显卡是否真的支持虚拟gpu,如果支持的话,它对应的grid显卡又应该是什么型号,也就是什么pci id应该替换成什么pci id,然后把这个信息通过syscall传递给魔改内核模块🤔

这玩意反正比魔改显卡pcb高级多了,至少它没有烧坏显卡的风险(确信🤔反正无论如何,此时迫真模仿linus竖起中指fuck you nvidia就vans了(吴慈悲🤔

dudiskAYAYA

与此同时,到今天积压在某些2.5寸sas硬盘里面的截图8GB档实在是太多了,我得开一次度盘转discord(恼🤔

上了某个月度共享账号,一个链接都没解析出来,换什么ip都是如此(恼🤔这可能说明月度账号就是不适合干解析,那么换我大号呢?貌似可以解析出来🤔

我肯定不会用大号解析,我得去买个会员🤔然而现在根本找不到什么20块钱左右的超级会员cdk,所以恐怕我只能接着去租4块钱一天的日抛账号了(悲🤔

但既然我又买了日抛,那我不整完今天的将近1TB存货外加上个月积压的玩意,那肯定是说不过去的🤔这些东西加起来到了26线程,这么说吧,26线程全开时,这狗逼玩意能卡到每个线程一两秒才完成一次请求(半恼🤔

好在它们几乎全解析完了,而且这些加起来4TB的玩意不到4个小时就全部完成了转存discord drive🤔不错,那我再安排4TB如何?🤔

现在这4TB也全部解析完了,而且也在转存中,不错,我今天一天就搞了8TB🤔现在居然只剩三个账号就彻底搞完了,考虑到这些玩意其实不完全是图片,加起来可能又是个4TB,最多5TB🤔接下来我能不能再搞第三波,恐怕就得看它能不能解析出来了,实在不行下个月再说(🤔

luminethonk

最后一波(迫真),顺便捎带一个服务器备份,还真是5TB🤔而且更牛批的是,它第三次还能解析🤔那真滴牛批,我今天一天搞完了11TB的度盘转discord drive(确信🤔

如果这部分转存也没问题的话,那么至此我基本上搞完了我自从开始将图片上传到度盘以来所有图片的度盘转discord drive(确信🤔也许还有那么两个文件夹里的东西由于度盘的死🐴文件名censor,导致完全没法分享出去,但那我以后再说⑧🤔

接下来也许还可以处理点什么年度备份啥的,每个文件夹可能1TB的那种🤔话说今年也只有四个多月就结束了,到年底也许还得备份点什么寄吧玩意,当然那是三四个月后的事情了(确信🤔

另外我接下来的度盘存储可能会面临一些坑爹情形,比如我很多年前攒的度盘账号只剩下两个空的了,就算给上会员,也只剩4TB了(恼🤔上超级会员?我还没有做好这种准备(🤔

dudiskbitte.22.07.23

今天处理另外500GB的cuties impact客户端备份,但在此之前,我需要将这几天上传的东西全部转到discord drive上去,我才能将本地2.5寸sas上的压缩包删了(恼🤔

所以,这次我选择用bash的&来开多线程解析,而非像以前那样开八九个窗口🤔效果非常的可以,也许因为我解析的东西少,每次只解析一个文件夹,⑨个线程没有一个文件解析不出来🤔那还有什么好说的,撸就vans了(确信🤔

这次度盘转discord drive之后,我又感觉这玩意非常的行了(至少和前几个月相比),还想再弄一波🤔那就从前几天没搞完的部分来⑧,今天先折腾一个号的🤔这次平均每个线程解析25个文件,还是全搞定🤔

但接下来我不打算手动将所有线程生成的文件整均匀了,反正无论如何,每次生成完discord drive链接我都得手动归类它们,这次我干脆直接将所有线程的下载链接合并成一个带文件得了,由于它一个文件严格对应6行(包括一个换行符),直接用经典split8函数处理就vans了(确信🤔除了这玩意可能得改一下,不多加一行,也不多加6行,如果它生成了第⑨个文件,难道我没有第⑨个线程吗🤔最后生成的discord drive链接我也合并成一个带文件,然后grep出相应的分类(确信🤔

AYAYA

第三次解析整个账号,撸出来1⑨个线程,每个线程解析一个文件夹,一分钟后,所有线程都解析出了结果🤔这实在是太牛批了,这可是1⑨个线程啊,1⑨个🤔

看来,我貌似已经彻底摆脱了403问题(确信🤔基本上意味着我再也不用每天花4块钱买号了,我可以买一些长期的共享度盘会员,现在就坐看那个号解析多少TB的文件开始限速🤔

另外,从ip的角度讲,度盘解析最好在自家的本地机子干,vps这种固定ip机子很容易被橄榄,更别说vps离度盘的服务器很远了,干个啥都得一秒以上(恼🤔而在本地,又离度盘的服务器近(基本上几十到十几毫秒),又可以随便切换ip,还可以用本地十几个核心的cpu开十几个线程,这不比vps爽114514倍?🤔