如何最小化磁盘空间使用

Ste*_*fan 32 arch-linux openbox efficiency

我的一台机器是2GB EeePC Surf,这是一款资源非常有限的简洁上网本。现在有限,我还有22MB可用空间。

在它上面,我正在运行带有Openbox DE 的Arch Linux和许多需要的应用程序,以使其作为移动 PC 运行。

有哪些方法可以消除一些不必要的已用空间?

ech*_*hox 19

您可以从以下几点开始:

  • 查看系统上安装的软件包,pacman -Q并删除不需要的软件包。一个好的开始可能是附加-t 开关:

    限制或过滤输出到任何当前安装的包不需要的包。

  • 使用以下命令清理 pacman 的包缓存 pacman -Sc

  • 始终用于pacman -Rs删除未使用的包依赖项。

  • 要查找使用大部分磁盘的“大文件”和文件夹,一个很好的补充duxdiskusage. 这个小工具可让您快速浏览文件系统并查看文件夹磁盘使用情况的图形表示。

  • [`ncdu`](http://dev.yorhel.nl/ncdu/scr) 是一个很酷的命令行替代`xdiskusage`。尽管如此,[Baobab](https://wiki.gnome.org/Apps/Baobab) 是迄今为止最好的图形应用程序。 (4认同)
  • 为了清理 `/` 上的空间,我发现 [`pacgraph`](https://www.archlinux.org/packages/community/any/pacgraph/) 非常有用。它可以按大小对已安装的软件包进行排序,因此您可以更好地优先考虑要删除的内容。(它甚至可以绘制 SVG 依赖图,但仅在命令行中很有用。) (3认同)

fdm*_*ion 13

警告:这些想法仅适用于精通 Linux 整体和 Arch Linux 的用户。

如果你愿意涉足危险的领域,你可以将基本的 Arch 安装精简到小于 500MB。这需要做一些非常危险的事情:

  1. 删除所有不必要的语言环境(已经涵盖)
  2. 删除运行系统不需要的任何固件文件(从/usr/lib/firmware
  3. 删除运行系统不需要的任何内核模块(从/usr/lib/modules/...
  4. 删除任何.a文件/usr/lib(仅当您从不使用系统编译软件时。注意:这包括使用makepkg
  5. 删除所有内容/usr/include(仅当您从不使用系统编译软件时)
  6. /usr/share/doc和删除不需要的文件/usr/share/info
  7. (非常糟糕的想法,除非可能用于服务器)从 /usr/share/man
  8. (也是一个坏主意)从不需要的终端描述符/usr/share/terminfo和不需要的时区文件中删除/usr/share/zoneinfo
  9. (危险)strip *在包含可执行二进制文件(/usr/bin/usr/sbin)的所有文件夹上运行
  10. (在极端情况下)使用诸如upx压缩较大二进制文件的工具(Samba 二进制文件非常适合这种情况,因为它们往往非常大,因为它们通常是静态编译的。)还要注意,使用upx意味着整个未压缩的二进制文件必须适合RAM 在执行期间,因此对 RAM 低的系统感到厌烦。

在您执行任何此操作之前,请对您的系统进行完整备份。幸运的是,Linux 使这相对容易——如果您可以连接和安装外部卷(例如 USB 驱动器),您可以执行诸如cd / && tar -cf /mnt/usb/mySystem.tar /备份整个系统之类的操作。

再次请注意,除非您对 Linux 内部结构和 Arch Linux具有深入的知识、经验和理解,否则我实际上并不建议您执行上述操作(尤其是 7 到 9)。使用我列出的几乎任何文件都可能以可怕的方式损坏系统,因此您已被警告。如果您不知道您的系统是否需要某个固件文件、模块等,请在弄乱它之前进行研究。(请注意,删除系统所需的内核模块可能会导致系统无法启动,或者系统没有键盘/网卡/声音/显示器/等支持,或其他各种无法解释的行为。)

另请注意,任何软件包升级都可以并将恢复您在上面删除的许多文件。如果您决定走这条路线,您可能希望最终编写删除不需要的文件的脚本,并在每次主要软件包升级后运行您的脚本。(例如:升级内核将带回所有内核模块,并且通过依赖项升级 linux-firmware 包将带回所有固件/usr/lib/firmware。)

最后,请密切注意/var/log日志文件会随着时间的推移而增长。您可以通过rm *\@*.journal在您的日记文件夹中执行类似操作来删除过去的日记,但保留当前的日记。

我已经使用这些技术成功地在 512MB 磁盘模块设备上运行了 NAS 服务器数月,但是它们仍然不适合胆小的人。(我还使用 LinuxFromScratch 在仅 128MB 的存储空间中构建了一个类似的项目,但那是另一回事了......)


编辑/添加:

您可以使用以下几种方法来尝试获得一些额外空间:

  • 摆脱libgo. 该libgo库附带gcc-libs并且 AFAIK 仅由用 Go 语言编写的应用程序使用。我想不出我使用的任何需要该库的应用程序。在我的系统上,它的大小为 40MB。当你想减肥时,那是很大的空间。我已经从我的“迷你”安装中删除了它,对我所做的任何事情都没有不良影响(但同样,那就是我,YMMV!)

  • 收缩libicudata.so。在我的系统上它是 27MB。它基本上是压缩到库对象中的大量 unicode/locale 数据。有一个在线工具可以制作此文件的较小版本,但尚未针对当前版本进行更新(并且您不能在新版本中使用旧文件。)我还没有尝试过手动执行此操作,但是如果你能弄清楚怎么做,你可以从这个文件中减少大约 20-22MB。

  • 如果你使用 Python,你可以通过test从 python2: 中删除库来节省 37MB 左右,rm -r /usr/lib/python2.7/test通过将它移除到 python3:可以节省大约 66MB rm -r /usr/lib/python3.6/test

  • 再次对于 Python,您可以摆脱.pyo文件和.py文件。这些.pyo文件是“优化的”文件,但 Python 从未真正使用过它们。这些.py文件是标准库的原始源代码。Python 在运行 Python 代码时通常读取的唯一文件是.pyc(python 编译的)文件。cd /usr/lib/python2.7 && find . -name "*.pyo" -exec rm -v {} \;cd /usr/lib/python3.6 && find . -name "*.pyo" -exec rm -v {} \;

  • 删除不必要的语言环境数据。有一个名为 AUR 的包localepurge可以自动执行此操作。否则,您必须在/usr/share/locale. 您需要保留自己的语言环境和locale.alias. 我在这里,在美国,保持en_USlocale.alias和消除一切剃掉约80MB。

现在,我想要看到的是一个工具,它可以分析您的系统并确定您需要哪些内核模块,以及您需要哪些固件文件。这将是“安全”清理这些文件夹的好方法......

或者,也许有人应该将使用uClibcdiet-libc类似的东西放在一起的 Arch “发行版” 。那可能是一个有趣的暑期项目。:-)

  • **re:软件包升级可以并且将会恢复您删除的许多文件**。通过使用 `NoExtract` 定义(可以定义多次)扩展 /etc/pacman.conf,您可以永久解决该问题。仅更新 Realtek 网卡驱动程序的一个示例:`NoExtract = usr/lib/firmware/* !usr/lib/firmware/rtl_nic/*` (3认同)
  • 我也有兴趣这样做..固件对我来说似乎是最大的收获,我正在尝试制作一个小型流浪盒,因此只需要在virtualbox上运行arch所需的固件......有没有一种简单的方法可以找到出需要什么固件? (2认同)
  • `find /usr/lib/firmware -atime +30` 会找到在 30 天内未被访问的固件文件。删除这些文件应该是安全的。 (2认同)

mis*_*ist 6

TLDR

journalctl --vacuum-size=100M #remove all logs, only retain 100mb
pacman -Scc #remove all package installation files (obsolete and current)
pacman -S bleachbit
bleachbit -c system.*
Run Code Online (Sandbox Code Playgroud)

首先,系统上有什么大不了的

du -d1 -h / 2>/dev/null | sort -h
Run Code Online (Sandbox Code Playgroud)

这显示了最大目录的排序列表,/ 您可以向下执行两个级别:

du -d2 -h / 2>/dev/null | sort -h
Run Code Online (Sandbox Code Playgroud)

我的结果是:

0       /proc
0       /sys
0       /tmp
12K     /dev
12K     /srv
16K     /lost+found
632K    /run
4.3M    /boot
13M     /opt
15M     /etc
75M     /root
93M     /home
2.4G    /var
3.2G    /usr
221G    /mnt
227G    /
Run Code Online (Sandbox Code Playgroud)

我忽略/mnt(因为这是一个外部驱动器)两个目录:varusr. 让我们看看里面是什么:

du -d1 -h /var /usr 2>/dev/null | sort -h
Run Code Online (Sandbox Code Playgroud)

然后,再深入一点:

du -d1 -h /var/log /usr/share /usr/lib /var/cache 2>/dev/null | sort -h
Run Code Online (Sandbox Code Playgroud)

让我们从日志开始

我有 717mb 的/var/log.

我不喜欢随机删除目录,所以让我们用干净的方式来做:

$ journalctl --disk-usage
Archived and active journals take up 728.7M on disk.
Run Code Online (Sandbox Code Playgroud)

让我们只留下 100mb 的日志:

journalctl --vacuum-size=100M
...
Deleted archived journal /var/log/journal/ba5391...b.journal (8.0M).
...
Vacuuming done, freed 616.6M of archived journals on disk.
Run Code Online (Sandbox Code Playgroud)

有关如何在此处配置 journalctl 的更多信息。

套餐

我有660M /var/cache/pacman。它是 1.8gb,但我跑去pacman -Sc删除未使用的包。让我们删除其余的:

pacman -Scc
Run Code Online (Sandbox Code Playgroud)

/usr/share/locale

许多用户确实删除了它,或者至少清理了它。但我可能是一个问题。但是结帐漂白位(下一段)。

漂白剂

自动清洁器。会删除很多东西,但因为它主要是语言环境。

$ pacman -S bleachbit
$ bleachbit -p system.*
Disk space to be recovered: 488.8MB
$ bleachbit -c system.*
Run Code Online (Sandbox Code Playgroud)

您可以查找更多要删除的内容:

bleachbit --list
bleachbit -p thunderbird.*
Run Code Online (Sandbox Code Playgroud)

  • 在相当小的 Arch Linux 64 位安装中,bleachbit 软件包的总安装大小为 209.70 MiB:“总安装大小:209.70 MiB” (2认同)