Текст печати между тегами (включительно), если определенный текст найден

(Это очень популярный вопрос - с его вариациями можно ознакомиться на https://stackoverflow.com/q/1198691 , https://serverfault.com/q/219739/203726 и https://askubuntu.com/q/87035/740413 )

Существуют ли лучшие методы [чем dd] для [эталонных дисков]?

Да, но их выполнение займет больше времени и потребует знаний о том, как интерпретировать результаты - нет ни одного числа, которое бы рассказало вам все за один раз, потому что на тип теста, который вы должны выполнить, влияют следующие факторы:

  • Вас интересует производительность ввода/вывода, которая является случайной, последовательной или некоторой комбинацией двух?
  • Вы читаете с диска или записываете на него (или некоторой комбинации двух)?
  • Вас беспокоит латентность, пропускная способность или оба?
  • Пытаетесь ли вы понять, как работают разные части одного и того же жесткого диска (как правило, они работают на скорости, которая ближе к центру вращающихся дисков)?
  • Вас интересует, как будет работать данная файловая система при использовании вашего диска, или вы хотите, чтобы результаты были ближе к исходной производительности диска, выполняя ввод/вывод непосредственно к блочному устройству?
  • Вас интересует, как выполняется ввод/вывод определенного размера?
  • Вы выполняете ввод/вывод синхронно или асинхронно?
  • Сколько входов/выходов вы отправляете (отправляете слишком мало данных неправильным способом, и все входы/выходы могут быть кэшированы, поэтому вы завершаете проверку скорости вашей оперативной памяти, а не скорости диска)?
  • Насколько сжимаемым является содержимое записываемых вами данных (например, только нулевые данные являются высоко сжимаемыми, а некоторые файловые системы/диски даже имеют специальный быстрый путь для нулевых данных, что приводит к цифрам, которые недоступны для другого содержимого)?

И так далее.

Вот краткий список инструментов, которые легче всего запускать сверху и сложнее/глубже/глубже снизу:

  1. dd (последовательное чтение или запись, только показывает пропускную способность, может быть настроено на использование файловой системы или блочного устройства, может быть настроено на обход блочного кэша/подождать, пока ввод/вывод будет действительно завершен)
  2. hdparm (только последовательное чтение, только показывает пропускную способность, никогда не использует файловую систему, может быть настроено на обход блочного кэша, тест кэша перечитывает только стартовые 2 МБайта)
  3. GNOME Disk Utility (легко запускается, никогда не использует файловую систему, графически, но требует полной установки GNOME, дает задержки и номера пропускной способности для различных типов ввода/вывода, но рабочая нагрузка записи на самом деле делает чтение/запись/синхронизацию на размер примера).
  4. fio (может делать практически всё, что угодно и даёт подробные результаты, но требует конфигурации и понимания того, как интерпретировать указанные результаты). Вот что говорит об этом Лайнус:

    Грег - достань код FIO Йенса. Он делает всё правильно, в том числе записывает фактическое псевдослучайное содержимое, которое показывает, выполняет ли диск некоторую "дедупликацию" (так же известную как "оптимизация под бенчмарки"):

    .

    [ https://github.com/axboe/fio/ ]

    Все остальное подозрительно - забудьте о Бонни или других традиционных инструментах.

Источник: комментарий, оставленный на Google Plus Грегу Кроа...Хартман Лайнуса Торвальдса.

.

1
23.05.2014, 02:47
4 ответа

Или с GNU [1176380] grep[1176381]:

3
27.01.2020, 23:28
[1175129] Если вы можете использовать [1175524]perl[1175525], то вот решение:
  • Объяснение
  • Каждый раз, когда мы видим [1175868]<Каталог[1175869], мы устанавливаем [1175870]$flag = 1[1175871].
  • Если [1175872]$flag[1175873] равен true (1 означает true в булевом контексте), то мы выталкиваем текущую запись в массив [1175874]@a[1175875].
  • Если мы видим [1175876]
  • Установите [1175886]@a[1175887] на пустой массив для обработки другого блока.
  • 0
    27.01.2020, 23:28
    [1176205] Также можно использовать [1176633] awk
  • 1
    27.01.2020, 23:28
    [1175121] Вот пример в Bash (Вы должны уметь делать что-то похожее практически на любом языке):

    В основном, мы просто сохраняем блок по ходу движения, а затем [1175520] grepping[1175521], чтобы посмотреть, есть ли в нем наш паттерн.

    Это очень просто, и, скорее всего, у него будут проблемы с некоторыми крайними случаями (если в вашем конфигурационном файле есть \, это может сбить с толку, например, [1175522]echo -e[1175523]), но вы могли бы расширить основную идею, чтобы разобраться с ними.

    Пример использования:

    -1
    27.01.2020, 23:28

    Теги

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