设为首页 加入收藏

TOP

Linux工作原理3设备(二)
2023-07-23 13:29:49 】 浏览:106
Tags:Linux 设备
ize 区块大小。dd一次读写这么多字节的数据。为了缩写大块的数据,你可以用b和k分别表示512和1024个字节。因此,前面的例子可以读取bs=1k,而不是bs=1024。
  • ibs=size, obs=size 输入和输出块的大小。如果你能对输入和输出使用相同的块大小,请使用bs选项;如果不能,请对输入和输出分别使用ibs和obs。
  • count=num 要复制的块的总数。当处理巨大的文件时,或者处理提供无尽数据流的设备,比如/dev/zero,你希望dd在固定的点上停止;否则,你可能会浪费大量的磁盘空间、CPU时间,或者两者都浪费。使用count和跳过参数,从大文件或设备中复制一小段。
  • skip=num 跳过输入文件或数据流中的第一个num块,不把它们复制到输出。
  • 3.4 设备名称摘要

    有时很难找到设备的名称(例如,在给磁盘分区时)。这里有几个方法可以找出它是什么:

    • 用udevadm查询udevd(见第3.5节)。

    • 在/sys目录下寻找设备。

    • 从journalctl -k命令(打印内核信息)或内核系统日志(见第7.1节)的输出中猜测其名称。这个输出可能包含了对你系统中设备的描述。

    • 对于系统已经可见的磁盘设备,你可以检查mount命令的输出。

    • 运行cat /proc/devices来查看你的系统目前有驱动的块和字符设备。每一行都包括编号和名称。数字是设备的主要编号,如第3.1节所述。如果你能从名称中猜出设备,在/dev中寻找具有相应主要编号的字符或块设备,你就找到了设备文件。

    在这些方法中,只有第一个方法是可靠的,但它确实需要udev。如果你遇到udev不可用的情况,可以尝试其他方法,但要记住,内核可能没有适合你的硬件的设备文件。
    下面的章节列出了最常见的Linux设备和它们的命名规则。

    3.4.1 硬盘: /dev/sd*

    大多数连接到当前Linux系统的硬盘对应于带有sd前缀的设备名,比如/dev/sda,/dev/sdb,等等。这些设备代表整个磁盘;内核为磁盘上的分区制作单独的设备文件,如/dev/sda1和/dev/sda2。
    这个命名规则需要解释一下。名称中的sd部分代表SCSI磁盘。小型计算机系统接口(SCSI)最初是作为一种硬件和协议标准开发的,用于磁盘和其他外围设备等设备之间的通信。虽然传统的SCSI硬件在大多数现代机器中没有使用,但由于SCSI协议的适应性,它无处不在。例如,USB存储设备使用它进行通信。SATA(串行ATA,PC上常见的存储总线)磁盘上的情况要复杂一些,但Linux内核在与它们交谈时,仍然在一定程度上使用SCSI命令。
    要列出你系统上的SCSI设备,可以使用一个工具来行走由sysfs提供的设备路径。其中一个最简洁的工具是lsscsi。当你运行它时,你可以看到以下内容:

    
    $ lsscsi
    [0:0:0:0]1  disk2  ATA     WDC WD3200AAJS-2  01.0  /dev/sda3
    [2:0:0:0]    disk    FLASH   Drive UT_USB20    0.00  /dev/sdb
    

    第一列标识了系统中设备的地址,第二列描述了它是什么类型的设备,最后一列3出在哪里可以找到设备文件。其他的都是厂商信息。
    Linux按照其驱动程序遇到设备的顺序将设备分配给设备文件。所以,在前面的例子中,内核首先找到了磁盘,其次才是闪存驱动器。
    不幸的是,当你重新配置硬件时,这种设备分配方案历来会引起问题。举例来说,你有一个有三个磁盘的系统: /dev/sda,/dev/sdb,和/dev/sdc。如果/dev/sdb爆炸了,你必须把它移走,以便机器能够重新工作,那么以前的/dev/sdc就会移到/dev/sdb上,而不再有/dev/sdc了。如果你直接参考fstab文件中的设备名称(见第4.2.8节),你就必须对该文件做一些修改,以便使事情(大部分)恢复正常。为了解决这个问题,许多Linux系统使用通用唯一标识符(UUID;见第4.2.4节)和/或逻辑卷管理器(LVM)来稳定磁盘设备映射。
    关于如何在Linux系统上使用磁盘和其他存储设备,本文的讨论几乎没有触及表面。关于使用磁盘的更多信息,见第4章。在本章的后面,我们将研究SCSI支持在Linux内核中是如何工作的。

    3.4.2 虚拟磁盘: /dev/xvd, /dev/vd

    一些磁盘设备为虚拟机进行了优化,如AWS实例和VirtualBox。Xen虚拟化系统使用/dev/xvd前缀,而/dev/vd是一种类似的类型。

    3.4.3 非易失性内存设备: /dev/nvme*

    一些系统现在使用非易失性内存快车(NVMe)接口来与某些类型的固态存储进行对话。在Linux中,这些设备显示在/dev/nvme*。你可以使用nvme list命令来获得你系统上这些设备的列表。

    3.4.4 设备映射器: /dev/dm-, /dev/mapper/

    在一些系统上,比磁盘和其他直接块存储更高级别的是LVM,它使用一个叫做设备映射器的内核系统。如果你看到以/dev/dm-开头的块设备和/dev/mapper的符号链接,你的系统可能使用了它。你将在第4章中了解这一切。

    3.4.5 CD和DVD驱动器: /dev/sr*

    Linux将大多数光存储驱动器识别为SCSI设备/dev/sr0、/dev/sr1,等等。然而,如果驱动器使用旧的接口,它可能会显示为一个PATA设备,如下所述。/dev/sr*设备是只读的,它们只用于从磁盘上读取。对于光学设备的写入和重写能力,你将使用 "通用 "SCSI设备,如/dev/sg0。

    3.4.6 PATA硬盘: /dev/hd*

    PATA(Parallel ATA)是一种较早的存储总线。Linux块设备/dev/hda、/dev/hdb、/dev/hdc和/dev/hdd在旧版本的Linux内核和旧硬件上很常见。这些是基于接口0和1的设备对的固定分配。 有时,你可能会发现SATA驱动器被识别为这些磁盘之一。这意味着该SATA驱动器在兼容模式下运行,这阻碍了性能。检查你的BIOS设置,看看你是否可以将SATA控制器切换到其原始模式。

    3.4.7 终端: /dev/tty, /dev/pts/, 和 /dev/tty

    终端是在用户进程和I/O设备之间移动字符的设备,通常用于向终端屏幕输出文字。终端设备接口可以追溯到很久之前,当时的终端是基于打字机的设备,很多都是连接在一台机器上的。
    大多数终端是伪终端设备,是理解真正终端的I/O特性的仿真终端。内核不是与真正的硬件对话,而是将I/O接口呈现给软件,例如你可能在其中输入大部分命令的shell终端窗口。
    两个常见的终端设备是/dev/tty1(第一个虚拟控制台)和/dev/pts/0(第一个伪终端设备)。/dev/pts目录本身是一个专门的文件系统。
    /dev/tty设备是当前进程的控制终端。如个程序当前正在从终端读写,这个设备就是该终端的同义词。进程不需要连接到终端。

    • 显示模式和虚拟控制台

    Linux有两种主要的显示模式:文本模式和图形模式(第14章介绍了使用这种模式的窗口系统)。尽管Linux系统传统上是以文本模式启动的,但现在大多数发行版使用内核参数和临时图形显示机制(bootsplashes,如plymouth)来完全隐藏系统启动时

    首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/7/7
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇INFINI Labs 产品更新 | Console .. 下一篇shell 常用命令3

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目