SCSI 子系统具有 3 层架构,其中“上层”最接近用户/内核接口,而“下层”最接近硬件。上层驱动程序通常以简洁的两个字母缩写而闻名(例如,“sd”代表 SCSI 磁盘驱动程序)。以下图表中以花括号显示了相应的模块驱动程序的名称,由于历史原因,这些名称有时与内置驱动程序名称不同。
SCSI 子系统的 3 层驱动程序架构。
上层支持用户-内核接口。对于 sd 和 sr,这是一个块设备接口,而对于 st 和 sg,这是一个字符设备接口。任何使用 SCSI 子系统的操作(例如,从磁盘读取扇区)都涉及 3 个层级中的每一层的驱动程序(例如,sd、SCSI 中间层和 aic7xxx 驱动程序)。
从图中可以看出,SCSI 中间层对所有操作都是通用的。SCSI 中间层定义了内部接口,并为上层和下层驱动程序提供通用服务。中间层提供的 ioctl 可用于属于任何 4 个上层驱动程序的文件描述符。
块设备上最常见的操作是“挂载”文件系统。对于 sd 设备,通常挂载分区(例如,mount -t ext2 /dev/sda6 /home)。对于 sr 设备,通常挂载整个设备(例如, mount -t iso9660 /dev/sr0 /mnt/cdrom)。dd 命令可用于从块设备读取或写入数据。在这种情况下,块大小参数(“bs”)需要设置为设备的块大小(例如,大多数磁盘为 512 字节)或该设备块大小的整数倍(例如,8192 字节)。块子系统最近添加了一项功能,允许设备(或分区)多次挂载到不同的挂载点。
Sd 是通用磁盘家族的成员,IDE 子系统中的 hd 设备也是如此。除了挂载 sd 设备外,fdisk 命令还可用于查看或修改磁盘的分区表。尽管 hdparm 命令主要用于 ATA 磁盘(也称为 IDE 或 EIDE 磁盘),但某些选项也适用于 SCSI 磁盘。
Sr 是 CD-ROM 子系统的成员。除了挂载文件系统(例如,iso9660)外,还可以读取音频 CD。后一个操作不涉及挂载文件系统,而是通常通过调用一些 ioctl 来实现。通用 Linux 命令(例如 dd)不能用于音频 CD。
St 是用于读取和写入磁带的字符设备。通常使用 mt 命令来执行数据传输和其他控制功能。
Sg 是 SCSI 命令传递设备,它使用字符设备接口。通用 Linux 命令不应在 sg 设备上使用。诸如 SANE(用于扫描仪)、cdrecord 和 cdrdao(用于 CD 刻录机)以及 cdparanoia(用于以数字方式读取音频 CD)之类的应用程序使用 sg。