Memo

共 49 条灌水 · 4

破解 Delete All Google Photos 插件

自从有了 NAS 之后,就想把所有云的会员都取消了。但上云容易下云难

上传到 Google Photos 的时候爽的不行,结果现在会员到期了,空间直接给我爆了,还不让我发邮件。

一番搜索,发现了一个插件,可以自动化删除所有的照片:Delete All Google Photos

扩展 ID:bebhhjmapjadpdkkhbkpnpbjhkhndofl

试用版每天只能删 500 张,根本不好使啊。我直接反手一个 js 的读。

找到下面的代码段:

const R = 1e3,
  M = 1000000;
function E(i) {
  return new Promise((e) => setTimeout(e, i));
}

M 改成很大的值。

if (
  !!P &&
  (console.log("removing undo delete button and continuing", new Date()),
  P.remove(),
  (r += b),
  localStorage.setItem("num_deleted", 0),
  localStorage.setItem("last_deleted_at", new Date().getTime()),
  !(o != null && o.paid) && r >= M)
) {
  t(0, (p = !0));
  return;
}

每次 r += b 然后设置 num_deleted。改成每次 num_deleted 都设置为 0

然后开发人员模式加载扩展,直接一把梭删完,爽!

ESXi 7.0 安装时移除 VMFSL

在 ESXi 7.0 之后,安装的时候会自动创建一个很大的 VMFSL 分区:

vmfsl-example.png

安装 ESXi 时,在引导后按 Shift+O,并输入

autoPartitionOSDataSize=8192

然后回车,正常安装即可。

Seagate TurboBoost and Advanced Write Caching

传统的 HDD 以较慢的响应时间来应对较高的工作负载

  • 在 200 IOPS 时,硬盘阵列可能提供 5 毫秒的响应
  • 在 600 IOPS 时,延迟可能飙升至 40 毫秒甚至更高。

TurboBoost

TurboBoost 是在传统硬盘中加入 NAND 闪存,集成了

  • 传统的多段式缓存
  • 少量的 eMLC NAND,其特点是比消费级 MLC 的耐用性要强得多

适量的 NAND 能够满足价值需求,以足够低的成本提供最大的性能优势

76d4e14c25b23afca9840d8ce905fbd3.png

NVC:non-volatile cache

Back electromotive force(back EMF)指与电机线圈在磁场中运动产生的电流方向相反的电压。HDD 可以在断电后立即利用反电动势,将 DRAM 中的数据写入 NVC Flash 中。有了 NVC 保护的写缓存,在享受到性能好处的同时,仍然可以与关闭 write cache 同等的保护。

内置的 NOR Flash 大小:2M

5b267ab31853330f53d9e3be9dab501f.png

dm-delay 模拟慢速磁盘

速查

# 创建一个 10G 大小的 ram disk
sudo modprobe brd rd_nr=1 rd_size=1048576
sudo blockdev --getsize /dev/ram0

# 创建 delayed dm,延迟为 500ms
export RAM_SIZE=$(blockdev --getsize /dev/ram0)
echo "0 $RAM_SIZE delay /dev/ram0 0 500" | sudo dmsetup create delayed

# 重新加载参数
echo "0 $RAM_SIZE delay /dev/ram0 0 500" | sudo dmsetup reload delayed

delayed 参数

<device> <offset> <delay> [<write_device> <write_offset> <write_delay> [<flush_device> <flush_offset> <flush_delay>]]

暂停 I/O

sudo dmsetup suspend /dev/dm-0
sudo dmsetup resume  /dev/dm-0

检查 delayed 设备的 I/O 延迟

fio --name a --filename=/dev/dm-0 --bs=4k --rw=randread --ioengine=libaio --direct=1 --iodepth=1 --numjobs=1 --time_based=1 --runtime=10
fio --name a --filename=/dev/dm-0 --bs=4k --rw=randread --ioengine=sync --direct=1 --iodepth=1 --numjobs=1 --time_based=1 --runtime=10

配置 npm 与 node-gyp 镜像

npm set registry https://registry.npmmirror.com
npm set disturl https://npmmirror.com/mirrors/node

按需补充二进制下载镜像:

npm set sass_binary_site https://registry.npmmirror.com/mirrors/node-sass
npm set electron_mirror https://registry.npmmirror.com/mirrors/electron
npm set puppeteer_download_host https://registry.npmmirror.com/mirrors
npm set chromedriver_cdnurl https://registry.npmmirror.com/mirrors/chromedriver

启用 Java GC 日志轮转

java -jar ./gclog-1.0-SNAPSHOT.jar \
  -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10K \
  -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/gc-%t.log \
  -XX:+UseG1GC -XX:MaxGCPauseMillis=200

允许 perf 采集内核回溯

出现以下报错时:

Perf-based stall detector creation failed (EACCESS), try setting /proc/sys/kernel/perf_event_paranoid to 1 or less to enable kernel backtraces: falling back to posix timer.

perf_event_paranoid 设为 1:

sudo sh -c 'echo 1 > /proc/sys/kernel/perf_event_paranoid'

二分查找路径 MTU

从以太网 MTU 1500 对应的 1472 字节负载开始,按结果调整:

ping -M do -s 1472 -c 1 <ip>

修复 xfs.h 的 void 指针算术错误

Clang 编译 XFS 头文件时,void * 不能直接参与指针算术。将:

void *next = ((void *)gpr + gpr->gpr_reclen);
return next;

改为:

void *next = ((char *)gpr + gpr->gpr_reclen);
return (struct xfs_getparents_rec *)next;

使用 Git LFS 管理大文件

初始化 Git LFS:

git lfs install

追踪 ISO 并提交:

git lfs track "*.iso"
git add .gitattributes
git add file.iso
git commit -m "Add disk image"
git push