我随机收到此弹出通知,其中文件系统根目录的磁盘空间各不相同,并且始终小于 1GB。似乎有很多东西正在下载到根文件夹,例如软件包和其他东西。这是我的文件系统的图片:
如您所见,根目录仅剩下约 200MB,而我将大量空间(70GB)分配给了 /home,其中仍有很多可用空间。在我的根目录中,总共只有 20 GB。然后我使用 baobab 查看了哪些内容占用了所有空间,发现根目录中的 /usr 和 /var 占用了约 17GB。
我查看了这些文件夹中的内容,似乎是我安装的所有软件包和桌面应用程序,如 firefox、rstudio、python、nodejs、discord、mongodb 等。而在我的主文件夹中,我看到更多内容,例如下载、桌面和我用 mkdir 创建的文件夹。
以下是输出df -h
:
我的问题是:
- 我该如何解决这个问题?
- 为什么所有桌面应用程序和软件包都进入根目录,而不是主目录?它们应该这样做吗,还是我应该将它们下载到我的主文件夹中?
- / 和 /home 的用途和区别是什么?什么应该存储在哪里?
还有一个 Linux 初学者的问题:既然 root 是顶级目录,那么 home 不是它的子目录吗?那么为什么它们会像这里一样显示为不同的分区
答案1
通常对于桌面系统(因此没有像 Web 服务器、文件服务器或数据库服务器这样的服务器)20Gb 对 root 来说应该足够了,所以有些地方出了问题。与追踪它相关的第一件事是:
我该如何解决这个问题?
和
然后我使用 baobab 查看了是什么占用了所有空间,根目录中的 /usr 和 /var 占用了约 17GB。
找到问题 :) 我建议首先查看/var/log/
是否存在大文件。如果是,则系统会产生错误,并且可能一遍又一遍地出现相同的错误。使用或查看该文件less
,如果发现错误,请谷歌搜索。然后对文件执行清空操作。可以安全地删除此处以数字结尾的所有文件。more
tail
> {file}
其他内容:
由于 root 是顶级目录,那么 home 不是它的子目录吗?
是也不是。您可以为 中的每个目录设置分区,以便/
包括/home/
。如果您没有为其创建分区,/home/
它将包含在根目录中。
为了提升您的问题,您可以删除/home/
分区。但这并不能解决问题,只会腾出更多空间/
(请参阅https://askubuntu.com/a/117021/15811)
为什么所有桌面应用程序和软件包都进入根目录,而不是主目录?它们应该这样做吗,还是我应该将它们下载到我的主文件夹中?
这是正常的。Linux 为每个系统相关文件或系统安装文件设置了专门的位置。二进制文件进入目录bin/
。如果是系统二进制文件,则添加“s”(如sbin/
)。
答案2
有一个非常好的 GUI 应用程序可以直观地显示您的空间使用情况。它被称为磁盘空间分析器,默认情况下安装在 Ubuntu 中。它使查看占用所有空间的内容变得非常简单。如果您是初学者,它可能对您有帮助。我相当有经验,我使用它因为它很舒服。:)
我认为 20GB 的根分区对于现代桌面系统来说有点紧张。特别是当您使用 Flatpak 和 Snap 等跨发行版软件包时,因为它们需要自己的依赖项,所以它们相当大。
不幸的是,修复这个问题并不像使用 LVM 那样容易。它是安装程序中的一个选项,它允许您在以后移动和调整“分区”的大小。为了解决这个问题,我建议将您的主目录复制到外部设备并重新安装 Ubuntu。如果您想高效地利用空间,将主目录放在根目录上而不是作为专用分区是没有问题的。
应用程序不应该存储在家里,主要原因是 Ubuntu 是一个多用户系统,所以您希望安装的应用程序可供所有用户使用,而您的家应该是私密的。
Linux 用户喜欢为系统的不同部分设置不同的分区有很多好的理由。其中之一是不同的文件系统具有不同的特性,您需要不同的分区才能使用不同的文件系统。例如,如果您使用 Bit Torrent 下载大型文件,您不希望您的主目录位于 BTRFS 文件系统上,因为大型文件的连续写入会随着时间的推移使其变得非常慢。另一方面,您可能希望对 /etc 使用 BTRFS,因为 BTRFS 允许快照和恢复到以前的状态,因此如果您进行了一些错误的配置,您可以将所有内容恢复到已知的良好状态。
对于 /home 来说,无需触碰主目录即可重新安装操作系统,这很好。但对于您来说,这是不可能的,因为如果您想调整根文件系统的大小,您将需要一个新的分区表。
答案3
让我们分别回答一下每个问题:
我该如何解决(缺少可用空间)?
⇢ 最合理的方法是为根目录分配更多存储空间。不过,这可能不太容易实现,具体取决于分区在存储设备上的布局方式。
为什么所有桌面应用程序和软件包都进入根目录,而不是主目录?它们应该这样做吗,还是我应该将它们下载到我的主文件夹中?
⇢ 该/home
目录用于保存文件,而不是应用程序。理想情况下,您可以只备份/home
目录,而不必担心存储在其他位置的应用程序,因为它们都很容易被替换和/或本质上是短暂的。
/
和 的用途和区别是什么/home
?什么应该存储在哪里?
⇢/
是系统上所有设备的起点,包括存储。如果您更熟悉 Windows,则可以将其视为/
设备管理器中的“我的电脑”根元素。/home
— 根据输出df
— 是磁盘上的存储位置。Linux 系统不像 Windows 那样将分区和存储设备呈现为单独的实体。
和 …
既然 root 是顶级目录,那么 home 不是它的子目录吗?那么为什么它们会像这里一样显示为不同的分区?
⇢ 上文已经提到过这一点,但让我们来看一个直观的例子。假设您有一台计算机,其中有三个硬盘和一个 NVMe 设备。在 Windows 中,文件资源管理器中将显示 C:、D:、E: 和 F:(保持简单,忽略驱动器号分配、RAID、存储池等)。在 Linux 中,将显示为:
/
…
/dev
/dev/nvme0n1p1
/dev/nvme0n1p2
/dev/nvme0n1p3
/dev/sda1
/dev/sdb1
/dev/sdc1
…
不过,用户不会以这种方式访问这些设备位置。相反,我们会有一个启动分区、一个根分区、一个交换分区和其他挂载位置。它可能看起来像这样:
/ # On nvme0n1p2
/boot # On nvme0n1p1
/data # On sda1
/home # On nvme0n1p3
/home/victor/Torrents # On sdb1
/home/victor/Videos # On sdc1
…
在这里我们看到它/data
位于自己的磁盘上,但显示为顶级目录,仅用于种子的位置位于自己的磁盘上,并且是主目录的一部分,主目录本身主要存在于 NVMe 设备上。视频目录的设置方式与种子目录相同。
从本质上看,系统的目录结构不是分层的文件链,而是动态的设备级 API。您告诉计算机要将数据写入/home/victor/Documents/test.txt
,系统就会知道您要以允许存储和检索的方式将数据发送到 NVMe 存储设备。它会为您处理好这件事。您告诉计算机从读取数据/sys/class/power_supply/BAT0/status
,系统就会知道查询笔记本电脑中的电池(如果有)以查看它是否正在充电。
如果您已经使用 Windows 很长时间,那么需要花一点时间来理解这个概念,但是,当一切开始顺利时,您就会开始看到这种与系统硬件交互的方法带来了很多简化。