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

rih*_*han 55 disk-usage

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

另一个考虑是我在 MySQL 数据库服务器上工作。服务器本身安装在根目录中,所以我不想冒丢失任何数据的风险。

请给我一些提示来帮助解决这个问题。

hom*_*and 61

我通过删除旧的标题和图像成功清除了 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
Run Code Online (Sandbox Code Playgroud)

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

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

参考

  • @SonicSoul 我最终按照以下答案之一 (https://askubuntu.com/a/778442/333806) 的建议做了。基本上,运行 `uname -r` 来查找当前内核并注意不要删除它。如果`homebrand` 提供的检查哪些软件包将被清除的命令没有显示当前内核,那么你应该安全地运行他提到的清除命令。 (6认同)
  • apt-get 命令中的选项“-y”并不是真正必要的。如果省略它,apt-get 将询问您(仅一次)是否应删除所有管道包。恕我直言,最好不要使用“-y”,它为您提供了多一种检查的可能性(除了上面提到的第二个命令之外)。对我来说,这在根分区上释放了 15GB! (4认同)
  • 命令 `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 ` 试图删除我系统中当前安装的内核版本。小心不要使您的系统无法启动。 (3认同)

Ame*_*Jah 49

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

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

    运行此命令: sudo apt-get clean

  2. 将 /home 挂载点移动到不同的驱动器。以前,我的主文件夹位于根驱动器上。所以我将我的主文件夹移动到单独的驱动器。这帮助我减轻了根挂载带来的压力,因为大多数应用程序将它们的数据存储在 /home/user_name/ 文件夹中。阅读如何将主文件夹移动到单独的驱动器。

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

  • sudo apt-get clean 释放了比预期更多的空间,+1 (11认同)

小智 30

使用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}'
Run Code Online (Sandbox Code Playgroud)

  • 现在这是一个非常有用的单线。非常适合快速总结最大的安装包。来我的点文件吧! (2认同)

cma*_*.fr 20

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

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
    journalctl --rotate
    journalctl --vacuum-time=1s

    ## Show free space
    df -Th | grep -v fs
}
Run Code Online (Sandbox Code Playgroud)

  • 好的。开发人员可能还想[删除他们未使用的 docker 镜像](https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes):`docker system prune` (2认同)

sha*_*anu 15

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.
Run Code Online (Sandbox Code Playgroud)

  • 你不提供任何解释。如果有人只是复制/粘贴您的代码,那么系统将在没有警告的情况下关闭,可能会导致数据丢失。请不要在没有任何解释的情况下提供命令。-1 (25认同)
  • 为什么需要检查文件系统? (10认同)

pHe*_*iOn 14

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

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

我的首选方法主要是来自penreturns 的这个答案,它被分解为相当简单易懂的步骤:

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

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 的空间。


zor*_*.cz 12

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

find / -type f -size +50M -exec du -h {} \; | sort -n
Run Code Online (Sandbox Code Playgroud)

它找到所有大于 50 MBdu -h的文件,并且“ ”创建一个更好的文件列表和"sort -n“管道后按文件大小数字排序的列表。

  • 如果您想清理 / 下的空间,请添加 -mount 例如。将上面更改为“find / -mount -type ...”以限制 / 分区上的文件(不列出 / 下安装的其他分区/目录上的文件) (3认同)

小智 11

对我来说,问题在于悬空且未使用的 Docker 镜像和卷。

我使用以下命令来查找可以回收多少空间:

docker system df
Run Code Online (Sandbox Code Playgroud)

接下来,如果您打算仅修剪悬空图像:

docker system prune 
Run Code Online (Sandbox Code Playgroud)

如果你想全力以赴进行深度清洁,那就用力修剪:

docker system prune -af --volumes
Run Code Online (Sandbox Code Playgroud)

我回收了大约 70 GB 的空间。我的日常工作涉及大量与 Docker 相关的工作。


hwj*_*wjp 9

按照Ubuntu 社区文档的说明,我发现了一个巨大的垃圾文件——它看起来像是 /var/log/syslog.1 的备份,大概是有什么东西在向 syslog 喷射大量输出......

找到它的命令是:

sudo find / -size +1G
Run Code Online (Sandbox Code Playgroud)

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


Jan*_*Jan 1

您无法更改包管理器安装应用程序的路径。大多数应用程序文件保存为/usr. 如果您想恢复根分区上的空间,移动/usr到其他分区是一个可能的解决方案。

来自评论:

  • 复制时保留权限,即如果您不确定文件管理器将做什么,最好使用命令行。

  • 正确的方法是将新的文件系统安装到 /usr 或使用mount --bind. 目前尚不清楚符号链接的工作效果如何。