根驱动器磁盘空间不足。如何释放空间?


35

我正在使用Ubuntu 11.04,我想释放根目录中的一些空间,该空间已过载。我特别想更改用于安装应用程序的路径(它们将直接安装到根驱动器)。

另一个考虑因素是我正在使用MySQL数据库服务器。该服务器本身安装在根目录中,因此我不想冒险丢失任何数据。

请给我一些提示,以帮助您解决此问题。

Answers:


36

最近我面临类似的情况。安装了太多应用程序,它们开始使用我的root挂载空间。我列出了我遵循的几个步骤,希望您也可以使用相同的步骤。

  1. 清理apt-get缓存。以下命令将从apt-get缓存目录中删除所有下载的deb文件。

    运行以下命令: sudo apt-get clean

  2. 将/ home挂载点移动到其他驱动器。以前,我的主文件夹位于根驱动器上。因此,我将主文件夹移至单独的驱动器。这帮助我减轻了根安装的压力,因为大多数应用程序将其数据存储在/ home / user_name /文件夹中。了解如何将主文件夹移动到单独的驱动器。

  3. 增加根分区的大小我知道这是非常明显的答案。但是请相信我,我们的数据需要随着时间而变化。我以为20 GB / root挂载就足够了,但是随着一年的时间,我重新调整了root挂载的大小并增加到50 GB。


8
sudo apt-get clean释放了比预期更多的空间,+ 1
btk

提防apt-get clean甚至删除已安装的软件包。您可能希望保留这些内容,以防升级失败。
timss,2015年

我清理了缓存,并清理了10 Gb!+1
Numeri说恢复莫妮卡

28

我使用以下命令通过删除旧的标题和图像成功清除了3.5 GB:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

您可以通过执行命令的第一部分来检查将清除哪些软件包:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

参考


其他技巧无济于事,但这为我节省了大约5G。谢谢。
baltasvejas 2015年

-yapt-get命令中的选项不是必需的。如果您忽略它,apt-get会(仅一次)询问您是否应该删除所有管道包。恕我直言,最好不要使用-y它,它为您提供了另一种检查的可能性(除了上面提到的第二个命令)。对我来说,这在根分区上释放了15GB!
鲍里斯·达彭(BorisDäppen)'17年

2
该命令dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge 尝试删除我系统中当前安装的内核版本。注意不要使系统无法启动。
安东尼

@安东尼yaikes!我正要尝试这个。我怎样才能确认哪些可以删除?
Sonic Soul

2
@SonicSoul我最终完成了以下答案之一(askubuntu.com/a/778442/333806)提出的建议。基本上,跑来uname -r找到当前内核,并注意不要删除它。如果提供的homebrand用于检查将清除哪些软件包的命令没有显示当前内核,那么您应该安全地运行他提到的purge命令。
安东尼

22

使用dpkg-query发现最大的包,并删除你不再需要的那些(来源):

dpkg-query --show --showformat='${Package;-50}\t${Installed-Size}\n' | sort -k 2 -n | grep -v deinstall | awk '{printf "%.3f MB \t %s\n", $2/(1024), $1}'

1
现在,这是一个非常有用的单线。非常适合快速总结最大的安装软件包。来我的点文件!
arainone '16

您可以通过wajig sizes
Pablo A

13
sudo apt autoclean  # clean /var/cache/apt/archives folder which save packages while install.
sudo apt autoremove # this command remove unused packages.

sudo shutdown -rf   # it will restart your PC immediately and check filesystem in next boot.

19
您没有提供任何解释。如果有人只是复制/粘贴您的代码,则系统将关闭而不会发出警告,可能会导致数据丢失。请不要在没有任何说明的情况下提供命令。-1
Jo-Erlend Schinstad

9
为什么需要检查文件系统?
内森·奥斯曼

10

删除旧内核版本(如homebrand所建议)可以释放大量空间,如果您还没有这样做的话。

有多种删除旧内核版本的方法,可以在以下答案中找到一系列不同的选项:如何删除旧内核版本以清理引导菜单?

我的首选方法主要是来自笔势回报的答案,将其分解为相当简单的可理解的步骤:

打开终端并检查您当前的内核:

uname -r

不要删除该内核!

接下来,在下面键入命令以查看/列出系统上所有已安装的内核。

dpkg --list | grep linux-image

查找所有低于当前内核的内核。当您知道要删除的内核时,请继续以下操作将其删除。

运行以下命令以删除您选择的内核。

sudo apt-get purge linux-image-x.x.x.x-generic

然后,当您完成清除后,答案将对“ update-grub2”说,这可能现在已经过时了:sudo update-grub应该适用于Ubuntu 14.04以后的版本。然后,他们还说“重新启动系统”(看来是这样,以便您可以看到已清理的启动菜单),因此在这种情况下没有必要。

grub引导加载程序菜单用于在主页上显示所有较早的内核版本,但现在它们被放在子菜单后面。整洁得多,但是Ubuntu / Linux的新手可能并不知道它们在那里占用了空间。

如建议的那样,不要删除当前内核,建议也保留以前的内核版本,以防万一您需要回滚到该内核。

有更快的方法可以执行此操作,但是我更喜欢此方法的简单性,主要是因为我可以理解其中的每个命令:

“我正在使用什么内核版本?我有什么内核版本?好吧,清除内核版本。”

漂洗,重复,欣赏您腾出的空间。

