AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 407205
Accepted
applejtter
applejtter
Asked: 2017-11-27 20:46:17 +0800 CST2017-11-27 20:46:17 +0800 CST 2017-11-27 20:46:17 +0800 CST

udev、udisks、dbus 和 dd 命令

  • 772

我很想更好地了解在操作系统级别,当新设备(usb 记忆棒或 ide/sata hdd)插入 PC 时会发生什么,即从内核级别到用户空间级别。此外,我想知道“dd”命令在哪个级别起作用。

我的理解是,一旦连接了外部驱动器,内核“拦截”这个事件并通知 udev 系统,由于 udevd 守护进程,该系统一直在监听。Udisks 是收集块设备信息的实例。Udisks 为此需要 udev。Udisks 连接到 d-bus(dbus 不仅仅是 udisks 使用的东西;许多程序使用 dbus 来交换信息)。通过 d-bus,任何人都可以连接到 udisk 并询问当前的设备列表是什么。

问题:当我启动 dd 命令时,它是否连接到 d-bus 以复制/映像驱动器?

我还附上了一张从维基百科拍摄的图片,显示了 linux 级别。请你告诉我,在那张照片上,从附加设备开始到 dd 命令实例的路径?

提前致谢。

文森佐。

在此处输入图像描述

udev
  • 1 1 个回答
  • 1160 Views

1 个回答

  • Voted
  1. Best Answer
    dirkt
    2017-11-27T23:47:57+08:002017-11-27T23:47:57+08:00

    这真的是两个问题:

    1)dd是一个普通的用户应用程序,就像cp. 就像 一样cp,它通过发出“读取”系统调用、获取结果,然后发出“写入”系统调用来进行复制。与 不同cp,您可以为 设置块大小dd,这就是dd传统上一直用于复制块设备的原因。但是今天,cp /dev/sdb /dev/sdc它将做与 完全相同的事情dd,并且同样快,因为现代版本cp(可能不像古代版本)也总是会读取和写入完整的块。

    也cp没有dd什么特别的东西来获得“磁盘布局”或类似的东西,它们只是读取,直到操作系统发出信号它们结束。

    2)

    一旦连接了外部驱动器,内核“拦截”此事件

    内核并没有真正拦截这个事件,因为所有驱动程序级别的操作都已经在内核中发生了。因此,当您连接 USB 设备时,USB 主机控制器硬件会注意到,产生一个中断,USB 主机控制器驱动程序对此做出反应,然后 USB 堆栈的各个部分开始枚举新设备,识别它的类型,识别潜在的驱动程序,附加由这些驱动程序创建的新块设备等。

    udev只是内核将这些事件传递给用户空间的一种机制,因此用户空间可以对它们做出反应,例如通过创建符号链接。

    并通知 udev 系统,感谢 udevd 守护程序,该系统一直在监听。

    Udisks 是收集块设备信息的实例。

    udisks是一个桌面恶魔,桌面用来获取有关块设备的信息,因为桌面喜欢在 D-Bus 上做所有事情。udisks如果您没有运行 D-Bus 桌面(事实上,它不在我的某些机器上运行),您实际上并不需要。

    通过 d-bus,任何人都可以连接到 udisk 并询问当前的设备列表是什么。

    您可以通过其他方式同样出色地做到这一点,例如查看/dev或 中的信息/sys。

    整个 udev - udisk - Desktop 链只需要在新的块设备出现或现有的块设备更改状态时通知桌面,因此桌面可以弹出花哨的窗口或其他任何东西。如果您以传统方式使用 Linux,并且在将其放入 USB 记忆棒时不需要花哨的窗口,则不需要这个。

    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve