如何最小化磁盘空间使用


29

我的其中一台机器是2GB EeePC Surf,这是一款资源非常有限的整洁上网本。如此有限,以至于我现在还有22MB的可用空间。

在它上面,我正在运行带有Openbox DE的Arch Linux,以及要用作移动PC的大量所需应用程序。

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


@Stefan有多少内存?(只是想知道将/ tmp之类的东西放在ram中是否可行)
xenoterracide 2010年

1
@Stefan也...如果您愿意走实验路线... btrfs应该支持压缩文件系统(或打算去?)也许可以检查一下
xenoterracide 2010年

@stefan还du -sh /可以查看您大部分空间的使用位置。
xenoterracide

@ xeno,490MB RAM,是du -sh /*吗?
Stefan 2010年

@Stefan,所以......哎呀...您可以…… cd /奔跑du -sh *并向下钻探...(您实际上没有足够的内存来存储东西)
xenoterracide 2010年

Answers:


19

您可以从以下几点开始:

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

    将输出限制或过滤为任何当前安装的软件包都不需要的软件包。

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

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

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


pacman -cc清理整个缓存,包括我认为已安装的软件包。通常不建议这样做,因为您以后可能希望将其用作备份。
xenoterracide

@xeno,我已经在桌面上为安装了目录--cachedir,因此我不需要保留任何pkg文件。
Stefan 2010年

3
为了清理上的空间/,我发现pacgraph确实很有用。它可以按大小对已安装的软件包进行排序,因此您可以更好地确定要删除的软件包的优先级。(它甚至可以绘制SVG依赖图,但仅从命令行即可使用。)
Anko 2014年

4
ncdu是的不错的命令行替代xdiskusage。迄今为止,Baobab是迄今为止最好的图形应用程序。
Zaz

10

警告:这些建议仅适用于对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并且仅以Go语言编写的应用程序使用AFAIK。我想不到我使用的任何需要该库的应用程序。在我的系统上,它的大小为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“发行版” 。那可能是一个有趣的夏季项目。:-)


2
我也对此感兴趣。.固件对我来说似乎是最大的收获,我正在尝试制作一个小型的无用盒,因此只需要在virtualbox上运行arch所需的固件...有没有一种简单的方法可以找到需要什么固件?
汤姆B

警告:只是尝试过upx,它不能与所有类型的可执行程序配合使用,例如:它离开了mysqld和mongodb segfaulting
Ayush

3
回复:软件包升级可以并且将还原您删除的许多文件。通过使用NoExtract定义(可以定义多次)扩展/etc/pacman.conf,可以永久解决该问题。仅更新更新Realtek nic驱动程序的一个示例:NoExtract = usr/lib/firmware/* !usr/lib/firmware/rtl_nic/*
Pro Backup

find /usr/lib/firmware -atime +30会发现30天内无法访问的固件文件。删除那些文件应该是安全的。
user202729

5

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.*

首先,系统上有什么大功能

du -d1 -h / 2>/dev/null | sort -h

这显示了最大目录的排序列表。/ 您可以向下两级进行:

du -d2 -h / 2>/dev/null | sort -h

我的结果是:

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    /

我忽略了/mnt(因为这是外部驱动器),请牢记两个问题:varusr。让我们看看里面是什么:

du -d1 -h /var /usr 2>/dev/null | sort -h

然后,再深入一点:

du -d1 -h /var/log /usr/share /usr/lib /var/cache 2>/dev/null | sort -h

让我们从日志开始

我有717mb /var/log

我不喜欢随机删除目录,因此让我们以一种简洁的方式进行操作:

$ journalctl --disk-usage
Archived and active journals take up 728.7M on disk.

让我们只留下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.

有关如何在此处配置journalctl的更多信息,请参见此处

配套

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

pacman -Scc

/ usr / share / locale

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

漂白剂

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

$ pacman -S bleachbit
$ bleachbit -p system.*
Disk space to be recovered: 488.8MB
$ bleachbit -c system.*

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

bleachbit --list
bleachbit -p thunderbird.*

在最低限度的Arch Linux 64位安装中,bleachbit软件包的总安装大小为209.70 MiB:Total Installed Size: 209.70 MiB
Pro Backup

1
提示:如果du -xkd1/目录中进行操作,它将不会下降到其他安装点。
fdmillion

3

在装有Ubuntu的Eeepc的4GB磁盘上,它有助于删除一些区域设置文件(从/ usr / share / locale)和Gnome帮助文件(从/ usr / share / gnome / help /)。两者都安装了我不使用的语言。不过,不确定Arch Linux是否甚至安装了所有这些文件。


是的... du -hs /usr/share/locale大约300MB ...我可以只rm -rf使用不需要的文件吗?
Stefan 2010年

2
@Stefan wiki.archlinux.org/index.php/Locale如果您编辑/etc/locale.gen并重新运行locale-gen,则预编译的语言环境应该更少。如果要以自动化方式释放更多空间,则可能也要尝试aur.archlinux.org/packages.php?ID=11975。(但是它不受支持,并且如果它破坏了系统,您就可以继续使用。)
短暂

1
localepurge是一个脚本,用于删除不必要的本地化所浪费的磁盘空间。首先编辑/etc/locale.nopurge :)第一次运行它时,它清理了约300 MB,每两个月清理了几十MB。在AUR中可用。
tuk0z

0

我建议自动查看您自己的旧文件,看看是否有必要将其删除。这可以用两件事来完成。编写find命令以查找非常旧的文件的人。并使用此输出(可能是管道)lograte编写脚本以存档三个月前的文件,并删除存档中三个月以上的文件,并在删除前将邮件发送到1天。这样可以确保您没有丢失任何重要文件。因此,最终您将需要以下命令来完成上述任务:

find , | , logrotate , mail, crontab

我不会用汤匙喂你。我之前已经做到了这一点,但在此方面取得了很大的成功,后来又被废弃了,因为我们决定继续nagios进行监视,因为它已经过调整,可以在corp服务器中完成这种工作。我认为,如果mail尚未为您配置命令,您可能会发现最困难的休息应该是直接的。所有这些都需要通过bash脚本并将其放入cron作业中并每隔x天运行一次来​​完成。学习bash脚本,这不仅会非常有用,而且* nix可以使您的生活更轻松。因此,请使用您最喜欢的Internet搜索引擎并阅读上述命令和bash脚本。并将它们绑在一起并进行测试。一旦满意就可以正常使用。我保证这样做会很有趣。如果您以前没有做过这种事情,将会学到很多东西。

  • 希望能有所帮助

1
从我的经验来看,我发现大多数磁盘占用空间不是与操作系统相关的文件,而是一段时间内积累的我自己的文件,因此,我提出了以上建议。
bagavadhar 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.