问题标签 [sector]

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.

0 投票
1 回答
306 浏览

c - Block device - Initialize gendisk structure when not multiple of 512 bytes

I'm currently learning kernel driver programmation using Linux Device Drivers - 3rd.

To define a block device, I have to declare a gendisk structure and to initialize it with relevant informations.

In chapter 16 its written:

sector_t capacity;

The capacity of this drive, in 512-byte sectors. The sector_t type can be 64 bits wide. Drivers should not set this field directly; instead, pass the number of sectors to set_capacity.

Usualy I set the capacity using a call like:


Imagine that I have a device with a memory zone that is not a multiple of 512 bytes.

Let's take 2000 bytes so there is three 512 bytes zones plus a 464 bytes zone

  • What should I pass to set_capacity ?

Furthermore on some devices, memory is splitted into several areas. Imagine that I have a device containing multiple memory areas, each with different size and that I want to abstract this splitted memory into a single memory zone.

area1 => 32000 bytes
area2 => 512 bytes
area3 => 50 bytes
area4 => 45 bytes
area5 => 1024 bytes

In this case the hard sector size is not a constant within the device.

  • How should I fill the gendisk structure ?

UPDATE after @KamilCuk answer:

To continue with this example let's take the full device memory (33631 bytes) which is 65 sectors of 512 bytes + 1 sector of 351 bytes.

So the solutions are to present it either as:

  • 33270 bytes memory zone ==> 65 sectors

or

  • 33631 bytes memory zone ==> 66 sectors with 161 bytes discarded at the end of last sector

Are those the best solutions or there is another way to handle this specific case ?


  • Basically the question could be resumed to how to initialize a block device when it's not a multiple of KERNEL_SECTOR_SIZE?
0 投票
1 回答
39 浏览

r - 将扇区分配给R中的一个角度

我有一个介于 0 和 360 之间的开始和结束角度值的向量。我想有一个额外的列来指定哪个扇区(考虑 12 个扇区)是我的变量。

部门应定义为:(15:45], (45,75],(75,105], ..., (345,15]

对于我的测试示例,我认为我必须遍历行数:

在这里,我可以添加 2 列test,告诉我我的角度在哪个扇区。我正在寻找一种更智能的方法,我可以选择改变扇区的数量,例如 24 个扇区。

0 投票
1 回答
38 浏览

dictionary - mapbox-gl-js 围绕 lat/lng 创建一个扇区?

我需要在用户点击的点周围创建一个扇区。我该怎么做?

我可以创建一个“圆圈”类型的图层,用于将数据显示为圆圈,但如何获取扇区

0 投票
0 回答
73 浏览

winapi - 您如何检测前/后间隙以计算 CD-ROM 中的确切轨道长度?

使用IOCTL_CDROM_READ_TOC_EX来计算 CD-ROM 轨道的确切长度的一种简单方法是假设音轨具有 2 秒的前间隙,而后跟不同轨道类型的数据轨道具有 2 秒的后间隙。

但不幸的是,情况并非总是如此,例如多区段光盘。

所以我想出了以下方法来计算每个轨道的确切长度:

  • 向后读取曲目的开头
  • 发出READ CD命令读取 Q 子通道
  • 只要INDEX电流TNO为零,我们就有效地处于前|后间隙区

这按预期工作,我们可以发现间隙以计算扇区中的确切轨道长度。

然而,这个主题在 SCSI 多媒体命令规范中没有解释,这有点令人惊讶!

问题:

这是计算 CD-ROM 中每个轨道的确切长度的正确方法吗?

0 投票
0 回答
227 浏览

windows - 如何写入 BitLocker 加密卷的物理扇区?

我打电话CreateFile()打开\\.\PhysicalDrive0,然后我读取了 BitLocker 加密卷的扇区,一切正常。这样,我创建了使用 BitLocker 加密的卷的物理(加密)扇区的备份副本。

然后,我再次调用CreateFile()并再次打开\\.\PhysicalDrive0,然后我尝试写入所述 BitLocker 加密卷的扇区(我正在尝试恢复备份),但它不起作用。

如果卷已解锁,我会收到IOExceptionHResult = 0x80370000 和文本“此驱动器已被 BitLocker 驱动器加密锁定。您必须从控制面板解锁此驱动器。”

从 UI 解锁卷后,异常更改为 HResult = 0x80070013 和文本“媒体已写保护”。

问题: 我必须做什么才能被允许写入 BitLocker 加密卷的物理扇区?我提到我确实以管理员身份运行代码,并且我确实锁定了卷,但无济于事。相同的代码适用于非加密卷。

