设备名和挂载点的关系

mat*_*age 6 mount devices

即使我们有一个名为 eg/dev/sdb1的设备,该设备的挂载点对于 eg 来说也是不同的/media/user/sth。现在我很困惑和好奇,想知道什么实际的设备名称之间的关系和安装点是因为,两者dev/media/user/sth与系统上的两个不同的文件夹中。

那么,为什么设备的名称与文件夹相关联?

Ser*_*nyy 6

TL;DR:因为/dev/文件系统和设备的挂载点的关系非常小,而且它们的目的不同。

/dev 文件系统的目的是什么?

引用吉尔斯的回答

/dev 下的文件几乎都是设备文件。读取和写入常规文件将数据存储在磁盘或其他文件系统上,而访问设备文件则与内核中的驱动程序通信,而内核驱动程序通常又与硬件(硬件设备,因此得名)进行通信。

您是否听说过“*nix 上的一切都是文件”?嗯,这就是/dev文件系统的工作原理 - 它允许您拥有一个“文件”,代表连接到计算机的特定硬件。例如,如果您连接了鼠标,它将显示/dev/input/mouse0为 ;如果您连接了硬盘驱动器,它可能会显示为/dev/sd<LETTER><NUMBER>(并且应该注意,通常用于表示块设备,它允许您以一定数量的字节块读取数据并且通常使用 SCSI 协议,尽管对于新的NVM 驱动器可以显示为/dev/nvme0n1)。

并且可以像这样与设备进行交互。人们通常dd if=/dev/sda1 of=/dev/sdc1使用长队进行备份。当您通过串行端口连接 Arduino 或 Raspberry Pi 时,它们将显示为串行控制台/dev/ttyUSB0/dev/ttyACM0,您可以向其写入字节以与设备进行通信,尽管更实用的是使用诸如screenbyobuPuTTY软件之类的东西。但仅此而已 - 您无法真正以简单的方式查看设备上的文件。

什么是文件系统?

文件系统是在某种形式的存储设备上组织数据的方式。并且有许多文件系统。如果您有 Mac 的硬盘驱动器,那么该驱动器上的数据将使用 HPFS 或 APFS 类型的文件系统进行组织;如果它来自 Windows - 可能使用 NTFS 文件系统;如果它来自 Linux - 通常是一种ext文件系统;BSD 或 Solaris 可能会使用zfs,等等。你甚至可以挂载iso文件备份并将其绑定到文件夹。它们都有自己的优点,但关键思想是数据以某种逻辑方式组织,并允许用户处理单个文件,而不是处理字节或数据块。共同的特点是所有文件系统都应该有一个挂载点,即文件夹和文件的文件系统树的逻辑根。

这就是/dev切入点。/dev它实际上是一个安装在/dev文件夹上的虚拟文件系统,从某种意义上说,它仅在您的机器运行时才存在;关闭后,该目录中的所有内容都消失了。同样的,/proc/sys目录-过程和物理设备的表示只存在于系统的正常运行时间。这就是为什么你不能/dev为你的 USB 驱动器或硬盘驱动器创建挂载点 - 它已经是其他东西的挂载点,除此之外会违反Unix 文件系统层次结构标准。

虽然,可以在其中创建目录/dev/my_mountpoint并在其中安装硬盘驱动器(具有 root 权限),但它是多余的,并且违反了已经提到的 Unix 文件系统层次结构标准。

设备和挂载点有什么关系?

我们可以在网站和磁盘之间进行比较。对于网站,您有一组指向特定页面的链接。但从技术上讲,网站是存储在服务器某处的数据集合。这里的想法相同 -/dev/sda1可能包含数据和文件,但挂载点允许您以合乎逻辑的方式与这些东西交互,并且知道文件的路径,您可以轻松导航到它,就像使用网站上的链接导航到您需要的页面一样.

在技​​术方面,挂载点和设备由几个文件管理。/etc/fstab将允许您指定设备(通过/dev引用或通过 UUID 编号)以及在启动时安装它的位置。/etc/mtab/proc/mounts/proc/self/mountinfo、 和/proc/self/mountstats会告诉您当前安装设备的位置。现在,在 Ubuntu 上,GUI 允许自动挂载(过去是 Unity,现在是 GNOME,但在任何一种情况下,仍应由相同的 GSettings 架构管理)。这反过来与UDisks2系统接口,然后将您的 USB 或硬盘驱动器安装到/media文件夹;换句话说,有软件可以自动将您的 USB 驱动器与挂载点相关联。

还应该注意的是,某些程序(例如)df只能在已安装的文件系统上运行,即df仅显示那些已安装的驱动器和分区的使用情况。相比之下,在很多情况下,需要卸载fsck文件系统以进行文件系统检查实用程序或parted/Gparted实用程序(因为它们用于调整大小,并且调整已挂载的分区大小可能会导致数据丢失)。此类实用程序findmnt可让您找到特定设备的安装位置(我个人在 shell 提示中使用它来了解我当前所在的磁盘驱动器)。

结论

可能这仍然没有多大意义,这是可以理解的。让我们说,这是一个约定。不一定是 Unix 的东西,因为 Windows以类似的方式,使用类似的术语。这就是计算机的构建方式以及工程师在几年前设计系统时的意义所在。但是,嘿 - 它有效,对吧?