Как я могу заставить Linux не пытаться *какие-либо* автоматические операции чтения с физического жесткого диска?

Укороченная версия, в которой мы не присваиваем пустые значения нулю:

perl -lane '
   ++$h{$i[!$h{$F[0]} ? @i : -1]=$F[0]}{$F[1]}}{
   print join "\t", "\t", @h = sort keys %{ +{ map { map { $_ => 1 } keys %$_ } values %h } };
   print join "\t", $_, @{$h{$_}}{@h} for @i;
' yourfile

perl -lane '
   $i[@i]=$F[0] unless $h{$F[0]};
   ++$h{$F[0]}{$F[1]}}{
   @h = sort keys %{ +{ map { map { $_ => 1 } keys %$_ } values %h } };
   print join "\t", "\t", @h;
   for my $date ( @i ) {
      my $href = $h{$date};
      print join "\t", $date, map { $href->{$_} || 0 } @h;
   }
' yourfile

Результаты

                A       B       C
2017-07-30      3       2       1
2017-07-31      1       2       2

Структуры данных:

  • хеш %h, который имеет keysдаты и значения, суб-хэши -с ключами A, B, C и т. д., а соответствующие значения являются их соответствующими подсчетами в эти конкретные даты.

  %h = (
       2017-07-30 => {
           A => 3,
           B => 2,
           C => 1,
       },
      ...
  );

  • Массив @i, в котором хранятся даты в порядке их появления. Мы проталкиваем даты в массив @iтолько тогда, когда они не были замечены ранее IOW, когда они были замечены только в первый раз. Порядок обеспечивается позицией массива.
  • Массив @hимеет уникальные ключи после суммирования всех ключей «A», «B», «C» и т. д. из хэша %h.
2
19.12.2019, 05:01
1 ответ

Вам придется удалить всю пользовательскую среду, которая выполняет множество автоматизаций (systemd, udev et al. ), так что создайте минимальный initramfs только с busybox и ddrescue (или другими инструментами, которые вам нужны ). Вы можете использовать это руководство для справки:https://wiki.gentoo.org/wiki/Custom_Initramfs

Кроме того, вам придется скомпилировать специальное ядро, которое не поддерживает таблицы разделов, иначе само ядро ​​само попытается прочитать их автоматически.

Это необычная конфигурация, так как люди, конечно, хотят, чтобы их разделы отображались, поэтому обычно все ядра имеют для них значение «да»:

CONFIG_MSDOS_PARTITION=y # for old school dos/mbr partitions
CONFIG_EFI_PARTITION=y   # for new GPT/UEFI partitions
# but there are many others like:
CONFIG_AIX_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y

Чтобы избавиться от чтения жесткого диска ядром, вы должны отключить все это. Сделайте ядро, которое не поддерживает таблицы разделов любого типа.

И даже в этом случае вам, вероятно, следует сначала загрузить собственное ядро ​​+ initramfs, прежде чем -подключать диск в горячем режиме. В противном случае BIOS уже просканирует устройство на наличие загрузочных разделов. Вы можете отключить это, но у вас нет прямого контроля над этим.

Удачи в выздоровлении.


is there a kernel configuration option I need to set in order to stop all automatic reads to the drive?

Параметр ядра сделал бы это намного проще, но я не знаю такого. В лучшем случае вы можете полностью занести устройство в черный список, заставив его исчезнуть. Может быть полезно для мертвого встроенного -устройства, от которого вы просто хотите избавиться, но тогда вы также ничего не сможете восстановить из него.

1
27.01.2020, 22:16

Теги

Похожие вопросы