/dev/disk 目录


/dev/disk 目录

/dev/disk 目录在类 Unix 系统中是一个特殊的目录,用于组织和管理磁盘设备文件和它们的符号链接。这个目录提供了一种方便的方式来访问和识别系统中的磁盘设备,无论它们是如何连接或挂载的。以下是 /dev/disk 目录的一些主要作用:

  1. 组织磁盘设备:

    • /dev/disk 目录包含了磁盘设备的节点,例如 /dev/sda/dev/sdb 等,这些节点代表了物理磁盘驱动器。
  2. 提供符号链接:

    • 目录中包含了基于不同属性的符号链接,如 by-idby-pathby-label 等,这些链接指向实际的设备文件,使得用户可以通过更易读的名称来访问设备。
  3. 简化设备识别:

    • 用户和应用程序可以通过这些符号链接,使用设备的属性(如 ID、路径、标签等)来识别和访问设备,而不需要记住具体的设备文件名。
  4. 支持持久化设备名称:

    • 通过使用持久化设备名称(如 UUID 或标签),即使在设备重新连接或系统重启后,应用程序也可以继续访问预期的设备。
  5. 支持 udev 规则:

    • /dev/disk 目录的结构和内容受到 udev(用户空间设备管理器)的控制。udev 根据系统上定义的规则动态创建和管理符号链接。
  6. 设备挂载和管理:

    • 系统管理员和挂载工具通常使用 /dev/disk 目录中的信息来挂载文件系统和管理系统磁盘。
  7. 脚本和自动化:

    • 由于 /dev/disk 目录提供了一种一致和可预测的方式来访问磁盘设备,它经常被用在脚本和自动化任务中,以动态地与磁盘设备交互。
  8. 兼容性和易用性:

    • 对于习惯于早期 Unix 系统的用户和管理员来说,/dev/disk 目录提供了一种熟悉的方式来访问磁盘设备,同时引入了现代系统的灵活性和便利性。

/dev/disk 目录是 Linux 系统磁盘设备管理的核心部分,它与 /dev 目录中的其他设备文件一起,构成了系统硬件设备接口的基础。

/dev/disk 目录下都可以有哪些文件夹

在 Linux 系统中,/dev/disk 目录下的 by-* 文件夹是 udev 规则创建的符号链接,它们根据设备的不同属性将设备节点组织在一起,以便于用户和系统更容易地识别和访问硬件设备。以下是这些文件夹的一般用途:

  1. by-diskseq:

    • 包含按磁盘序列号组织的符号链接。
  2. by-id:

    • 包含按设备 ID 组织的符号链接,设备 ID 可以是 USB 设备的 vendor ID 和 product ID,或者 SCSI 设备的 WWN 等。
  3. by-label:

    • 包含按文件系统标签组织的符号链接,通常用于识别和挂载具有特定标签的磁盘分区。
  4. by-partlabel:

    • 包含按分区标签组织的符号链接,这允许用户通过分区的标签名来访问它,而不是通过设备路径。
  5. by-partuuid:

    • 包含按分区的 UUID 组织的符号链接。分区 UUID 是一个全局唯一标识符,用于在分区表更改(如磁盘重新分区)后仍然能够识别分区。
  6. by-path:

    • 包含按设备路径组织的符号链接,路径反映了设备的物理或逻辑连接方式。
  7. by-uuid:

    • 包含按磁盘的 UUID 组织的符号链接。磁盘 UUID 是一个全局唯一标识符,用于识别整个磁盘设备。

这些符号链接使得用户能够通过更易读和更稳定的标识符来访问设备,而不仅仅是通过可能因系统重启或硬件更改而变化的设备文件(如 /dev/sda/dev/sdb 等)。例如,一个外部 USB 驱动器可能总是以相同的标签或 UUID 出现在 by-labelby-uuid 中,不管它被挂载到哪个实际的设备文件上。

要查看这些文件夹中的内容,您可以使用 ls 命令,如下所示:

  1. ls /dev/disk/by-id
  2. ls /dev/disk/by-path
  3. # 等等,根据需要查看其他 by-* 文件夹

这些文件夹对于系统管理员和自动化脚本非常有用,因为它们提供了一种更稳定和可预测的方式来引用设备。

同一个设备,反复插拔,在这些文件夹里的标识符会变吗

同一个设备在反复插拔后,在 /dev/disk/by-* 目录下的标识符可能会发生变化,也可能保持不变,这取决于使用的标识符类型。以下是一些常见的情况:

  1. by-id:

    • 通常不会变。这个标识符基于设备的唯一标识,如 SCSI 设备的 WWN 或 USB 设备的 vendor ID 和 product ID。
  2. by-path:

    • 可能会变。这个标识符基于设备连接到系统的路径,如果设备的连接方式发生变化(例如,通过不同的 USB 端口连接),路径标识符可能会改变。
  3. by-partlabelby-label:

    • 通常不会变,前提是设备的标签没有被更改。这些标识符基于设备的文件系统标签或分区标签。
  4. by-partuuidby-uuid:

    • 通常不会变。这些标识符基于设备的 UUID(通用唯一标识符),UUID 是在设备制造时分配的,不会因插拔而改变。
  5. by-diskseq:

    • 可能会变。这个标识符基于磁盘的序列号,但具体行为可能依赖于系统和存储设备的实现。
  6. by-devnum:

    • 可能会变。这个标识符基于设备的主次设备编号,这可能会因系统的设备发现过程而改变。

udev 规则确保在设备插拔时,尽可能地保持一致性和可预测性。但是,某些类型的标识符依赖于硬件或系统的特定状态,这可能会因插拔或其他系统事件而改变。

如果您依赖于特定的设备标识符进行脚本编写或系统配置,请考虑使用最不可能发生变化的标识符,如 UUID。此外,一些系统可能会使用数据库(如 /dev/disk/by-uuid)来存储设备的持久性 UUID,即使在设备被移除和重新插入后,这些 UUID 也会保持不变。


local 2024年6月19日 18:16 收藏文档