到目前为止,我只有 2 个选项,而且都不是很好:

  1. 如果我使整个驱动器脱机(调用DeviceIOControl()),写入 BitLocker 卷的物理扇区可以正常工作,但我不能这样做,因为驱动器还包含其他需要联机的卷。

  2. 如果(在恢复之前)我将卷格式化为非加密卷,它也可以工作,从而删除 BitLocker 加密。执行此操作后,写入物理扇区可以正常工作,但 Windows 不会将新写入的扇区检测为 BitLocker 卷。但是,在移除并重新插入驱动器后(或者如果驱动器已修复,则在重新启动后)它会将该卷检测为 BitLocker 加密卷。

非常感谢。

0 投票
0 回答
100 浏览

windows - 如何强制 Windows 检测通过直接写入物理扇区创建的 BitLocker 卷

我创建了 BitLocker 加密卷的物理(加密)扇区的备份(通过直接从 读取它们\\.\PhysicalDrive0)。

然后我将该卷格式化为非加密卷,从而删除 BitLocker 加密并将加密卷转换为非加密卷。

之后,我通过将物理(加密)扇区直接写入\\.\PhysicalDrive0. 写作效果很好,但是:

问题: Windows 没有意识到卷已从未加密的卷更改为 BitLocker 加密的卷。DeviceIOControl()我尝试用打电话IOCTL_DISK_UPDATE_PROPERTIES,但无济于事。

只有在重新启动(或删除然后重新插入驱动器,如果它是可移动的)之后,Windows 才会意识到系统中有一个新的 BitLocker 加密卷。

问题: 在我写完物理扇区后,有没有办法以编程方式强制刷新 BitLocker 卷?到目前为止,这仅在我将整个驱动器脱机然后重新联机时才有效,但我不能这样做,因为该驱动器还包含其他卷,我无法将其脱机,甚至暂时也无法脱机。

PS:代码确实以管理员权限运行。我确实锁定/解锁了音量。我确实卸载了卷的文件系统。无济于事。我没主意了。谢谢。

0 投票
0 回答
1682 浏览

disk - print_req_error:关键目标错误,dev sdb,扇区 0

一段时间后,我在 /dev/sdb 上找到了三星磁盘,但在分区上没有找到该设备。smartools 无法对设备进行测试,dmesg 跟踪显示以下信息无法访问扇区 0。对我来说,问题很明显,磁盘在某些硬件部分损坏,PCB 板无法访问与磁盘通信。我想对这个问题有一些其他的看法,记住是硬件问题。

你知道发生了什么吗?我可以恢复磁盘吗?

0 投票
3 回答
2687 浏览

python - 如何从python中的股票代码或公司名称获取股票市场公司部门

给定公司代码或名称,我想使用 python获取其部门。

我已经尝试了几种潜在的解决方案,但没有一个成功

最有前途的两个是:

1) 使用以下脚本:https ://gist.github.com/pratapvardhan/9b57634d57f21cf3874c

但是我正在使用python --version 3.8

我已经能够调整这个解决方案,但最后一行不起作用,我对抓取网页完全陌生,所以如果有人有一些建议,我将不胜感激。

这是我当前的代码:

但是最后一部分不起作用,我对这种xpath语法很陌生:

2) 另一个选项是嵌入RTTN包,如下所示:查找股票属于哪个部门

但是,我想在我的 Jupyter 笔记本中运行它,而且运行它需要很长时间ss <- stockSymbols()

0 投票
1 回答
120 浏览

c - 在C中搜索设备的坏扇区

我正在尝试在 c 中创建一个简单的脚本,该脚本能够识别(设备)的坏扇区以用于教育目的。在我的示例中,我使用具有只读模式的 HD。背后的想法很简单,但可能太简单了,我会知道这是否正确,并最终了解实现我目标的任何其他方式。

让我们看一下我的代码:

所以我尝试通过每次寻找 512 字节的文件指针来读取我的 HD 扇区。这是第一个问题:由于首选的 I/O 块大小是 2048 字节(使用 sys/stat.h 的 stat 检索的信息),每次 512 字节而不是 2048 字节是否正确查找?另外,为了检查一个扇区是否坏,我用来比较(bytes_read < size_block),因为我假设如果我无法读取一个扇区的全部字节,它可能会被损坏。但是,如果我到达“文件的末尾”并且使用这种方法它不是 512 的倍数,我将得到该扇区无论如何都已损坏,如果它不是。我写的真的有用吗?否则,我该怎么做这个检查?

0 投票
1 回答
107 浏览

assembly - 在 qemu 中将扇区加载到 RAM


我编写了一个简单的程序,将扇区(第 2 扇区)加载到 RAM

但什么也不打印。

首先,我为引导扇区尝试了这段代码:

内核从用户那里获取用户名和密码,然后终止程序:

并没有工作

搜索后我尝试了这段代码(只是在末尾添加了寄存器:/):

再次没有工作

我使用的命令行:

nasm -fbin BootSector.asm -o Bootsector.bin

nasm -fbin Kernel.asm -o Kernel.bin

cat BootSector.bin Kernel.bin > Code.bin

qemu-system-x86_64 Code.bin

qemu有问题吗?

谁能帮我解决我的问题?

提前致谢