Wil*_*iam 5 linux partition udev removable-storage
当启动的系统检测到硬盘时,如何避免任何类型的分区探测,方式是它只检测基本驱动器功能,如型号、扇区大小和容量,从而仅创建一个设备文件/dev/sda?是 libata/内核问题吗?
这是关于损坏硬盘的数据恢复体验,不应读取与分区表对应的扇区。我不是在谈论自动挂载,它已经被禁用了。
链接到分区的扇区位于划痕区域。当头部经过那里时,驱动器崩溃。
当连接健康的 HDD 时会发生以下情况:
消息输出
Oct 13 16:21:42 wks-01 kernel: [ 906.796660] sd 8:0:0:0: [sdb] 1953525167 512-byte logical blocks: (1.00 TB/931 GiB)...
Oct 13 16:21:42 wks-01 kernel: [ 906.915646] sdb: sdb1
Run Code Online (Sandbox Code Playgroud)
(我需要禁用最后一个例程)
Udev 输出
KERNEL[906.915935] add /devices/pci0000:00/0000:00:1d.7/usb8/8-3/8-3:1.0/host8/target8:0:0/8:0:0:0/block/sdb (block)<br>
KERNEL[906.915999] add /devices/pci0000:00/0000:00:1d.7/usb8/8-3/8-3:1.0/host8/target8:0:0/8:0:0:0/block/sdb/**sdb1** (block) (**I need to disable this routine)** ... <br>
UDEV [907.392087] add /devices/pci0000:00/0000:00:1d.7/usb8/8-3/8-3:1.0/host8/target8:0:0/8:0:0:0/block/sdb/sdb1 (block)
Run Code Online (Sandbox Code Playgroud)
没有办法。
从 UDEV 的角度来看,分区 uevent 是直接从内核发送的,没有间接的。
从内核方面发生的事情__blkdev_get()总是会读取至少一些分区表disk_get_part()。这将读取足够的分区表以了解它是什么类型的分区表。
您所能做的就是CONFIG_MSDOS_PARTITION在内核编译期间取消设置,这样msdos_partition()它就不会在内部使用check_partition()。我不确定与disk_get_part()此相比,它读取的分区有多少。
CONFIG_*_PARTIOTION参数/block/partitions/check.c。rmmod scsi。但这要求您不需要 SCSI 子系统来做任何事情。我认为实现这一目标的唯一方法是通过网络启动。然后,您可以连接损坏的磁盘,用于modprobe scsi恢复子系统,并mknod手动创建节点 ( )。这是假设的(我没有尝试过),我不确定是否mknod不会触发__blkdev_get()所有的努力。