“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
在Windows宿主机上回收VirtualBox虚拟机的空闲磁盘空间
前言
用VirtualBox跑虚拟机,最烦人的一件事就是:你在虚拟机里删了一堆文件,明明应该腾出不少空间,结果回头一看宿主机上的.vdi虚拟磁盘文件,大小纹丝不动。这是为啥呢?说白了,虚拟机里的“删除”只是把文件标记为可覆盖,数据还在磁盘上占着位置。宿主机看到的是整个虚拟磁盘文件,它可不知道哪些块是“空的”。
要真正把空间还给宿主机,我们需要手动把虚拟机里那些被标记为“空闲”的磁盘块全部用零覆盖掉,然后让VirtualBox去压缩这些全是零的块。这篇文章就是手把手教你干这个活。
准备工作
你需要什么
- 一台运行Linux的VirtualBox虚拟机(我假设你用的是常见的发行版,比如Ubuntu、Debian、CentOS之类的)
- 一个Windows宿主机(用来跑
VBoxManage.exe) - 虚拟机里装了
zerofree工具(后面会讲怎么装) - 能编辑GRUB引导参数
- 基本的命令行操作能力
第一步:安装zerofree
zerofree是一个小工具,专门用来把文件系统里未被使用的块用零填充。它比直接dd if=/dev/zero of=...要高效得多,因为它只处理真正空闲的区域,不会把整个磁盘写一遍。
在虚拟机里执行:
# Debian/Ubuntu系
sudo apt update
sudo apt install zerofree -y
# RHEL/CentOS系
sudo yum install epel-release -y
sudo yum install zerofree -y
装完之后别急着跑,直接运行会报错,因为文件系统必须是只读模式才能用这个工具。
第二步:让根文件系统以只读方式挂载
zerofree要求目标分区是只读挂载的。如果你要清理的是非根分区(比如/home单独分区),直接mount -o remount,ro /dev/sdX就行。但如果是根分区/,你没法在系统运行的时候把它重挂为只读,因为系统本身在读写它。
最靠谱的办法:启动时直接进入单用户模式,把根挂成只读。具体做法是修改GRUB引导参数。
编辑GRUB配置
sudo nano /etc/default/grub
找到这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
改成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/bin/bash"
这里加上的init=/bin/bash意思是让内核启动后直接运行bash shell,而不是正常的init系统(systemd或sysvinit)。这样文件系统会被挂载,但因为没有init进程去执行挂载脚本,根分区默认就是只读的。
更新GRUB
sudo update-grub
如果用的是旧版系统,可能是:
sudo grub-mkconfig -o /boot/grub/grub.cfg
重启进入只读模式
sudo reboot
虚拟机重启后,你会直接进入一个bash shell,没有登录提示,没有服务,只有命令行。这时候根文件系统是只读的。
验证一下:
mount | grep " / "
输出里应该能看到ro字样,比如:
/dev/sda1 on / type ext4 (ro,relatime)
如果显示的是rw,说明没生效,检查一下GRUB参数有没有写对。
第三步:运行zerofree
现在确定根是只读的,就可以跑zerofree了。先确认你的根分区设备名:
lsblk
通常第一块磁盘是/dev/sda,根分区可能是/dev/sda1或者/dev/sda2。用df -h也能看到。
然后执行:
zerofree -v /dev/sda1
解释一下参数:
-v:verbose模式,显示进度。没有这个参数就只能干等。/dev/sda1:目标分区,根据你的实际情况改。
这个命令跑多久?完全取决于你的虚拟磁盘大小和空闲空间量。一个50GB的磁盘,如果里面有一半是空闲的,可能跑个十几分钟到半小时。如果磁盘很大(比如200GB+),那就去泡杯咖啡再看。
你会看到输出类似:
zerofree: scanned 1024000 blocks, 512000 were zeroed
每一行都在告诉你扫描了多少块,其中多少块被写成了零。
等到命令执行完毕,回到bash提示符,就说明搞定了。
第四步:正常启动系统
zerofree跑完后,你需要让系统正常启动。因为当前是在bash shell里,没有init进程,所以直接执行:
exec init
这会启动系统的init进程,继续正常的引导流程。系统会像平时一样启动,进入登录界面。
登录进去之后,别忘了把GRUB参数改回来,否则每次启动都会进bash shell。
恢复GRUB参数
sudo nano /etc/default/grub
把刚才加的init=/bin/bash删掉,恢复成原来的样子:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
然后更新GRUB:
sudo update-grub
第五步:关闭虚拟机
现在虚拟机里的空闲空间已经被零填满了,但宿主机上的.vdi文件大小还没变。要让VirtualBox知道哪些块可以压缩,虚拟机必须处于关闭状态(不能是保存状态,也不能是休眠)。
sudo shutdown -h now
或者直接在VirtualBox窗口里点“关闭虚拟机” -> “关机”。
第六步:在宿主机上执行压缩命令
这一步在Windows宿主机上操作。打开命令提示符(cmd)或者PowerShell,确保VBoxManage.exe在PATH里。通常它安装在C:\Program Files\Oracle\VirtualBox\。
找到虚拟磁盘路径
先确认你的.vdi文件在哪里。比如我的虚拟机叫Ubuntu20,磁盘文件可能在:
C:\Users\你的用户名\VirtualBox VMs\Ubuntu20\Ubuntu20.vdi
执行压缩
VBoxManage.exe modifymedium "C:\Users\你的用户名\VirtualBox VMs\Ubuntu20\Ubuntu20.vdi" --compact
注意:modifymedium这个命令在旧版VirtualBox里叫modifyvdi或者modifyhd,新版统一成了modifymedium。如果你用的是老版本,试试:
VBoxManage.exe modifyhd "路径" --compact
压缩过程
这个命令会读取.vdi文件,找到那些全是零的块,然后把它们从磁盘镜像里移除。压缩时间取决于磁盘大小和空闲比例。一个40GB的磁盘,如果里面有20GB是零,可能跑10-20分钟。
输出类似于:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
压缩完成后,去文件管理器里看看.vdi文件的大小,应该明显变小了。
一些补充说明和踩坑经验
关于zerofree的其他用法
如果你只想清理非根分区(比如/home单独分区),可以不用改GRUB,直接:
sudo mount -o remount,ro /dev/sdX
sudo zerofree -v /dev/sdX
sudo mount -o remount,rw /dev/sdX
但注意:如果该分区上有任何进程在读写,remount,ro会失败。所以最好在单用户模式下操作。
为什么不用dd?
很多人会想到用dd if=/dev/zero of=/bigfile bs=1M,然后删掉大文件。这个方法也能用,但有几个缺点:
- 它会写满整个磁盘剩余空间,如果磁盘很大,时间很长。
- 如果磁盘剩余空间特别大(比如几百GB),dd可能会把宿主机磁盘也撑爆,因为虚拟机里的写操作会先膨胀虚拟磁盘文件。
- 需要确保大文件被正确删除,并且sync一下。
zerofree只处理文件系统里标记为“空闲”的块,更精准,也更快。
VirtualBox的压缩机制
--compact参数并不是对所有虚拟磁盘格式都有效。它只支持动态分配的VDI和VHD格式。如果你用的是固定大小的VDI(Fixed size),或者VMDK格式,这个命令可能不起作用。创建虚拟机时,如果选了“预分配完整大小”,那就没法压缩了。
关于性能
zerofree在只读文件系统上运行,理论上不会损坏数据。但任何涉及磁盘低级操作的工具都有风险,建议操作前备份重要数据,或者给虚拟机拍个快照。
如果zerofree报错
常见错误:
zerofree: /dev/sda1: filesystem is not mounted read-only:文件系统不是只读的,检查挂载状态。zerofree: /dev/sda1: failed to open: Device or resource busy:有进程在使用该分区,确保没有其他挂载点。
总结
整个流程可以浓缩为:
- 虚拟机内装
zerofree - 改GRUB参数,重启进入只读bash
- 运行
zerofree -v /dev/sdX exec init正常启动- 恢复GRUB参数,更新GRUB
- 关机
- 宿主机上执行
VBoxManage.exe modifymedium "路径" --compact
这样一套操作下来,虚拟磁盘文件就能瘦身成功。这个过程虽然有点折腾,但比起直接重装虚拟机或者手动删文件,已经省事太多了。而且搞过一次之后,下次就轻车熟路了。
如果你经常需要回收空间,可以考虑写个脚本,把zerofree步骤自动化。但改GRUB那一步还是得手动操作,因为涉及到系统引导。
希望这篇文章能帮到你。如果有任何问题,欢迎在评论区交流。