u2bitte.22.09.10

终于,我可以将占据那两台大盘鸡一年以上的u2冻鳗资源清除出去了(吴慈悲🤔

在此之前我需要将它们先上传到那三个drive上去,其中一号机的onedrive早就上传完成了,尽管它那一会儿400Mbps一会儿1Mbps以下的速度实在是哈人(恼🤔而且它传guilded drive还是那么慢,所以跳过这部分,直接开始上传discord drive🤔

这段时间里,二号机可以先上传一波guilded drive,再上传一波onedrive,然后做好上传discord drive的准备,等一号机完成上传就跟着上传(确信🤔我估摸着一号机那极其死🐴的io能一天搞定discord drive都算我运气好(全恼🤔

与此同时我发现本机也有一大堆东西可以上传onedrive,而且这几天下来本机上传onedrive的速度只比上传度盘慢亿点点,也就是平均7MB/s的水平🤔更重要的是它不像度盘一样需要几十个线程还有固态才能实现最高上传速度,也就意味着我可以将保存在机械硬盘上的玩意直接扔上去,它还能保持我那边的目录结构🤔而且cg图包这种东西也能搞了,然后随便写个脚本就能撸出一篇充满cg图的博客文章,反正比guilded或者discord的玩意好实现多了(确信🤔

当然,在一篇博客文章里试图加载一千张图片,能瞬间橄榄onedrive乃至整个博客🤔我也许可以考虑装一个能延时加载还是诸如此类玩意的插件(反正我只记得以lazyload开头),再去上线那篇文章⑧,它现在别说发布了,就算在编辑界面也能橄榄我的整个博客(恼🤔

thonkeqing

一个下午加晚上之后,它终于搞得差不多了,一号机完成了discord drive上传,此时二号机刚好完成了onedrive上传(恼🤔两台机子的onedrive上传都出现了错误,而且都不是什么可以通过重试copy或者sync就能解决的错误(🤔

所以我只能将日志写入文件进行分析了,极其生草的是rclone输出的日志全在stderr里面🤔分析的结果是一号机里有三个docx文件,上传到onedrive后会被它添油加醋导致checksum和大小都对应不上(恼🤔而二号机更离谱,四个文件的文件名有问题,复制到notepad++里才发现它中间插了一个肉眼不可见的申必字符,导致onedrive报错500(全恼🤔

看来,以后onedrive也得常态化输出日志了🤔另外本机上传的onedrive也完成了,得以发现一件非常生草的情形:机械硬盘完全不适合多线程上传,别说度盘的32线程了,onedrive的四个线程也能彻底拖慢它的进度,能慢到3MB/s级别(恼🤔而等我把它挪到固态之后,马上就恢复到了正常速度,甚至不用梯子🤔

这就有意思了,莫非以后我上传个onedrive也得先将文件夹复制到固态里?🤔当然之前我在进入cuties impact系统时的确是先将部分文件夹复制到固态里再上传,但不是为了加速,仅仅是因为那个系统会橄榄我机械硬盘上文件的访问时间🤔但运行于同一台机子的这两个系统上传速度差别之大,还是让我注意到了这种可能性🤔

无论如何,本地上传onedrive的目标也完成了,现在某块onedrive光本地上传的文件就达到了可能700GB这么多🤔

而这两天sexart转onedrive也基本上停了,我寻思下次(可能是明天早上到中午的某个时间)启动它时,要不要整点别的活,比如东西都下载并解压了,除了上传onedrive外,顺便上传一遍guilded drive吼不吼啊?(🤔或者在此之前我还可以再搞一件事,将一号机的discord drive备份下载到二号机上并解压,然后拿二号机来做一号机数据的guilded drive🤔

luminethonk

我突然发现二号机的guilded drive链接貌似忘保存了🤔再看原来的命令行,我把stdout和stderr都重定向到文件了,而且还是两个不同的文件🤔那没事了(确信🤔

话说无论是tar还是curl,它们由于stdout有可能被管道到别处(比如我的guilded drive脚本里刚好就是tar管道到curl),如果它们需要往屏幕上打印出什么东西的话,其实它们都是打印到stderr的(确信🤔所以哪个压缩包里面包括了哪些文件,还有curl速度啥的,应该都在stderr重定向到的文件里🤔只有一个玩意除外,最后生成的guilded drive链接,这玩意我是打到stdout的(确信🤔

dd multithreading.22.08.22

我现在也许有一个不太成熟的想法,既然nvme固态不适合(在没有空调的情况下)长时间读写,哪怕读取速度只有15MB/s🤔我是不是可以将流式处理按步骤拆解,比如我先光速将那块固态里的东西dd到一个和它容量一样大的img文件里,然后cat这个大镜像文件,从此继续流式处理?🤔此时那块固态早就下线了,它既不会中途掉线,而且它的掉线与否也完全不会影响我接下来的处理了(确信🤔

而且由于我已经将其便乘了临时文件,其实我接下来都可以并行化了,比如用我在guilded drive v4里的技术来split后接着split,然后对每一个某指定大小的块进行并行压缩和gpg🤔或者,我可以直接简单粗暴地将大镜像文件先split成线程数(比如24)份,然后在每一份里面跑原来的那种脚本,再将其结果合并🤔反正这两种搞法最后都能获得分块顺序正确的数据流,可以用于guilded上传,只不过前者可能每个分片的大小不固定,而后者每个大分片的最后一个小分片文件大小可能低于固定值而已(确信🤔

我这边可能需要先做一个实验,比如对一个稍微大些的文件(小于1GB),用两种方式处理,一种是先管道到gzip然后gpg,再将管道后的数据流分成若干份🤔另一种是先将其先分为若干份,然后将每一份分别管道到gzip和gpg(可以并行)🤔目标是测试将这些分片文件(这里它们不会被上传到guilded,但如果使用guilded的多线程下载脚本,它全部下载完后也是这种状态)for循环里cat、for循环外管道到gpg和gunzip后,能否恢复出原来的文件🤔前者肯定能,因为我的guilded drive脚本就是这么写的,但后者我就不太确定了(恼🤔

而从具体实践上来说,我倾向于将分片文件制作好,然后扔进某块机械硬盘里面🤔很明显,因为pe4010也是nvme固态,哪怕它比pm961耐操亿点点,但挂某个没有空调的阳台上读取一整天,我估计它也绷不住(恼🤔但机械硬盘就没有这种问题,我经常在没有空调的情况下上传它上面的东西,基本上没有出过一次事故(确信🤔而且这么搞,我还有机会将其便乘度盘8GB包,这样它不就可以拥有度盘discord drive还有guilded drive三重备份了?🤔

wiebitte

考虑到这块垃圾pm963插在某块垃圾硬盘盒上读个不到4GB文件就卡出了⑩,当然也有可能是因为我的主系统和那块硬盘盒就是不太对付(那它之前veritas备份时怎么就没出错,一dd就出错),我现在只有一个选项了:用rtl的黑色高级转接器接它,然后将其光速(大嘘)备份到某块机械硬盘上🤔刚好前几天我那些2.5寸的sas硬盘刚好腾出空间,可以考虑放它(确信🤔

那还有什么好说的,再次打开x79,直接撸就vans了(🤔

但在对dd相关玩意的测试中,我发现尽管gzip的确无论先split再gzip还是先gzip再split都不会影响最终文件的checksum,但gpg并非如此,它基本上只支持先gpg再split,如果想先split再(多线程)gpg的话,那么那坨玩意流式恢复时会出现大问题,它只能恢复出一个split分片的东西(全恼🤔所以我无端猜测,gpg肯定不是真正的流式处理,它顶多只算能接受stdin数据流而已(确信🤔它stdout出的东西肯定会在前面或者后面加上一段metadata之类的东西(比如这坨玩意到哪儿就该终结了之类的),导致将其加密处理后的很多分片合并成一个文件后(解包脚本里用for循环来cat在循环外接管道,其实也是将这些包当作一个连续的大文件处理),它从本质上来说失去了任何意义(悲🤔

现在就非常难办了,我当然也可以将解包也整成多线程,但考虑到和打包不太一样,解包时通常没什么地方放什么临时文件🤔但如果我考虑到了多线程处理的特殊性,比如每个包其实是独立且完整的gpg加密后数据,而非是之前那样的gpg加密后数据的一片,那么我也许完全可以在for循环内部完成解密,然后在for循环外管道进gunzip?🤔考虑到和多线程加密一样,解密时gpg也会被执行不止一次,我们只能用--passphrase来给gpg提供密码了(🤔

哪天我去做个测试,但这几天我还得冲刺2.8海岛活动(全恼🤔

windwalker

另外我突然想订阅几个月的windwalker了🤔这个画师的作品实在是太たま合我口味了,连稻妻lisa这种屑狐狸都画得让我想冲(大嘘🤔

问题是我既然想订阅他的patreon频道了,那我应该没什么兴趣订阅什么只有色图的tier,因为这个tier的所有内容,基本上都会在下个月的月初准时出现在rule34.xxx🤔顶多会缺失几张,或者顺序有点乱🤔但kemono却没法收录他的画作,因为他不是在patreon上面分发东西的,而是通过电子邮件(🤔

而我既然极其喜欢这个画师的作品,那我肯定想搞点rule34.xxx上面没有的东西,比如psd,比如描述制作过程的视频🤔身为精神fsf壬,我对任何接近源代码的玩意都极其感兴趣,听歌要搞到midi谱子,看色图要搞到psd,说不定等我哪天有闲时间学画画了,我可以拿这些东西模仿他的画风,所以它们还有无形的学术价值(大嘘🤔这个tier是10美元一个月,都能买两个月discord nitro了(恼🤔

而且我现在订阅还不算,它到每个月1号才开始扣费,每个月2到5号才会发送上个月图包🤔这就是我上面说的为啥到月初才能在rule34上看到他上一个月的大作了(🤔

但总体来说patreon还是比较好用的,因为它支持使用paypal和paypal绑定的国内卡,不像pixiv fanbox和更屑的onlyfans🤔

barbruh

难以想象我到今天才打完所有四个账号的主线(悲🤔考虑到马上所有主线支线都过期了,我得赶紧玩一些比较重要的支线,比如完成后送绝版(迫真)家具的任务🤔

上wiki大致搜了下,这个版本应该只有三个绝版家具,一个在xinyan impact的大世界里,是个大喇叭(的图纸),而且和这个活动里的大喇叭一样,可以产生气流将自机角色喷上天,只不过也许不用弹迫真二胡🤔这玩意搞起来还是比较简单的,几分钟就能搞定(迫真),首先xinyan impact右边有一个地下空间,进去后连bgm都会便乘chasm版本,准确点来说是2.7版本活动的新曲子🤔接下来和xinyan impact的秘境解谜基本上没啥本质区别了(确信🤔

它降低水位的柱子被四个火什么玩意来着锁住了,三个在这里解,最后一个需要穿过一个传送门🤔在传送门的另一边除了最后一个那啥外,还有一个开门的玩意,打开门后直通albedo的迫真实验室🤔很明显这是个只能从里面打开的门,在chasm里面我们也是见得多了(🤔

接下来我们如果只是想要futui impact的海螺的话,直接回去降低水位然后捡海螺就vans了🤔它那里有很明显的一组喇叭来解锁什么东西,很不幸的是最后射的那个门被什么玩意给挡住了(悲🤔和秘境一样,此时我们肯定需要去xinyan impact的大鼓那里,改一次场景🤔问题是改场景之后这个地下空间原来的入口就没了,就像秘境里敲某个大鼓会遮住一部分玩意开启另外一部分玩意一样🤔

那么和秘境一样,我们也只能通过某个传送门来进入,刚好我们打开了albedo实验室旁边的那个门,所以我们可以先进入albedo实验室,再从那个传送门直接进入地下空间🤔此时再操纵那组喇叭,那个门是可以解锁的了,进去看见三个宝箱,60原石外加大喇叭的图纸到手🤔

当然,也完全可以在albedo实验室旁边的门开启后就直接去改场景,然后进传送门后降水位捡海螺和宝箱一气呵成,最多5分钟(确信🤔

剩下两个绝版家具分别是迫真海盗船和fischl impact迫真话剧支线任务的奖励🤔这两个玩意还是值得一玩的,因为它们再怎么说也是全程配音的支线🤔我目前只给每一个号玩了一遍海盗船,话剧可能没时间玩(半恼🤔

海盗船剧情讲的是主线剧情一开始那个会说话的海盗船,尽管现在肉身早就便乘了很多段沉船(我记得在1.6的海岛活动里它其实就出现过了,而且那时也有寻宝支线),但由于岛上愚人众申必机器的影响,保留了意识并(应该是)化身为主角开的小船🤔

取名中级高手paimon给它取名miitoboru,这个名字在英文版里好像没啥意思(更正:其实是meatball的日式英文发音),但在中文和日文版里它的意思是大肉丸,没错,就是barbruh的中文声优兼知名barbruh cosplayer的那个大肉丸🤔这就非常生草了,尽管稻妻到处都是这个丸那个丸,比如清籁岛就有一个著名沉船景观"senraimaru",但把一个船叫做大肉丸,不愧是paimon🤔

这个任务里主角到处去找宝藏,结果要么只能找到沉船的一部分(当然这部分肯定是1.6资源复用了,其实这个会说话的沉船就是1.6的那个沉船)要么发现它的残骸被岛民做成了木剑和乐器🤔其中夹杂一大堆迫真回忆,比如这个海盗船的船长,清籁岛知名海盗大战幕府军之类的玩意🤔里面甚至夹杂了一句如果是德语的话应该会被翻译成“大屁股裂了?尼玛死!”的台词,可见cuties impact的编剧也看过der untergang(大嘘🤔

接下来这个任务在主角找了114514遍都没有找到任何东西之后结束🤔在主角修好了愚人众机器之后,这个任务开始第二部分🤔这部分就非常有意思了,由于某种申必原因,整个场景直接便乘了大肉丸的临终回忆之类的玩意,比如大肉丸其实叫做kosekimaru,是清籁岛上koseki village的旗舰🤔而且如果主角解锁了鱼叉这把武器的话,大肉丸会回忆起那个海岛用鱼叉叉起魔偶之类的事情(貌似1.6海岛中间的那个魔偶就是某海盗用鱼叉带到海岛的,我反正不信,除非我的鱼叉raiden能一个大招把魔偶秒了🤔接下来海面直接稻妻化,充满了雷暴和114514个雷深渊法师,象征着(迫真)和幕府军大战的场景,只不过这次和上次不一样,在荧酱高超的驾驶技艺之下,大肉丸穿过了雷暴,又一次到了kosakimaru废墟那个位置🤔

接下来就是极其科幻的场景了,某种申必力量从kosekimaru的废墟里3d打印出了一个kosekimaru船模,我直接惊呆🤔这游戏真就伪装成迫真中世纪游戏的科幻游戏罢,和ryza一样🤔

至于迫真话剧,我还没玩,所以不清楚有什么内容(悲🤔另外海盗船都有任务了,为啥松鼠酱没任务(恼🤔

wiebitte.22.08.20

一夜过去了,dd只备份了90GB🤔看来这玩意非常有可能需要挂一整天机,刚好我一整天需要出门🤔

几个小时后我远程登进去,观察到它上传速度便乘了0,关掉cygwin窗口后,固态居然掉线了?便乘了一个未知usb设备?wiebitte?🤔

这可真にま离谱,我走的时候并没有开空调,所以今天气温热到连nvme固态都绷不住了?🤔

但更离谱的是,我无论用acronis还是veritas它都不崩,为啥用dd它就要崩几次,不是间歇性地读取速度便乘0,就是直接掉线(全恼🤔

luminethonk

还好回去后再插上另外一台机子,转接器和固态都是好的,估计它们触发了过热保护🤔看来nvme固态需要注意散热真的不是危言耸听(恼🤔

但这也许从某种程度上说明,nvme固态可能确实不太适合作为移动硬盘用🤔比如对我的同样是256GB的sata固态也测下功耗,待机只有0.7W,读写数据也只有1.3W,是不是比nvme固态少多了?🤔

但接下来继续尝试备份那坨玩意?比如接入nvme转pcie卡?这就不太好说了🤔

当然今天我买的另外一个22110马甲也到了,赶紧装上去(🤔

guildedbruh.22.08.08

这几天逛某google drive资源tg群看到一个什么2000年前的旧课本.pdf打包,赶紧下了下来🤔用什么下,那当然是用rclone下啊,尽管那两个死🐴drive丢了我数据导致我现在完全不想用它们,但成型的rclone语句我还是保留着的(确信🤔

既然下完了,我肯定想把它们转存到我的drive里面,而且首选当然是guilded drive(discord drive我现在只用来做归档存储🤔然而,我跑了遍脚本之后,它连最终链接列表文件的链接都没有返回,而查看列表文件时,发现每一个分片也没有返回链接🤔

取消掉grep语句看完整响应结果,好家伙,它现在需要登录了(恼🤔

不过它理论上来说仍然不会影响我这脚本的运作逻辑,因为现在guilded仍然是先上传文件再将文件链接插入聊天消息,所以我仍然可以只上传文件不发消息,所以我上传文件的节奏仍然不会被任何东西限制(确信🤔

那么我随便注册一个guilded账号,再将cookies请求头加入我的上传脚本唯一的curl后面,不就vans了?🤔

所以我就随便撸了一个号,用的是我那个设置了cloudflare邮件转发的域名邮箱,反正它注册起来比discord容易多了,尽管注册之后它会强行切换到创建聊天室环节,但也可以不用搞这个,直接用另外一个窗口打开guilded,然后直接抓请求就vans了,找到cookies请求头,粘贴进脚本,现在它可以继续用了(确信🤔当然这也算是继续挑衅guilded的脑瘫程序员,毕竟现在我一个聊天室都没加或者创建就开始继续疯狂上传文件,就算小学文化水平的搜书盘站长都能发现问题(迫真🤔

我估摸着我有114514个脚本需要修改了,比如在请求头里加一句-H "cookie: $(cat cookies.txt)"然后将cookies全部存放在cookies.txt里面🤔

guilded dir drive v4.22.08.04

到现在guilded drive已经来到了第三代,它第一代就是个单纯的管道玩意,第二代加上了临时文件和多线程上传,第三代加上了检验checksum的功能🤔

那么问题来了:有没有可能在不产生临时文件的情况下实现第二代那样的多线程上传功能?🤔

我今天大致折腾了下,它是可以的,但需要一套相对复杂又相对比第二代简单的方法:

  • 首先,和前几代一样,需要将一个每分块大小*线程数这么大的数据流分片用split --filter传送进临时脚本1🤔

  • 和第二代不同,在临时脚本1里,接收的数据流并没有暂存到某个文件里,而是接着用split --filter传送进临时脚本2,此时大小被设置为上述的每分块大小🤔

  • 而临时脚本2并不是负责上传的脚本,它只不过将数据流照原样传送进临时脚本3,但在之后加了一个&,所以它是临时脚本3实现多线程上传的关键🤔

  • 临时脚本3才是真正的上传脚本🤔

和第二代一样,这一代多线程上传脚本也需要在上传完成后标记上传的部分属于哪一个线程🤔但考虑到这么多的split --filter的subshell特性,我最后决定将partno这一玩意用文件的形式传送进临时脚本3:

  • 在临时脚本1的开始,将0写入/tmp/counter这个文件🤔

  • 然后在临时脚本2的开始,从这个文件里读出值,将其加1,然后再次写入这个文件,再将加了之后的值传送进临时脚本3🤔

  • 这样,临时脚本3接收到的partno参数肯定是正确的partno参数,证明过程略(🤔

  • 在临时脚本1的split后面加上sort这一坨玩意,将多线程上传的结果进行排序和去除partno🤔

通过这种方式,我们再也不用什么head什么tail来切割临时文件了,整个代码的可读性直接提升了114514倍(迫真🤔

不过我好奇代码写成这样,它还能做流式上传不?比如我现在开了16个线程,每个线程200MB分片,这玩意是要占用3.2GB内存空间,还是不占用?🤔如果curl被我配置成了自动重试,那么当它重试时,是从什么地方读取要上传的内容呢?还是curl会把这部分数据流缓存进它的内存空间?🤔

还有一个问题:既然它现在是流式(迫真)上传了,那么checksum和上传基本上是没什么可能兼得了(恼🤔以前我们可以通过将临时文件读两遍来同时做checksum和上传,现在怎么搞,把管道也拆成两份?等等,stdout这玩意支持塞进两个程序里吗🤔

thonkeqing

另外我之前发现某个片子下载后tar提示数据流有错误,排查发现有一个包完全没有上传上来🤔而且我这次测试脚本的时候也发生了一次这种现象🤔

考虑到我上个月初可是拿这玩意备份了所有的vultr快照,现在好了,我慌的一批(迫真🤔

那么在流式上传过程中,有没有办法像传统读文件上传那样设置重试功能?🤔我的意思是除了在curl里面加重试之外的方法,比如经典检查guilded返回值外层套while法🤔cat -能重复cat很多遍吗?🤔

实测cat -并不能重复很多遍,只有第一遍能接收塞进脚本里的数据流,后面都是空的🤔看来它的确是流式传输啊(确信🤔

bruhfei.22.08.03

草,这都过去快24个小时了(准确点来说是21个小时),那两台机子才备份了370GB/400GB,wiebitte?🤔而且目测它们都没有压缩出什么东西,是xfs文件系统的特性,还是我那申必lvm配置的问题?导致它最后那些空闲空间没有被压缩掉?🤔反正无论如何,我的评价是:不如不管道gzip(大嘘🤔

与此同时,我的cuties impact大号已经练出了两队双风永冻队,可真是太草了,因为我现在刚好有成型的两个风dps风元素精通,而且还有甘雨/ayato和yelan chan/ayaka两组永冻组合🤔如果我愿意打深渊的话,我可以用两组双风永冻队雷普9和10,11和12就算了(恼🤔

hetzner thonk

由于待在hax中文群,我得知hax/woiden使用的是一家叫做hetzner的欧洲主机商的母鸡🤔hax的站长发了一个通知,有壬间之屑用woiden的机子做内网端口扫描,导致他们的某台德国母鸡被hetzner封了两周🤔所以今天我也跟风注册了个hetzner的号🤔

它的母鸡的确挺便宜的,比如基础款,6核cpu,64GB内存,两块512GB的nvme固态或者两块2TB的hdd,才34欧元一个月🤔考虑到hax/woiden的配置是每台小鸡512MB内存、7GB或者5GB硬盘,这个母鸡跑100台kvm小鸡都没问题,每台小鸡的成本大概是0.34欧元(确信🤔

但这个配置(在我看来)坑爹的地方是只能一次性买两块hdd,没法改成一块大的,而对它的其他配置来说也是如此🤔更别说2TB的垃圾盘性能有多烂,我是非常清楚的,因为我有好几块(🤔而且它ip给得非常少,只有一个ipv4,不像别的母鸡动不动5个起,加ip还要加一笔极其离谱的初装费(恼🤔还有内存默认居然不是ecc的,ecc内存还要加5欧元,它这套坑爹配置真的不是用来清某些过时硬件的库存的吗(恼🤔尽管我知道数据中心硬件都是被艹了114514次的玩意,但我可以放心地拿2TB垃圾盘做离线存储并不代表我可以放心地将其接着挂在数据中心里7*24在线啊(🤔

既然它默认配置那么拉,那么加硬盘呢?加硬盘的话,它只有四个盘位,最多只能上三块hdd,最后一块盘位只能加nvme,连sata固态都加不了(恼🤔再说了相同容量的sata固态比nvme固态居然要贵,让壬很难不怀疑它那nvme固态是不是什么chia挖过矿的qlc垃圾(全恼🤔而且更生草的是,对它的默认nvme母鸡加两块2TB的机械硬盘算下来是52欧元,而对它的默认hdd母鸡加两块512GB的nvme固态算下来是46欧元,考虑到它们现在配置基本上完全一样了,wiebitte?🤔

它稍微高级一点的配置稍微正常了点,至少硬盘是两块8TB的了,内存是ecc了,但此时的价格也到了54欧元,调教成我最喜欢(大嘘)的nvme系统盘+sata数据盘配置就60欧元了🤔而且上面说的配置问题仍然存在,相同配置的nvme母鸡加两块6TB硬盘是84欧元,相同配置(大嘘)的hdd母鸡加两块1TB的nvme固态是74欧元,什么大脑降级定价(恼🤔

或者,去买它的专门用来搞存储的母鸡啊,4块16TB硬盘,74欧元,不支持加nvme系统盘(话说我要么问下他们把其中一块机械硬盘换成相同价钱的sata固态吼不吼啊,就说我要搞ssd cache),而且还要99欧元的初装费,就离谱,而且这个空间我肯定用不完,我本地都没有64TB🤔话说我要是有64TB的seedbox,我是不是就可以彻底征服任意pt啊(吴慈悲🤔还是我需要换家有10Gbps无限流量的母鸡啊(🤔

storage box

所以至少今天我也对它那些母鸡没啥兴趣,哪怕它还有便宜机子拍卖或者说捡漏,最便宜的能有30欧元还是26欧元来着🤔我这几天统计了下,it方面的每月固定支出高达550,我肯定没什么想法买个母鸡,再说我现在用dedicated server干啥,我没啥可干的🤔

它还有卖小鸡的,小鸡配置还行,2GB/20GB,只要3.49欧元,稍微加点钱还能搞一个cpu和硬盘翻倍的配置,换算成美元也能将vultr按在地上雷普(确信🤔除此之外它还有一个神奇的玩意叫做storage box,顾名思义就是共享的文件服务器,可以用别的vps和它连接,而且不像各种vps商提供的block storage,它并不限制用什么vps连,也许可以用它把几台不同位置不同厂家的vps串起来用?🤔

我觉得这玩意也许可以买一个玩玩,所以我最后注册了个号,然后发现它居然要验证身份🤔草,看来我只能再注册一个号了,然后由于我没有挂代理,解锁了另外一个选项:预充20欧元🤔

这个我还是比较熟悉的,如果钞能力能解决很多事的话,那就用钞能力解决,再说了20欧元也就不到140块钱,这算个什么事(迫真🤔

而现在既然我已经充了20欧元进去,不开它几个月的storage box实在是说不过去,这玩意1TB只要2.9欧元,够开至少半年了,准确点说是6.8个月🤔就是它不清楚为啥只有1TB、5TB和10TB这几个选项,就是没一个2TB或者3TB,我感觉1TB有点少,5TB又有点过多🤔它的小鸡我就免了,除非vultr彻底橄榄它的某个旧套餐,导致我不得不再迁移一次本站(恼🤔

买后需要等上几分钟,直到它发来邮件通知这玩意开通了🤔然后去它的一个叫做robot的网站管理,它的vps和母鸡还有其他玩意貌似有不同的管理后台🤔

在robot里面可以开启它的各种文件服务,比如开启samba服务后理论上来说就可以在win系统里像打开局域网共享文件夹一样打开了,开启webdav后就可以挂载到某个盘符了,尽管这两个我都没有在本机挂载成功过(恼🤔samba也可以挂载到linux上面,尽管我非常奇怪它为什么没有提供nfs服务🤔

ssh就更不用说了,顺便一提它有两个ssh服务,22端口只提供sftp,23端口提供shell access,但这个shell access并没有提供跑discord drive等东西的能力,甚至不支持管道和重定向,它最多只支持些文件操作,常见checksum操作,和使用dd来读写文件的能力,没错,它既没有cat,也没有重定向,所以只能用dd🤔但它能使用ssh大法(甚至有官方教程)还是挺令我震惊的,这差不多意味着它完全可以在不需要任何辅助vps的情况下备份恢复别的vps了,实在是牛批🤔

这玩意在存储界可以说是没有对手了,首先单TB价格它居然比backblaze还要便宜,而后者是对象存储,基本上只有http下载文件的能力,挂载它用倒也不是不行,但文件api的费用会很快超过存储费用🤔而和各种大盘鸡以及vps内置的block storage相比,frantech的block storage是5美元/TB,而且它还经常性没货🤔letbox的block storage相对便宜些,3美元1TB,5美元2TB,但它的小鸡不是无限流量的,而且我感觉它的网络其实也不怎么样(当然有github actions之后,我觉得几乎所有vps的网络都不怎么样,它们怎么可能和微软的数据中心比网络🤔但它,1TB只要3欧元,5TB只要10欧元,而使用它(甚至备份vps)绝大多数情况下居然都用不着一台额外vps🤔甚至对象存储的应用之一,提供文件下载服务,也用不着vps,直接用cloudflare workers撸就vans了,它能自动完成登录webdav获取文件,甚至验证点用户身份啥的(确信🤔

bruh.22.08.02

突然想把我的某两台上古大盘鸡再备份一遍🤔撸好脚本,随便跑一个livecd,设置好ssh开干,然后发现它不仅tar+加密慢到个位数MB/s,检查checksum时居然能卡到掉线🤔草,我一个月150就在维持这两个寄吧?🤔

当然也有可能是因为它跑图形界面ubuntu live cd占用了大量内存🤔看来我恐怕得换我经常用的system rescue cd了,而且还不能启动图形模式🤔这次它倒是不卡了,但上传时的速度慢得离谱,50KB/s?wiebitte?🤔

更离谱的是我用主力大盘鸡上传guilded,它也是这个速度🤔这就极其离谱了,看来guilded drive的好时代,这么快就结束了?🤔

我估摸着它要么对那个机房的ip段限速了,要么对某种请求头限速了,反正它肯定设置了限速🤔比如我用浏览器版guilded上传脚本,就能正常上传,而且也没有检测到限速🤔所以,恐怕那些脚本都得改一改了(全恼🤔

thonkeqing

最后排查下来,我只能说它这限速基本上只算意外,很快它三台机子都恢复了正常速度,但保险起见,我还是给curl前面加了一大堆请求头,让它看上去更像是从浏览器上传的(大嘘🤔

不过另外一方面我也从来没有在大盘鸡上跑过我前几天写的多线程guilded脚本🤔这次跑了下,效果非常爽,四个线程就足以用完我的1Gbps带宽🤔下次我可以考虑改成两个线程🤔

无论如何,那两台旧大盘鸡已经开始了备份,考虑到它不到10MB/s的垃圾速度,没个两天两夜估计它搞不完(悲🤔我也许对其进行了gzip压缩,应该能消灭掉它们没占用的大量磁盘空间,但其中一台大盘鸡的文件系统现在处于损坏状态,那我就没啥好办法了(🤔反正单盘xfs+lvm就是屑就是了,我实在想不出来当时怎么装的那几台机子(全恼🤔

bruhfei

一早上加下午过去了,它居然只备份了262GB和292GB?🤔而且我记得那两个盘114514天之前就被我腾差不多空了啊,它是怎么压缩到超过250GB的(恼🤔

mona impact 4th(大嘘

今天万叶池子就要结束了,我的某个垃圾小号还是没抽到(悲🤔与此同时,我的稻妻amber小号试图再捞一次稻妻砂糖酱,结果金光,mona chan🤔问题是我这个号已经有yelan chan了(恼🤔

这可实在是太草了,而且此时离万叶大概也只有不到40发🤔所以,看在mona chan kawaii的份上,我就只能笑纳了(🤔

不过这个号的流浪大地貌似只有一套,我要是给mona chan用的话,甘雨就得再搞一个套了🤔还好绝大多数时间我用不上甘雨(确信🤔

luminethonk

今天决定买个12V 10A电源来接某台星际X牛的垃圾nas,我非常怀疑上次没启动成功是因为12V电源太拉🤔当然也有可能是因为我没给它插一个msata固态(🤔

luminethonk.22.07.31

昨天除了撸出了多线程guilded drive外,我还把那些将近1TB的种子按照传统discord drive搞法打包成了分卷rar,做了checksum,然后用一代脚本上传到了discord drive上🤔这部分玩意自然没个十个甚至⑨个小时是传不完的(恼🤔

所以,接下来我们做什么?要不把discord drive也便乘流式文件夹上传得了(🤔只不过这个脚本应该比单文件discord drive简单多了,它只会生成一个链接列表文件,下载时只需要按照这个列表来curl然后流式tar解包就vans了(确信🤔最多我只需要加一个单独的checksum文件,或者我也可以将这两部分放进同一个文件里,用某个符号隔开(确信🤔

但discord drive和guilded drive不同之处在于,除了单文件大小外,discord drive是可以有文件名信息的,这部分信息我填什么?🤔

AYAYA

在11451.4秒的瞎鸡巴折腾后,这玩意也被我撸出来了,而且我还把它移植到了cygwin最小环境里🤔最后分片文件名决定用分片的checksum,这样我就不用在列表文件里再加一个字段记录checksum了🤔而链接列表文件上传时文件名是最初扔进tar的文件夹名,外加日期,搞定🤔

其实这个脚本比单文件discord drive简单多了,因为它是基于多线程guilded目录上传脚本魔改的,而非任何discord drive脚本🤔而且由于这类目录上传脚本,就像我上一篇里说明的原理那样,它们是tar制作好某个大小的包,才会去调用subshell脚本来单线程或者多线程上传,我也完全用不着写什么多线程调度,因为本来就没什么东西需要调度,每次生成的小段数据流肯定能被所有线程一次性上传完毕🤔那么也就没有一大堆临时文件,它基本上只有两个临时文件,一个是这一部分数据流的暂存文件,一个暂存链接列表,没了🤔

不过这个时候,那个cygwin最小环境是不是应该改名discorddrive了?因为它不再只有singlefilediscorddrive了🤔管它呢,我可不想改一大堆脚本(恼🤔

接下来我还需要写一个对应的下载脚本🤔基本上拿guilded目录下载脚本魔改一顿就vans了,无非是由于discord drive不像guilded drive那样可以直接下,需要写一个不用代理的版本和用代理的版本而已🤔什么?guilded也有两个版本?那没事了(确信🤔

话说为啥我有三个guilded下载脚本?🤔原来第一个脚本是几天前搭配powershell用的,我当时发现powershell的管道有问题,导致解压速度慢的批爆,所以最后放弃了纯powershell,转而搞半powershell半bash,那玩意就是当时的产物🤔而某种程度上来说我往guilded drive里面加了114514个新内容,考虑到向后兼容,那玩意被保留了起来(确信🤔

但无论如何,这四天收获还是挺大的,从尝试powershell化bash脚本(然后几乎失败)开始,到最后我把几乎所有的discord antics和guilded antics都便乘了批处理版本(迫真),考虑到这个月一开始我就在研究guilded antics,可以说是最好的结束这个月的方式了(大嘘🤔

pikapods

撸完discord drive(现在是不是该叫第三代了?)逛某个叫做lowendspirit的vps垃圾佬论坛(lowendtalk据说卖给某个申必金主了,所以这个新论坛是上个垃圾佬论坛的精神续作),想在里面找个ipv6 vps玩玩🤔它有一家1TB的存储vps,两年48美元,问题是只给了一个月4TB流量,wiebitte?🤔以我玩存储vps的经验,如果它的流量没有硬盘大小的10倍的话,那么它最后只能放着吃灰🤔拿来挂pt都不怎么行,我当年挂u2的时候一个月随便用掉30TB流量🤔

然后我发现了一个叫pikapods的玩意,它是个怎么说呢,容器服务,但不是那种用docker hub上的镜像生成容器的服务,而是有它自己的容器仓库🤔比如它有wordpress容器,开启之后还能搞一个二级域名,然后用cname来绑自己的域名,但我没尝试成功过(半恼🤔

但我要说的是,现在它每个注册账号能白嫖5美元,不用绑信用卡啥的,直接注册🤔按照它目前的收费,撸一个wp容器只要1.64美元一个月,拥有1/4核的u,512MB内存和10GB存储,反正比我现在用的那个便宜多了(确信🤔这要是白嫖的话,可以嫖三个月,而且和域名不一样,到期了直接导出wp所有玩意,然后再开个账号,导入就vans了(确信🤔

fun fakt:我试图将它的资源分配拉到我的存储vps那么多的级别,也就是两个核心、2GB内存和1TB存储,收费11.41美元🤔有意思,这价格和我目前用的存储vps相比有没有可比性暂且不提,它的硬盘114514%是ssd,1TB的ssd可实在是太牛批了,除了不能命令行跑discord drive之外🤔

所以我目前暂时开了一个wp容器,登上去感觉还行,只需要填一个用户名和密码就能完成设置,装md插件也能随便装🤔装了另外一个md插件,发现它的在线编辑器仍然能被thonk表情卡住,这就非常尴尬了🤔

试了下wp自带的导出和导入,基本上能导入所有文章和相关metadata,除了文章的内容不是md格式,而是html🤔草,那这不导了个寂寞🤔

thonkeqing

不过如果是wp的话,其实可以通过装插件来备份和恢复全站,不仅包括文章啥的,整个数据库和整个webroot(包括插件和主题)都能包括在内🤔

我试了两个这种插件,其中一个叫做什么all in one wp migration的,只能备份不能压缩,而且只能浏览器下载和上传,我尝试(往那个容器里)上传备份档时遇到了上传限制(恼🤔但另外一个叫做backup migration的插件不仅能备份和压缩,还能用网站自己的http服务器提供一个链接,在目标站也装这个插件,然后输入这个链接,就能从源站下载备份档并开始恢复🤔

它这个恢复过程貌似有点慢的离谱,可能是因为它只有1/4个u⑧🤔我要不重新开一个核心数和内存大的,然后看它支不支持中途缩配置🤔

barbruh

草,换了台双核8GB的容器(它的白嫖账号能开的最大容器)10分钟了,它才恢复了个66%?wiebitte?🤔实在是难绷🤔我记得这玩意只有1/4核时也能随便打开和编辑页面啊🤔不过这备份档的wp_posts有十万甚至⑨万行可还行,我无端猜测用php来恢复这么多行数据库项可能也的确没有mysql命令行乃至直接dd镜像快就是了(确信🤔

看来,搞不好这破容器的确不太适合跑wp这种上古webapp,考虑到如果只是想用md,而且外链啥的全部挂在了discord drive或者guilded drive上,是不是可以考虑一些比较轻量级的webapp?🤔但它的blog分类webapp真的只有一个wp,别的玩意也许支持md,也许轻量级,但它们不是blog(恼🤔

bruhfei

在长达20分钟的恢复过程中,这玩意居然中途出错了,原因是内存空间耗尽,而且更生草的是它居然只给wp分配了64MB内存🤔这简直比某带学的jsp教务系统还要傻逼,什么脑瘫配置(全恼🤔

我用sftp登上去一看,它有一个upload.ini文件,可以配置占用内存和运行时间啥的,都往大里改,然后重启下容器,再跑一遍恢复🤔大约半个小时后,这次终于恢复完成了,再次刷新后它彻底便乘了源站🤔除了固定链接那里需要重新设置下,然后点一次保存,不然固定链接就是没法正常运作,wp老毛病了(半恼🤔

这么说吧,这玩意尽管作为白嫖资源貌似没什么github actions(只能跑6小时)或者hax/woiden(需要每周续一次)好玩,毕竟它连个ssh access都没有,但拿它做站的话实在是最好不过了,一次可以撸三个月(确信🤔三个月后它有没有倒闭还是个问题呢(🤔

thonkeqing.22.07.30

这几天bash脚本批处理化(迫真)的antics还在继续,guilded上传脚本也被我魔改好了🤔

但它现在至少存在两个问题:

  • 上传速度实在是太慢了,哪怕梯子加速后还是⑧行🤔毕竟这玩意是流式上传的,所以至少目前,它只能搞成单线程,我这边加上梯子最高也只有3MB/s,反正比discord drive差远了(悲🤔

  • 由于路径转换的问题,尤其是涉及到win到linux的转换,输进tar命令的路径都便乘了绝对路径🤔但tar的话,在我知道如何进一步设置前,如果输进去了绝对路径,它会把这一大坨路径除去根目录的/都保存起来的,到时候解压的时候也全部解压出来🤔而我更想达到的效果是只保存那个目录本身🤔到此解决方案是要么看tar有没有啥设置搞这个,要么cd到这个绝对路径的上一层目录,然后在那里tar那个目录,这样tar记录下来的目录结构就是我要的了(确信🤔

但这么搞可能会产生新的问题,tar之后split还需要在一个subshell里执行上传的脚本,那个脚本的当前目录会便乘什么?🤔如果它会便乘比如我们要处理的目录相关的玩意的话,那么上一个脚本里的当前目录这个参数,我们是不是要给它传进去?🤔

thonk

另外,我觉得用guilded drive来大规模保存之前下的将近1TB的种子,可能是一个好主意🤔因为种子自然是一个种子下载出一个目录(有时候种子下载出来的只有一个文件,但我在的pt强制要求一个种子必须建立一个目录),而guilded流式上传脚本刚好可以将一个目录便乘一个guilded drive链接,所以一个种子就便乘了一个链接,到时候下载时也是一个链接便乘了一个种子对应的目录,完美🤔

而discord drive就没那么方便了,对于旧discord drive来说,我还得对每一个目录手动rar,手动验checksum,还要手动上传,尽管我当时处理u2的时候的确写了一个半自动化玩意,但它还是麻烦🤔单文件discord drive?它只能拆分单文件,我是不是还得将一个种子对应的目录手动压缩成单个rar文件?(恼🤔

而guilded drive就没那么多麻烦,直接对着一个目录写一个for循环,将每一个子目录塞进脚本撸就vans了(确信🤔

现在已经搞了好几个小时了,平均下来20MB/s,一分钟1.2GB,基本上和旧discord drive的1GB到1.5GB一分钟持平了(确信🤔当然,旧discord drive可是有验证每个包checksum的功能的,不然50MB/s都能随便上🤔

至于guilded drive生成的链接没有任何信息这一点,,,其实我每次处理前将ls出来的目录列表贴在discord频道里就vans了,由于for循环肯定是顺序执行的,贴出来的目录顺序肯定和生成的guilded drive链接顺序是完全一样的,到时候按照顺序找某个资源对应的链接就vans了(确信🤔

fischlthonk

guilded drive流式目录上传还有没有优化的空间?比如,流式上传也实现多线程?🤔

首先,guilded drive能实现流式上传,是因为tar打包后的数据流被塞进了split里,它被设置成每到它接收的数据流达到了一定大小(比如200MB-114514字节),它就会在subshell里调用另外一个脚本,将这些数据流塞进这个脚本里上传🤔

那么,如果想要上传这个功能便乘多线程的话,它首先需要实现一个计数器,使得每一个subshell里跑的上传脚本都知道这段要上传的数据流属于全部数据流的第几个part🤔然后,这些subshell需要能并行跑起来,而非像现在这样每tar到某个大小后会阻塞到上传脚本完成上传为止🤔

当然,也许它存在一个相对比较简单的方法,以4线程为例,将800MB数据流传给subshell,而subshell里的上传脚本会将其保存到某个临时文件夹或者tmpfs里,再将保存的文件用单文件discord drive同款方法(tail | head)四线程上传就vans了,只要确保这四个文件上传后的链接顺序是对的(比如第一个分片文件上传后的链接在四行里的第一行),甚至都不用记录它是总数据流的第几个part🤔

这样,主脚本基本上不需要改,最多加几个参数(确信🤔

AYAYA

在又一个1145.14秒后,目录打包guilded drive终于便乘了多线程上传版本🤔subshell脚本被我扩写了一番,考虑到subshell脚本通常是主脚本生成的,它发生了一系列生草的事情🤔比如上次我也许说过的,在那里面写的变量在写入subshell脚本前会进行一番变量替换🤔但更生草的是里面写的命令替换部分(用来将上传结果赋予一个变量,因为我需要将那个返回的链接和partno一块输出)也会先执行一遍命令替换再写入subshell脚本,实在是草🤔所以最后我只能将\$和```全部给转义了,现在subshell脚本终于恢复了正常(确信🤔

接下来多线程部分也极其生草,一般来说在for循环里面写一个花括号然后里面写入要多线程执行的命令,后面再加一个&,它们在for循环执行完后会全部后台执行,而主脚本也会继续执行,除非done后面加一行wait🤔但如果我在done后面跟一个管道的话,它会等这些线程执行完,然后将它们的输出结果汇总起来,再扔进管道里🤔有点意思🤔

所以,我在for循环的内层,先让一个初始值为0的计数器(表示partno)加1,然后将partno的值连同临时文件的offset(也就是从第几个字节开始上传🤔至于上传多少字节?这部分由主脚本的变量决定,就像我之前说的,生成subshell脚本的过程中会搞变量替换,这样它就会写进subshell脚本里面)传进上传函数里面🤔而上传函数并不会像之前那样直接打印出上传后guilded返回的链接,它需要先保存这个链接,然后将其和之前那个计数器变量以partno|link的形式合并输出🤔

输出之后我在for循环的末尾加上管道,来一个sort -n,实测哪怕它是上面那种格式,也能在线程数超过⑨的情况下正确输出从1到最后一个线程的链接🤔那么,再用cut提取出链接,写入到某个文件,这个多线程脚本就搞完了(确信🤔

以相同的思路,我们也可以往discord drive里流式上传目录,此时每一个线程对应一个webhook url🤔只不过每次二三十个线程同时开火,怎么看都不像是什么高效的上传方法就是了(恼🤔

现在,压力来到了cygwin最小环境这边(确信🤔

JAJAJAJAJA

在又一番瞎鸡巴折腾后,cygwin最小环境里也可以使用多线程guilded drive了🤔https://s3-us-west-2.amazonaws.com/www.guilded.gg/ContentMediaGenericFiles/5f8b4d775b5bc0eadb7deb0e17f41d81-Full.zip
,请(吴慈悲🤔

上传速度还行,至少比我之前撸的单线程guilded drive快多了,哪怕用upload.barbruh.lol这个完全没有梯子加速的上传api,也能达到最高⑨0Mbps(确信🤔不错,这事终于告一段落了(迫真🤔

bruhfei.22.07.29

实在是受够了某垃圾nas(迫真)运行clash的速度了,切换个节点都需要好几秒🤔

所以,我突然想复活之前用的星级X牛nas了🤔在1145.14秒的瞎鸡巴折腾后,这玩意,,,插电了启动不起来🤔

不错,看来我只能接着用那台垃圾nas(迫真)了(恼🤔

cloudflare antics

与此同时,我发现cloudflare(在处理range请求头与否这个问题上)基本上只管文件扩展名,而不管它实际的mimetype🤔所以,我只需要对一个mp4文件用ln命令创建链接(最好还是创建硬链接,符号链接只有相同目录才能用在http服务器上,局限性很大),将其便乘txt文件,接下来我就可以随便下了,估计扔进mpv应该也没啥问题(确信🤔

而且没错,mpv的确可以流式观看txt(大嘘)格式的视频🤔作为一款万能命令行播放器,它再怎么说,也能自动识别视频(或者txt文件)容器的格式啥的🤔

bruhfei

话说为啥现在的梯子都只有ipv4,我想挂梯子加速视频播放,它就会直接报错,因为貌似我那几个cloudflare站全部解析成ipv6了(全恼🤔既然如此,我就只能彻底关掉本机的ipv6了,或者我在hosts里面将我的几个域名直接填成ipv4的cloudflare节点地址(🤔

当然,关掉ipv6也不是啥大问题,毕竟早些时候我所有的vps都被我配置成了双栈,因为那时流行的玩法就是双栈vps配置nginx提供双栈web服务,dns同时添加a记录和aaaa记录🤔所以我只需要用那些vps开二级代理(它们本身肯定是走代理才连上去的,不然卡到输命令都没法愉快地输),然后连接hax那群机子的时候走这些二级代理就vans了(确信🤔

不过我好像也不是很有必要用梯子加速,毕竟cloudflare走ipv6完全可以在不上梯子的情况下跑到物理上限(确信🤔难怪我这几天可以不上梯子爽各种玩意,从guilded drive到自建网站,原来因为我开了好几天ipv6啊(迫真🤔只有跑到物理上限,单线程还是得加速(恼🤔

顺便我把最近买的几台vps也配置了一顿双栈,这玩意还是比较简单的,改改配置然后重启下network或者就重启下机子就vans了🤔我某个vps居然有/64的ipv6地址用,无论如何,感谢(迫真)ipv6,我现在终于可以将114:514:1919:810设成ip地址的一部分了(大嘘🤔

thonkeqing

现在guilded的上传脚本我也想撸进cygwin最小环境🤔原版脚本通过生成另外一个bash脚本来实现split里对每一个分片进行流式文件上传的功能,但如果我把所有东西打包好了的话,其实我完全可以打包两个脚本进去,一个是流式上传单文件的,一个是利用前者进行分片上传的(确信🤔而bat调用的是后者🤔

当然,它需要将相对路径改成绝对路径啥的,现在问题来了,对分片脚本来说进入脚本后的当前路径是啥很好理解,对它要调用的那个脚本来说,它是啥就不好理解了(全恼🤔而且考虑到和discord上传脚本一样,我需要拖一个文件进去,那么它有可能被解析称相对路径,有可能被解析称绝对路径,反正我需要转换就是了🤔