Evitar o teste do Linux para partições

5

Como evitar qualquer tipo de detecção de partição quando um HDD é detectado por um sistema inicializado, de forma que ele detecta apenas recursos básicos da unidade como modelo, tamanho de setor e capacidade, criando, consequentemente, apenas um arquivo de dispositivo como /dev/sda ? É um problema de libata / kernel?

Trata-se de uma experiência de recuperação de dados com um HDD danificado que setores que correspondem à tabela de partição não devem ser lidos. Não estou falando de montagem automática, ela já está desativada.

Os setores vinculados a partições estão em uma área arranhada. Quando as cabeças passarem por ali, dirija as batidas.

Isso é o que acontece quando um HDD saudável é anexado:

Resultado do Dmesg

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

(eu preciso desativar essa última rotina)

Saída do 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)
    
por William 12.10.2016 / 21:44

1 resposta

2

Não tem jeito.

Da perspectiva UDEV, os uevents das partições são enviados diretamente do kernel, não há indireção.

Do lado do kernel, as coisas acontecem de __blkdev_get() que sempre será lido em menos parte da tabela de partições com disk_get_part() . Isso vai ler o suficiente da tabela de partições para entender que tipo de tabela de partições ela é.

Até onde você pode ir é desabilitar CONFIG_MSDOS_PARTITION durante a compilação do kernel para que msdos_partition() não será usado dentro de check_partition() . Eu não tenho certeza quanto da partição lê mais em comparação com disk_get_part() .

Notas

  • Isto supõe que seu disco usa uma partição MSDOS. Existem vários outros parâmetros CONFIG_*_PARTIOTION em /block/partitions/check.c .
  • Você precisaria inicializar este kernel a partir de uma unidade que usa um tipo de partição diferente daquela que você deseja fazer backup. Isso pode ou não ser problemático (partições GPT são bastante viáveis hoje em dia).
  • Outra maneira é que, talvez, você poderia rmmod scsi . Mas isso exigiria que você não precisasse do subsistema SCSI para nada. A única maneira que posso pensar que você pode conseguir isso é através de uma inicialização de rede. Você pode então conectar o disco danificado, usar modprobe scsi para recuperar o subsistema e fazer o nó ( mknod ) manualmente. Isso é hipotético (eu não tentei isso), não tenho certeza se mknod não acionará __blkdev_get() estragando todo o esforço.
por 30.10.2016 / 02:16