复制要从dpkg --list | grep linux-image终端中获得的结果中要删除的特定较旧内核的名称,然后使用sudo apt-get purge并粘贴复制的名称是相当容易的。

删除3或4个较旧的内核通常会在根驱动器中释放大约1 GB的空间。


1
除了linux-image,您还可以grep并清除linux-headers
kdopen

8

当我需要在服务器上腾出更多可用空间时,请使用以下命令:

find / -type f -size +50M -exec du -h {} \; | sort -n

它会找到所有大于50 MB du -h的文件,并"sort -n在管道制作列表按文件大小进行数字排序之后,使“ ”成为更好的文件列表。


根据系统的大小,这可能需要一些时间。用约15 GB的硬盘驱动器花了我15分钟的时间
Gabriel Fair

7

按照Ubuntu社区文档上的说明,我发现了一个巨大的垃圾文件-看起来像是/var/log/syslog.1的备份,大概是某些东西在向syslog注入大量负载...

找到它的命令是:

sudo find / -size +1G

然后.Trash删除文件夹中的任何大文件可能都可以删除...


5

这是我运行以释放根分区空间的脚本

function myclean {
    ## Show free space
    df -Th | grep -v fs
    # Will need English output for processing
    LANG=en_GB.UTF-8

    ## Clean apt cache
    apt-get update
    apt-get -f install
    apt-get -y autoremove
    apt-get clean

    ## Remove old versions of snap packages
    snap list --all | while read snapname ver rev trk pub notes; do
        if [[ $notes = *disabled* ]]; then
            snap remove "$snapname" --revision="$rev"
        fi
    done
    ## Set snap versions retain settings
    if [[ $(snap get system refresh.retain) -ne 2 ]]; then snap set system refresh.retain=2; fi
    rm -f /var/lib/snapd/cache/*

    ## Remove old versions of Linux Kernel
    # This one-liner is deprecated since 18.04
    # dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs apt-get -y purge
    # New 2 lines to remove old kernels
    dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs apt-get -y purge
    dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs apt-get -y purge

    ## Rotate and delete old logs
    /etc/cron.daily/logrotate
    find /var/log -type f -iname *.gz -delete
    sudo journalctl --rotate
    sudo journalctl --vacuum-time=1s

    ## Show free space
    df -Th | grep -v fs
}

编辑:新的两行旧内核清理程序
cmak.fr

谢谢!“旋转和删除旧日志”清除了驱动器上的几场演出。
萨塔

真好 开发人员可能还想删除未使用的docker映像docker system prune
Pablo

@Pablo一个他们看起来可能/var/crash/*.crash
cmak.fr

由于需要sudo调用该函数,因此sudo该函数内部似乎是多余的。也vacuum-time=1s可能并不总是工作,但我不知道,因为我使用真空大小,而不是:forum.manjaro.org/t/...
WinEunuuchs2Unix

2

在Ubuntu中,每个文件夹可以有自己的文件系统。这意味着您可以将任何文件夹移动到其自己的分区,另一个磁盘,甚至在远程网络上。这在主目录中特别流行,因为这意味着您可以重新安装Ubuntu,而无需更改个人设置或丢失任何文件。它在网络中也很流行,在该网络中,用户应该能够登录到不同的计算机,并且仍然可以获取其个人设置和文件。但这在许多不同的情况下很有用,例如您的情况。

应用程序没有像您建议的那样安装在特定的文件夹中。应用程序的不同部分放置在文件系统的不同部分中。例如,主程序通常位于/ usr / bin中,而配置文件位于/ etc中。在您的情况下,对于MySQL,数据库本身位于/ var中的某个位置。我认为/ var / mysql。

由于/ usr和/ var都是根文件系统中的目录,因此它们将使用根文件系统空间。但是正如我所说,您可以将它们移动到不同的文件系统。对于MySQL,您可以配置数据库的存储位置。例如,您可以轻松地将数据库移动到/home/username/.mysql/databases。


1

您不能更改程序包管理器安装应用程序的路径。大多数应用程序文件保存到/usr。如果要恢复根分区上的空间,则/usr可以使用另一个分区。

来自评论:

  • 复制时保留权限,即,如果不确定文件管理器将执行什么操作,请更好地使用命令行。

  • 正确的方法是将新文件系统挂载到/ usr或使用mount --bind。尚不清楚符号链接的工作原理。


注意移动/ usr。使用cp命令复制具有相同权限的usr文件夹。然后删除原始的/ usr文件夹,并在/上创建usr文件夹的链接。
shantanu 2011年

1
它应该有一个挂载点。没有链接。
2011年

温馨提示:许多应用程序还将二进制文件和应用程序数据安装到中/opt
内森·奥斯曼

@ george-edison好吧,有些应用程序在/opt“规则”中安装了东西。
1

1

如果您有很多单独的文件系统,则以下技巧可能很方便:挂载/一次,但这次在/ mnt下。现在,您无需查找错误的文件系统就可以完成对大文件或许多文件的所有搜索。

它还可以帮助您查找在另一个装载下隐藏的文件。



0

如果您安装了mssql数据库服务器,则可能会耗尽您的内存。运行NCurses磁盘使用情况

$ sudo ncdu / 

检查哪些文件夹和文件占用最大存储空间。mssql数据通常存储在

/var/opt/mssql/backup/

问题指出数据库需要保留。
Stephen Rauch

这个问题提到了MySql数据库,所以如果他要删除MsSQL数据库数据,那么我想这似乎是一个很公平的答案。
Yogesh '18年

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.