问题标签 [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.
ansible - 如何使 /dev/loop0 聚集为 ansible_devices
让我尝试更清楚:
没有显示任何块设备:
此主机使用 /dev/nbd0 作为其根设备。
现在我想知道,出于我的特殊需要,我如何用我的块设备填充这些收集到的事实,例如,我想伪造一个 /dev/sda 它将是一个循环设备。问题不在于如何创建这个块设备,而是如何让 Ansible 收集它?
谢谢你的任何建议。
linux - 直接在块设备上创建文件系统,没有分区?
我的印象是块设备列在下面/dev
,例如/dev/xvdf
,文件系统位于分区上,该分区在该分区所在的块设备后面标有数字,就像/dev/xvdf1
所有文件系统都必须位于分区上.
我正在运行 CentOS,作为课程的一部分,我必须创建文件系统、分区和挂载文件系统。对于本课程,我在设备文件上创建了一个文件系统,/dev/xvdf
并安装了这个文件系统。除此之外,我/dev/xvdf
在文件名上创建了一个分区,/dev/xvdf1
并在该分区上创建了一个文件系统,并挂载了该文件系统。这让我很困惑,我有一些问题:
- 我是否正确,您不必在块设备上创建分区,但您可以直接在块设备上创建文件系统而无需分区?
- 如果是这样,为什么有人要这样做?
- 在 上创建文件系统后
/dev/xvdf
,我使用 fdisk 创建了/dev/xvdf1
分区,并将最大块分配给这个新分区。但是,文件系统/dev/xvdf
没有被删除,仍然有一个文件。如果所有块/dev/xvdf
都已分配给/dev/xvdf1
分区,这怎么可能?
kernel - Linux 块设备 - 寻找一个简单的例子
我正在尝试一个 linux 虚拟块设备,我的要求是在运行 cat /dev/mydevice 时必须返回一些我在内核程序中创建的字符串,(我不必写入任何数据来驱动,基本上创建一个块设备这有助于了解块设备的工作原理)。
我尝试使用此博客中提供的示例。但是一旦我运行 cat /dev/sbd0 它就会无限循环。而且我没有从块驱动程序中的任何方法获取任何日志来了解块驱动程序中的流程是如何发生的。
有人可以解释一下linux内核中的块设备中的流程是如何发生的吗?
我还尝试了 Link+ 编辑器,但在 Link+ 示例中仍然找不到任何示例块设备。我可以在网上看到很多 sbd.c 程序,但是由于库与最新内核的兼容性,大多数都没有编译(我是一个 linux 天真的用户)。
我使用的内核是 Ubuntu 16.04 中的 4.4
ubuntu-16.04 - 如何通过 qemu 命令行将块设备附加到 qemu VM?
我想配置 qemu 以将特定的块设备附加到 VM?
以下是我现在使用的命令:
我知道以下是执行此操作的 virsh 命令:
但我想在上面的命令行中指定这个(不想使用 virsh)。有谁知道如何做到这一点?
亲切的问候
macos - 无法在 macOS 10.13 中打开物理磁盘设备
我正在开发一些需要读取物理存储设备的低级系统工具。在 macOS 10.13 之前,我能够打开/dev/disk0
、/dev/disk1
等并从设备中读取原始数据。但升级后,我无法再打开这些设备,并且出现“不允许操作”错误,即使我以 sudo 身份运行。有没有办法在这个版本中访问物理驱动器?
linux-kernel - 为什么 bdev_get_queue 返回 NULL?
我为块设备(Linux,Ubuntu 16)开发了一个“过滤器”,在初始化过滤器驱动程序期间,我尝试了后端(现有设备)的队列指针, bdev_get_queue宏的主体显示很酷的评论“这永远不会NULL",但我为struct block_device的bd_disk字段设置了NULL 。
我还需要检查什么?
更新1:队列的指针应该由bdev_get_queue和struct block_device返回有什么区别。bd_queue ?
c++ - 块设备 (/dev/sda) & fopen/fstream
直接打开块设备(如硬盘)时,有什么特别需要做或考虑的吗?
是否必须使用普通和/fopen
或std::fstream
(及其相关的tell
///函数),或者是否必须使用特殊函数/类?seek
read
write
它们是否允许真正的随机搜索,或者一次阅读整个块是否有严格的限制?如果是前者,不进行逐块读取是否会显着降低性能(与“常规”文件系统上的相同类型的文件读取相比)?
这将在 OS-X 以及在不久的将来,其他基于 POSIX 的操作系统(使用 Linux 内核,而不是 BSD 内核)上,主要使用stl
可用的类。
c - 访问超出报告容量的块设备数据
我有一个 SATA 块设备,它报告的容量小于其可访问空间,我想使用 Linux 为块设备创建的文件读取和写入它超过报告的容量。所以我希望使用从open({ "/dev/sda", O_RDWR
)返回的描述符进行操作。但是,当我尝试使用lseek
来查找设备的容量时,我收到一个错误,并且 errno 被设置为EINVAL (22)
. 有没有办法在不修改设备驱动程序并且仍然使用返回的文件描述符的情况下访问超出设备容量的数据open()
?
我的 Linux 版本是内核 3.10.0-514.21.1.el7.x86_64 的 CentOS 7,尽管我会对解决方案感兴趣,即使它们涉及其他 Linux 发行版。
编辑:我正在使用的驱动器是一个 FLEX 协议驱动器,它报告驱动器的常规容量,但也有在驱动器报告容量以上的偏移处可用的叠瓦式磁记录。如果您有兴趣,可以在T13 网站上找到该协议的详细信息。
virtual-machine - qemu环境,两台虚拟机写数据到同一个块设备
在 linux qemu 环境中,一台主机服务器运行两台虚拟机。我想让两个虚拟机将数据写入主机上的同一个块设备。因此,我运行以下两个命令将主机块设备公开给两个 VM。
现在,两个 VM 可以看到块设备并对其进行写入。我想知道这种方法是否有效。由于两个虚拟机同时向同一个块设备写入数据,我怀疑块设备是否可以存储正确的数据?
memory-management - set_bh_page 对页面缓存中的给定缓冲区头究竟做了什么?
我正在研究内核源代码,我注意到了这个功能set_bh_page()
。但是,我无法清楚地理解它的作用。
我只能在fs/buffer.c
文件中找到这条评论:
/* 将缓冲区链接到它的页面 */
set_bh_page(bh,页面,偏移量);
但我仍然不清楚它的作用。
所以,为了说清楚,我想了解这个函数调用与缓冲区和物理页面的关系是什么,以及它是否与页面缓存本身有任何关系。
更新 1:
该函数alloc_page_buffers()
调用 this set_bh_page()
,对此有一些注释,如下所示:
当给定数据区域的页面和每个缓冲区的大小时,创建适当的缓冲区。使用 bh->b_this_page 链表跟踪创建的缓冲区。如果无法创建更多缓冲区,则返回 NULL。
我检查了谁调用了alloc_page_buffers()
,其中一个是read_page()
,具有以下描述:
从文件中读取一页。
我们都读取页面,并将缓冲区附加到页面以记录每个块的地址(使用 bmap)。这些地址将用于稍后写入块,完全绕过文件系统。这种用法类似于处理交换文件的方式,并且允许我们写入文件而不用担心内存分配失败。
所以,通过查看源代码read_page()
,我的理解是buffer_head
分配的必须与其物理页地址相关联,就像直接映射一样。
那是对的吗?