问题标签 [network-block-device]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - 使用 mkfs 创建文件系统时的文件系统块大小
我正在尝试使用BUSE(带有 NBD)在用户空间中创建块设备。创建文件系统时,我并不清楚块访问模式。如示例所示,当我挂载 nbd 设备并创建块大小为 4096 的 ext4 文件系统时,我看到读取和写入是 1024 的倍数,而不是 4096。
但是,一旦创建了文件系统,当我挂载设备并尝试读/写文件时,请求将以 4096 的倍数发送。
所以看起来,在使用 mkfs.ext4 创建文件系统时,块设备以 1024 作为块大小访问,只有在文件系统创建后,才会使用用户指定的块大小。我做出这个推断是否正确?如果是这样,有人可以解释后端发生了什么以及为什么最初选择 1024 吗?
谢谢并恭祝安康,
沙拉特
linux - 如何使用 ndb-server 将磁盘映像文件导出到远程机器?
我正在尝试使用 nbd-server 和 nbd-client 将一台机器上的磁盘映像导出到另一台机器。在将运行 nbd-server 的服务器端(主机名 gpu)上,我使用 dd 命令制作了一个磁盘映像,并使用 mke2fs 命令在该映像文件上创建了一个文件系统。图像文件如下所示。
然后,我配置 /etc/nbd-server/config 如下。
然后,我按如下方式运行 nbd-server
然后,在客户端机器(pcl-mr1)上,我在挂载块特殊文件 /dev/nbd0 后得到以下结果。
即使我在服务器端配置了磁盘映像可读和可写的配置文件,磁盘映像在客户端显示为只读。我经历的上述步骤有什么问题?如何导出具有读写权限的磁盘映像?任何帮助将不胜感激。
linux-kernel - 网络块设备 - 接收控制失败(结果 -32) - 内核 3.16.0-41
当我使用连接到网络块设备 (NBD)qemu-nbd -c /dev/nbd0 /tmp/disk
并随后断开连接而不进行任何修改时qemu-nbd -d /dev/nbd0
,我在我的 中收到以下错误syslog
:
这两个命令成功并具有exit code 0
. 我在 Kernel 上运行 Ubuntu Server 14.04.2 LTS 3.16.0-41
。我也尝试过内核3.13.0-55
导致相同的输出。实际上我不确定,如果我有问题或者输出是否只是误导。
用例可以很容易地复制。有人可以帮我澄清一下,我的机器是否有问题。我os-compute
的节点是当前 OpenStack Kilo 版本的计算节点。
ansible - 如何使 /dev/loop0 聚集为 ansible_devices
让我尝试更清楚:
没有显示任何块设备:
此主机使用 /dev/nbd0 作为其根设备。
现在我想知道,出于我的特殊需要,我如何用我的块设备填充这些收集到的事实,例如,我想伪造一个 /dev/sda 它将是一个循环设备。问题不在于如何创建这个块设备,而是如何让 Ansible 收集它?
谢谢你的任何建议。
c - 如何在 Linux 中不安全地删除块设备驱动程序
我正在为 linux 编写块设备驱动程序。支持不安全的移除(如 USB 拔出)至关重要。换句话说,我希望能够关闭块设备而不会造成内存泄漏/崩溃,即使应用程序持有打开的文件或在我的设备上执行 IO,或者如果它与文件系统一起挂载。当然,不安全的删除可能会破坏存储在设备上的数据,但这是客户愿意接受的。
这是我完成的基本步骤:
- 在不安全删除时,块设备会产生一个僵尸,它将自动使所有新的 IO 请求、ioctl 等失败。僵尸替代 make_request 函数并更改其他函数指针,因此内核不需要原始块设备。
- 块设备等待现在正在运行的所有 IO(并使用我的内部资源)完成
- 它确实 del_gendisk(); 但是,这并没有真正释放内核资源,因为它们仍在使用中。
- 块设备释放自己。
- 僵尸跟踪块设备上 opens() 和 close() 的数量,当最后一个 close() 发生时,它会自动释放() 本身
- 结果 - 我没有泄漏块设备、请求队列、生成磁盘等。
然而,这是一个非常困难的机制,需要大量代码并且极易出现竞争条件。我仍在为极端情况、io 的 per_cpu 计数和偶尔的崩溃而苦苦挣扎
我的问题:内核中是否有一种机制可以做到这一点?我搜索了手册、文献和无数块设备驱动程序、ram 磁盘和 USB 驱动程序的源代码示例,但找不到解决方案。我敢肯定,我不是第一个遇到这个问题的人。
编辑: 我从 Dave S 下面的答案中了解到热插拔机制,但这对我没有帮助。我需要一个如何安全关闭驱动程序而不是如何通知内核驱动程序已关闭的解决方案。
一个问题的示例: blk_queue_make_request() 注册了一个函数,我的块设备通过该函数为 IO 提供服务。在该函数中,我增加 per_cpu 计数器以了解每个 cpu 正在运行的 IO 数量。然而,有一个函数被调用但计数器还没有增加的竞争条件,所以我的设备认为有 0 个 IO,释放资源,然后 IO 来了并使系统崩溃。据我了解,Hotplug 不会帮助我解决这个问题
linux - CentOS7如何加载网络块设备
我正在尝试在我的 CentOS7 服务器上加载nbd网络块设备。但是,我得到了:
如果有人能告诉我最好的方法,我将不胜感激nbd
加载模块的最佳方法,将不胜感激。最后,我希望我可以通过 ansible 自动执行这些任务。
这是我的内核版本:
谢谢!
block-device - nbd 上的 mkfs.ext4 卡住了
我正在尝试在 /dev/nbd0 上 mkfs ext4 文件系统(我在 Ubuntu 上)我没有收到任何错误消息并且命令只是卡住了
sudo mkfs.ext4 /dev/nbd0
我正在使用来自 github 的 BUSE 代码:https ://github.com/acozzette/BUSE/blob/master/README.md 到我自己的程序中。
我检查了 dmesg 并看到了这个错误:
[3775.418801] 块 nbd2:可能卡住的请求 000000000e9ecebd:控制(读取@0,1024B)。运行时间 3240 秒
但它没有说明为什么会卡住。
任何线索都会很棒。谢谢!