Linux 文件系统:挂载点与文件夹?

Sto*_*row 4 linux unix mount filesystems

我想请求社区帮助理解“挂载点”与文件夹的 *nix 概念。我曾尝试阅读诸如thisthisthis 之类的背景阅读材料,但这个概念对我来说仍然很模糊。我会尽量问这个问题,使它不是第一个链接的重复。

披露:我的计算基础几乎完全在 DOS/Windows 环境中,这可能导致我难以理解这一点。

第一个问题:什么是挂载点?(我已经阅读了关于它是什么的各种解释,也许在回答这个问题时给出的解释会有所不同)。

我也想用一个具体的例子。以下输出来自我使用的 Linux 机器:

>df -k
Filesystem                        1K-blocks      Used Available Use% Mounted on
/dev/mapper/fedora_localhost-root 239727136 215317088  12209500  95% /
devtmpfs                            8145236         0   8145236   0% /dev
tmpfs                               8166384       160   8166224   1% /dev/shm
tmpfs                               8166384       796   8165588   1% /run
tmpfs                               8166384         0   8166384   0% /sys/fs/cgroup
tmpfs                               8166384        76   8166308   1% /tmp
/dev/sda1                            487652    150127    307829  33% /boot

>ls -l /dev/mapper/fedora_localhost-root 
lrwxrwxrwx 1 root root 7 Jan  3 18:12 /dev/mapper/fedora_localhost-root -> ../dm-0

>ls -l /dev/dm-0
brw-rw---- 1 root disk 253, 0 Jan  3 18:12 /dev/dm-0
Run Code Online (Sandbox Code Playgroud)

让我试着用语言表达我的理解,也许回答者可以理解和纠正我的误解

从我的阅读中,我认为Linux“使像硬盘驱动器这样的物理设备可用作‘块设备’,看起来像位于 /dev 下某处的文件”,例如/dev/dm-0. 这样对吗?

根据我的阅读,我的理解是“挂载点”就像给定分区的“最顶层目录”,类似于C:\D:\在 DOS 术语中。那正确吗?

我不明白的一件事是:我的示例显示/dev/dm-0"mounted on" /。但是,是不是/ “顶级目录”?我的意思是每个可访问的文件夹都一定是其中的某个子文件夹,/不是吗?例如/home/var等都是“下”文件夹,/因为它们以 为前缀/,对吗?我的意思是:如果我对“挂载点就像给定分区的最顶层目录”的理解是正确的,那么您怎么可能拥有多个挂载点,因为最顶层的挂载点/已经用完?

与上段相关:/dev/dm-0本身是/. 所以我不清楚挂载点/如何成为它自己的子文件夹的入口点?关于这一点似乎有些循环,我不明白这一点。

最后,有人可以解释挂载点和子文件夹之间的区别吗?其中的文章我看了说//home/boot都安装点。那么/home作为挂载点与如果我已经执行有mkdir /home什么区别呢?

谢谢你的帮助。我对此感到很茫然和困惑。

Wes*_*eed 7

Windows 也支持驱动器挂载点(微软称它们为“重解析点”,但概念是相同的)。由于您对 Windows 比对 *NIX 操作系统更熟悉,因此您可以在 Windows 中执行以下小实验以帮助您理解该概念:

  1. 将 USB 闪存驱动器插入您的计算机。
  2. 在桌面上创建一个新的空文件夹。
  3. 打开磁盘管理控制台,右键单击您的闪存驱动器,然后选择 Change Drive Letters and Paths...
  4. 在出现的对话框中,点击Add...按钮。
  5. 确保Mount in the following empty NTFS folder:选择了按钮,然后浏览到您在桌面上创建的文件夹的路径(例如C:\Users\<your profile>\Desktop\New Folder
  6. 点击确定和确定。现在检查您的桌面。您将看到您创建的文件夹有一个驱动器快捷方式图标:

驱动器快捷方式图标

如果从命令提示符窗口查看它,您会看到它是一个<JUNCTION>对象类型:

在此处输入图片说明

请注意,您的闪存驱动器现在有两个挂载点;E:(或其他)和您在第 2 步中创建的那个文件夹。如果需要,您可以删除驱动器号,并且您仍然可以通过桌面上的文件夹将文件复制到/从它复制。如果需要,您甚至可以为其添加多个驱动器号。 这就是挂载点:它只是您访问驱动器/分区的路径。

与 Linux 不同,Windows 将此文件夹表示为某种奇怪的快捷方式。Windows 这样做是因为挂载点在 Microsoft 的世界中是一个有点奇怪的概念(因此您会感到困惑)。在很多情况下,它们甚至无法正常工作。但是在 *NIX 操作系统中,这就是事情的处理方式。在 Linux 中,目录可以是文件夹也可以是挂载点,大多数时候两者的区别并不重要。

*NIX 操作系统没有驱动器号的概念。您的“根”文件系统 ( /) 始终位于树的顶部,并且(通常但不总是)安装为系统的引导驱动器。这就是C:\Windows。永远只能有一个根(就像只能有一个C:驱动器一样)。系统上的每个其他驱动器或分区都必须安装到此根目录下的路径(目录)。那么,什么会D:E:在Windows会/mnt/D_Drive/media/cdrom或甚至/var/home或任何在Linux中。


现在这是一件重要的事情,并且是您混淆的一个重要来源:
设备节点与挂载点不同。Windows 和 Linux 都有设备节点。不同之处在于 Windows 从不向您显示它们,并且它们不像在 Linux 中那样作为文件存在于您的硬盘驱动器上。

在上面的命令提示符屏幕截图中,您会注意到您创建的文件夹被列为\??\Volume{GUID}\. 在 Linux 和 Windows 中,原始设备本身都有一个设备节点(例如/dev/sda1在 Linux 或\??\Volume{GUID}Windows 中)。该挂载点是文件系统,该设备上。在 Windows 中,您可以将驱动器号(E:\例如)视为驱动器/分区的安装点。唯一的区别是 Windows 从不向您显示\??\Volume{GUID}设备节点。它只显示挂载点,而这些挂载点几乎总是驱动器号(但是,正如我们从上面的实验中看到的,不一定是)。


我希望这可以为您解决问题。

现在,在你不小心做一些愚蠢的事情之前,回到磁盘管理并删除那个挂载点,比如试图将它复制/移动到某个地方!:-)