磁盘、分区和文件系统的设备文件和驱动程序?

磁盘、分区和文件系统的设备文件和驱动程序?

在Linux中,

  1. 对于硬盘来说,根据硬盘的接口类型,有诸如/dev/sda或 之 类的设备文件。/dev/hda

    其设备文件的存在是否意味着硬盘的驱动程序正在运行?

    如何找出它是什么设备驱动程序?

  2. 对于硬盘上的分区,有一个设备文件,例如 /dev/sda1/dev/hda1

    其设备文件的存在是否意味着该分区的驱动程序正在运行?

    如何找出它是什么设备驱动程序?

    磁盘分区的驱动程序与磁盘的驱动程序相同吗?

  3. 对于硬盘上某个分区上的文件系统,只有将其挂载到/.

    挂载文件系统前,文件系统的驱动程序是否未运行?

    文件系统具有针对该文件系统类型的设备驱动程序(例如,Linux 有一些针对 ntfs 文件系统的设备驱动程序),因此文件系统是否被视为设备?

    文件系统的设备文件是什么?文件系统的挂载目录是文件系统的设备文件吗?

答案1

  1. 是的,如果存在 /dev/sda 等磁盘设备,则表示已加载此类磁盘的驱动程序。您可以通过执行来检查确切的驱动程序

    ls -l /dev/sda

    brw-rw---- 1 根磁盘 8, 0 Apr 8 2014 /dev/sda

在这种情况下,您的主设备号 = 8,因此您可以在内核源代码中搜索该驱动程序是什么

  1. 不存在运行分区之类的东西。而且没有分区驱动程序。分区是存储设备的一部分,通过存储驱动程序对其进行访问(参见第 1 点)。

    ls -l /dev/sda1

    brw-rw---- 1 根磁盘 8, 1 Apr 8 2014 /dev/sda1

  2. 对于文件系统,正确的名称是内核模块,而不是驱动程序。驱动程序与设备相关。即使您的文件系统未安装,也可以加载该模块。它是独立的。文件系统没有设备文件

答案2

在 Linux 中这个词“司机” 与支持某些硬件的“内核模块”一样多地使用。

当选择选项并且内核从源代码编译并有两种形式(静态或动态加载模块)时,就决定了内核支持。 (单体与微内核)

静态模块是内核的固定部分,该内核的核心功能和动态模块可以按需加载以扩展基本功能。

块设备和字符设备的名称并不重要,至少对于内核而言是这样。主要编号和次要编号指示内核使用哪个模块来访问它。主要和次要编号的范围是静态分配的(检查Documentation/devices.txt在内核源代码中列出),更现代的内核模块使用动态主要/次要编号。

调用第一个 SCSI 磁盘纯粹是惯例/dev/sda,但它是内核用来选择正确的模块来访问它的主要和编号。

ls -l /dev/sda 
brw-rw---- 1 root disk 8, 0 Apr 8 2014 /dev/sda 

例如,我可以通过设置具有相同幻数 8,0 的新设备来访问同一磁盘mknod

 mknod /dev/my-first-disk b 8 0

这让我们更接近你第一个问题的答案:设备条目的存在是否意味着您正在运行的内核支持它? 不。使用 mknod,您可以创建具有任何主设备号和次设备号和名称的设备,甚至是那些不被任何内核模块使用/保留的设备。

细微差别在于,大多数人不会创建自己的设备,而是依赖乌德夫为他们动态地这样做。那么设备名称的存在通常表明某些硬件已被正确识别。

显示当前加载的动态模块,lsmod但可用的静态支持需要了解用于构建内核的编译时选项,通常存储在名为/boot/config-<kernel-version>.静态支撑始终可用。

文件系统不是设备,而是从设备上存储的字节到可用数据的转换层。多很多这里

相关内容