问题标签 [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 - 在 Linux 上使用 libaio 发送 FUA 请求
我正在尝试使用 libaio 访问块设备(例如 /dev/sdb)。我工作正常,但我想知道如何使用 libaio 的 API 执行 FUA(强制单元访问)。
我必须说我在该主题上找到的文档很差,希望你们中的一个能够帮助我。
linux-device-driver - Linux内核:如何从分区磁盘获取整个磁盘的dev_t?
鉴于磁盘上的分区,我想检索dev_t
整个磁盘的结构。这是给blkext
司机的,比如nvme
.
就像是:
我希望我的界面get_whole_disk_dev_t()
是:
参数dev_t
::part_disk
返回dev_t
::whole_disk
我提出的算法:
dev_t
从即“/dev/nvme1n1p3”获取分区磁盘的路径。我找不到任何 API 来获取路径dev_t
。- 做一些字符串操作来删除“p3”,给出整个磁盘的路径
- 传递整个磁盘的 path_name
blk_lookup_devt
以获取整个磁盘的路径dev_t
。
IEwhole_disk=blk_lookup_devt(path_name,0)
这是正确的方法还是有更好的方法?如果是前者,那么我该如何获取路径dev_t
?
PS:我需要在设备驱动程序中实现它(即在内核上下文中)。在用户空间中,我知道我可以使用udev
API。
cygwin - Cygwin 相当于 Linux /dev/sda、/dev/sdb 等
在 Linux 上,我可以通过 /dev/sdX 访问硬盘。这会忽略任何分区表、文件系统等,而只是逐块访问驱动器。Cygwin 中的等价物是什么?我已经搜索了谷歌,但找不到任何有效的东西。
我希望能够(例如)使用类似的东西创建闪存驱动器的图像
我知道有 Windows 程序可以读取和写入硬盘驱动器图像。dd 命令只是一个说明性的例子。我不是在创建驱动器映像之后。我在设备名称之后。
python - 将 Windows CDROM 驱动器视为块文件?
我正在尝试使用 Python 模块(确切地说是python-dvdvideo)来克隆 ISO 映像。如果我将文件路径传递给我计算机上已经存在的 ISO 文件,则提供的类可以正常工作,但如果我尝试将我的 CDROM 驱动器的驱动器号传递给它,则会引发异常。
在快速检查库的代码后,我确定该类需要一个常规文件或一个块特殊设备文件,如下所示:
这引出了我的问题:有没有办法将 Windows CDROM 驱动器视为其中之一?我对 Linux 在这方面的工作方式有点熟悉(它将 CDROM 驱动器视为 /dev/* 下的块设备文件),但不熟悉 Windows 如何看待驱动器。
android - Android:在启动时挂载不同的用户数据分区
在我的三星 Note 10.1 上,我希望能够挂载不同的用户数据分区。我的目标是通过修改init.rc
脚本在启动时实现这一点,因为这似乎是设置所有文件系统并挂载用户数据、系统等分区。例如,有一行mkdir /data 0771 system system
,在我听来好像它为 userdata 分区设置了挂载点。userdata 分区对应块设备/dev/block/mmcblk0p12
。
现在,我想要的不是安装,而是mmcblk0p12
安装一个图像mmcblk0p12
,我已将其放置在插入设备的 µSD 卡上。µSD 卡可通过块设备访问/dev/block/vold/179:17
。这意味着我首先需要安装 µSD 卡,然后是 µSD 卡上的映像。
但这是我失败的地方。我不知道如何在 中安装 µSD 卡,init.rc
更不用说之后如何安装映像了。我已经mount -t ext4 /dev/block/vold/179\:17 /mnt/extSdCard
多次添加该行,但它给我的只是一个引导循环。
那么,有谁知道如何做到这一点?
EDIT1:显然分区安装在fstab.sdmk4x12
,所以我添加了行/dev/block/vold/179\:17 /mnt/extSdCard ext 4 noatime,nosuid,nodev,discard,noauto_da_alloc,journal_async_commit,erros=panic wait,check
。不幸的是,这不起作用,但内核日志给了我Cannot mount filesystem on /dev/block/vold/179\:17 at /mnt/extSdCard
.
EDIT2:愚蠢的我不使用/dev/block/mmcblk1p1
,这是μSD卡的分区。这样,我现在可以通过修改fstab.sdmk4x12
文件来安装 µSD 卡。
EDIT3:在我能够挂载μSD卡之后,如何挂载图像的问题仍然存在。我已经修改了挂载 userdata 分区的行。该行与 EDIT1+2 中的行相同,但使用图像/storage/extSdCard/userdata.img
将其挂载到/data
. 但我想它显然无法安装图像。设备启动,但显示一些错误,说明用户数据分区已损坏。它还为我提供了重置它的选项,但当然这只会影响 userdata 分区,并且一旦我重新启动,它就会尝试再次挂载我的映像,失败并再次向我显示此错误。
linux-kernel - blockdev --flushbufs 是否可靠地同步到磁盘?
我blockdev --flushbufs /dev/mmcblk0p1
在我们的一个 shell 脚本中使用。
我假设它与原始块设备访问的同步具有相同的效果。
blockdev --flushbufs
我想知道在该设备的所有延迟写入结束时假设是否安全?
(手册页提到了 ioctls,所以我认为它应该是阻塞的?)
c - Linux 块设备驱动程序请求排序 - Raw?
我正在编写一个 Linux 块设备驱动程序,它通过注册的函数接收请求blk_init_queue()
。
我的硬件设备对请求重新排序,因此为了避免读写冲突,需要write(lba x)
在发出之前等待完成read(lba x)
。
我的问题:Linux 块层是否会跟踪 RaW 冲突,并且在收到前一个的请求完成(通过)之前它不会发出,还是我必须在我的驱动程序中这样做?read(lba x)
__blk_end_request_all(req r)
write(lba x)
performance - 为什么在我的实验中 virtio-scsi 比 virtio-blk 慢得多(over and ceph rbd image)?
嗨,我最近通过 qemu 目标做了一个 virtio-scsi over rbd 的实验(为了它的 DISCARD/TRIM 支持),并将吞吐量和 iops 与同一台机器上的 rbd 设置的 virtio-blk 的吞吐量和 iops 进行比较,在客户机中使用 fio . 结果顺序读写的吞吐量小 7 倍(42.3MB/s vs 309MB/s),随机读写的 iops 小 10 倍(546 vs 5705)。
我所做的是使用 OpenStack Juno 设置虚拟机,它为我提供了 virtio-blk over rbd 设置。然后我修改了libvirt configure xml中的相关部分,从这里:
对此:
软件版本为:
qem 2.5.1
libvirt 1.2.2
内核3.18.0-031800-generic #201412071935 SMP Mon Dec 8 00:36:34 UTC 2014 x86_64(Ubuntu 14.04 内核)
管理程序是 KVM。
我认为 virtio-scsi 和 virtio-blk 之间的性能差异可能不会那么大。所以请指出我做错了什么,以及如何达到合理的表现。
一个限制是我想要一个适用于 OpenStack 的解决方案(如果适用于 Juno 则理想),而无需大量修补或编码。例如,我听说过 virtio-scsi + vhost-scsi + scsi-mq,但现在在 OpenStack 中似乎不可用。
linux - 在 Windows docker 工具箱上阻止设备访问
docker安装了我的机器
- ubuntu 12.04(MAC 上的虚拟机)
- Windows 7(本机)
和 Docker 图像如下..
ubuntu 12.04 基础 docker 镜像
当我在 Ubuntu 12.04 上运行 Docker 映像并插入 Micro SD 卡时,Docker 映像可以访问此块设备。
Docker 映像执行命令为 ...
docker run --privileged -i -t --cidfile ${ID_FILE} $1
并输入 lsblk 命令(在 docker 图像上)结果为 ..
root@4373a704da4a:/# lsblk
名称 MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 64G 0 磁盘
|-sda1 8:1 0 63G 0 部分
|-sda2 8:2 0 1K 0 部分
`-sda5 8:5 0 1022M 0 部分 [交换]
sdb 8:16 1 3.8G 0 磁盘
`-sdb1 8:17 1 3.8G 0 部分
sr0 11:0 1 1024M 0 只读存储器
sr1 11:1 1 1024M 0 只读存储器
sdb 是微型 SD 卡。
但是当我在 Windows docker 工具箱(上图相同)上厌倦了这个时,sd 卡不会出现。
Windows 7和docker工具箱执行的docker镜像可以访问块设备吗?
谢谢你。
linux-kernel - 用于协议特定驱动程序的块层开关
我正在学习神秘的块层,我尝试挂钩到generic_make_request函数并查看请求属于哪个块设备。
就我而言,我有一个 /dev/sda scsi 设备,我可以看到方向 READ | WRITE 以及请求的其他详细信息。
我现在想更深入地研究这个块请求,关于内核如何决定哪个设备特定的驱动程序应该处理一个请求。
例如,如果我有 2 个设备一个 scsi 和一个 IDE,我将有 2 个块设备,/dev/sda 和 /dev/hd0。
从通用块层切换到设备或协议特定层(scsi.c 和 ide.c)的确切位置,使用什么信息。