课题:
- 如果没有U盘,window 和 mac 本地计算机之间如何传输大量文件?
- 为什么要用 pnpm?硬链接、软链接是什么?
起因
事情是这样的,最近自己的办公设备,从thinkpad 更换到了macbook pro14,因为m1 芯片的强悍性能,工作效率都有了很大提升,甚至每天背着回家都不嫌累了,这不,昨晚照常早早的回到家,做好饭,打开电脑看着电影,突然想起来之前电脑上还有很多项目代码没迁移,gitlab 上的就不说了,直接clone 下就好了,剩下的都是一些历史项目老代码绝版的~,手头有U盘和移动硬盘但是 mac 没有 usb 接口,转接头也在公司,而且这个硬盘还不能直接供mac 访问,还要用额外的软件处理格式。。,嗯想了一下,手头可行的方案大概有这些。
快传网站
之前偶尔用过奶牛快传来传输压缩包文件,当时是因为内网原因某些 npm 包下不下来,所以同事用这个网站传给我的,不过那个太慢来,限制也多,而且这种方案都要把自己文件走一遍他们服务器的,不适合传输隐私文件,不太行。pass
局域网共享
我记得一般公司内网都有局域网共享,来存储访问共享文件夹,而且可操作复制到本地,那么 mac 和window 之间是否支持这种方式呢?一通查找下来发现也是可以的(开心),那么就试一下看看吧。
首先,保证window 和 mac 设备在同一个网络下,最简单就是连接同一个 wifi,找到要共享的文件夹,右击 => 属性 => 共享 => 勾选“共享此文件夹” => 选择共享用户,默认 Everyone => 应用、确认。到这一步,该文件夹就被配置为共享文件夹了,在当前局域网内的其他设备均可以通过此设备的 ip + 用户账号密码来进行访问了。
mac 下打开 Finder(访达), 菜单栏 => 前往 => 连接服务器 => 输入 smb://ip地址 => 连接 => 如果链接成功则需要输入设备账号密码来进行验证,通过后就会在Finder 的侧边栏看到一个新的设备选项了,打开就能看到之前共享的文件夹了,可以像普通文件一样来访问和移动。
事情到这里我以为可以愉快到复制粘贴了,然而发现项目实在太多,大大小小几十个,最糟心到是很多项目里都有node_modules 文件夹,代码才几M,node_modules 却有 200+M,这些包文件因为没能复用,所以基本上每个项目都单独保存了一份,好吧,现在只能先把 node_modules 删除掉了,然后再移动项目代码,这样就很快了。
本来以为事情已经完美结束了,今天却发现一个意外的问题,用过 M1 的同学可能听说过 ssd swap 这个概念,它是 macos 系统同内存规格下比 window 系统更加流畅的原因之一,当系统应用占用过多,内存不够时 window 会有明显的卡顿,macOS 系统却好很多,因为此时它会将暂时不用的应用缓存从内存中转移到 ssd 中,给内存腾出空间。
这个过程是无感知的所以你会发现明明开启了多个大型应用理论上早就超出了内存大小,可是依然不会有明显的卡顿,就是这个原因,特别是随着 ssd 性能的增强以及M1 芯片架构的改变,这个特性被更好的使用了,一方面这是个好事情,充分利用了ssd 性能以更小的内存换来比以往更好的使用体验,但是事情都是有两面性的,swap 的原理意味着它将带来更大的ssd 读写量,而一般 ssd 是有使用寿命的,也就是它的全盘写入次数是有上限的。
硬盘的寿命一般用 TBW (最大写入量)来表示,1T 规格的 ssd固态通常标称的保修寿命为 600TBW,也许你注意到了这里说的是保修寿命而不是使用寿命,是的反正大家都说实际寿命要远远大于保修寿命,谁知道呢。我就姑且按照 1T 600TBW 来算,我512GB 的硬盘就是 300TBW 的标称写入量,本来这是足够用的了,按照普通人的使用习惯,甚至我作为开发人员办公加日常娱乐全天10小时的使用强度来说用个10年都没问题,这是我根据过去50天来的使用习惯统计而来的,最近一次统计是2月1号,平均每个月3T, 3*12 = 36T/年,将近十年的寿命。
但是昨晚一通操作之后,今天在公司查了一遍发现 swap量在一周内增加了 6T(1T==1024GB),很恐怖哎,实在想不明白,怀疑是昨晚文件操作引起的数据读写激增,可能性还是挺大的,一是我没有对文件进行压缩,所以磁盘要读取文件数量并且串行处理,比单个压缩文件要消耗磁盘;二是node_modules 文件可能有遗漏的没有删除 那里面文件居多树形组织复杂度很高,对文件的索引建立过程肯定也很消耗磁盘。
怀疑归怀疑,但是这6T 的大小也实在是匪夷所思 我的项目虽然多但是 1G 都不到的,swap 能达到 6144G 就很神奇,罢了罢了,暂时没有眉目,先记录下来。
pnpm 可以做什么
当时我就在想,如果我的项目都用的 pnpm 来管理的包,node_modules 只完整的保存了一份,当需要批量备份代码的时候就直接压缩个包就行了,不需要再单独删除每个项目缓存的包文件了,省心很多啊。