我需要 RAM 中的块设备。我构建了一个 3.x 内核并添加了 RAM 块设备驱动程序。RAM块设备驱动器的数目为16(默认),但是当在内核引导代码中没有ramx/sys/block也不/dev。这是怎么回事?
在 Linux 下,我可以简单地做一个:
dd if=ubuntu-14.04.1-desktop-amd64.iso of=/dev/sdb
Run Code Online (Sandbox Code Playgroud)
并启动/dev/sdb,它是闪存驱动器的设备。它在 263 秒内完成。
但是:如果我启动 OpenBSD 5.6 并执行相同操作(对于同一个闪存驱动器,在两次测试之间将其归零):
dd if=ubuntu-14.04.1-desktop-amd64.iso of=/dev/rsd1i
Run Code Online (Sandbox Code Playgroud)
大约需要半个小时才能完成(使用安全级别 1),但是当我从它启动闪存驱动器时,BIOS 只说:
no active partition found
Run Code Online (Sandbox Code Playgroud)
问题:我错过了什么?
我的闪存被分区为 /dev/mtd0 /dev/mtd1 等......我想将其中一个分区 scp 到我的电脑上,这样我就可以用十六进制编辑器分析它,但每次我尝试用 scp 复制它我得到 - 不是一个普通文件。如何 scp 闪存分区的内容?我想我在 Windows 机器上用 WinSCP 做过一次,但它只适用于 < 10mb 的小分区,任何更大的分区都会与设备断开连接。
我打算将 Gentoo Linux 安装到旧硬件上,该主板同时具有 IDE 和 SATA 硬盘驱动器。我连接了两个 IDE 和一个 SATA 硬盘,并计划对它们进行 RAID。
但是我注意到一个问题:映射到 /dev/sda 的硬盘在每次启动时都会发生变化!
我正在互联网上寻找答案。我发现持久设备名称可能是一个解决方案。但是我担心它会在系统范围内遇到兼容性问题吗?此外,它非常不方便(因为名称很长),除非我可以使用/dev/disk/by-label. 但它似乎by-label不能指/dev/sda和/dev/sdb- 只有/dev/sda1可能。而且,对于我使用 BIOS 的旧硬件,我认为我只能使用 MBR ,而不能使用 GPT。MBR环境下如何更改磁盘标签?
另一方面,我认为理想的解决方案是,/dev/sda在每次启动时都映射到同一个硬盘。想象一下,这可以通过在硬盘上保存一个名为“bootmap”的文件来实现。而“/sda”写在“bootmap”文件中。系统启动时,如果在“bootmap”中找到“/sda”,则驱动器被映射到/dev/sda. 如果找到“/sdb”,则映射到/dev/sdb. 等等。(但我知道这可能不是那么理想。)
那么,如何避免/dev/sda从引导到引导的变化映射?
作为替代方案,编辑标签的方式也不错。- 鉴于它不会在任何地方遇到兼容性问题。
(PS - 无论哪种方式,互联网上还没有解决方案。)
我正在尝试使用以下命令增加 SSD 的队列深度值:
echo 64 > /sys/block/sda/device/queue_depth
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
bash: echo: write error: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我尝试使用tee甚至像这样的编辑器vim,nano但仍然看到此错误。此服务器 (sd[ad]) 上有 4 个 SSD,并且所有这些 SSD 都会发生此错误。
操作系统为CentOS 7,内核版本为3.10.0-327.18.2.el7.x86_64。
给定一个块设备,我怎样才能得到它的“父”?
一个例子是 LUKS 虚拟解密设备 (/dev/mapper/decrypted),其父设备将是加密块设备 (/dev/sdb)
有没有办法告诉,给定一个 LUKS 块设备的路径,并且不知道密码,设备是否已经打开(解密)?
知道解密设备的路径怎么样?
我正在尝试选择新的 mq-deadline io 调度程序,但它似乎不可用。
$ cat /sys/block/sda/queue/scheduler
noop [deadline]
Run Code Online (Sandbox Code Playgroud)
核心:
$ uname -a
Linux pluto 4.11.6-zenbook #1 SMP Wed Jun 21 09:39:34 EDT 2017 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
留言:
$ sudo dmesg|grep deadline
[ 0.077863] TSC deadline timer enabled
[ 1.383260] io scheduler deadline registered (default)
[ 1.383261] io scheduler mq-deadline registered
Run Code Online (Sandbox Code Playgroud) 我买了一个新的(2017 年)4 TB 硬盘,所以我预计它的物理扇区大小为 4096。的确,
$ hdparm -I /dev/sdh
...
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1000*1000: 4000787 MBytes (4000 GB)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用 对其进行分区时parted,我得到了 512 的物理块大小:
$ parted /dev/sdh print
Model: (scsi)
Disk /dev/sdh: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Run Code Online (Sandbox Code Playgroud)
该驱动器位于 USB 桥接器(152d:0561JMicron JMS55 芯片组)后面的扩展坞(iTec) 中的 USB 3 端口上。
块层似乎也有错误的大小:
$ cat /sys/block/sdh/queue/physical_block_size
512
$ cat /sys/block/sdh/queue/minimum_io_size
512
Run Code Online (Sandbox Code Playgroud)
一个READ CAPACITY …
block-device ×10
devices ×3
linux ×3
hard-disk ×2
encryption ×1
filesystems ×1
flash-memory ×1
gentoo ×1
luks ×1
openbsd ×1
ramdisk ×1
scheduling ×1
scp ×1
scsi ×1
ssd ×1
sysfs ×1
udev ×1
usb-drive ×1