ブートシステムでHDDが検出されたときにすべての種類のパーティション検索を回避し、基本ドライブ機能(モデル、セクタサイズ、容量など)のみを検出してデバイスファイルのみを生成できるようにするにはどうすればよいですか/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
(最後のルーチンを無効にする必要があります)
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)
ベストアンサー1
更新:より迅速で安全な方法を公開しました。次のようなカーネルモジュールの使用
@grochmalが指摘したように、これを行う組み込みの方法はありませんが、自分のカーネルをコンパイルしたい場合は非常に簡単です。
ファイルのblock/partition-generic.c
関数の前に次のコードを追加しますrescan_partitions
。
int do_partscan = 1;
static const struct kernel_param_ops do_partscan_param_ops = {
.set = param_set_int,
.get = param_get_int,
};
module_param_cb(do_partscan, &do_partscan_param_ops, &do_partscan, 0644);
そして、関数の先頭に次のコードを挿入してください。
if (!do_partscan) {
bdev->bd_invalidated = 0;
return 0;
}
これにより、パーティション検索を切り替えるために使用できるモジュールパラメータが提供されます/sys/module/...
。任意の検索に設定すると、0
パーティションなしですぐに返されます。必要に応じて再び反転して1
実行して、blockdev --rereadpt <device>
ディスクに接続されているパーティションをロードできます。
/sys/module
[パラメータがツリーのどこにあるかわかりません。 find itを使用してくださいfind /sys/module -name do_partscan
。設定すればいいと思います。
#undef MODULE_PARAM_PREFIX
#define MODULE_PARAM_PREFIX "block."
module_param_cb ...
コードに入れる前に/sys/module/block/parameters/do_partscan
このようにテストしたことはありません。 ]