Почему жесткий диск USB медленный (читает медленнее, чем пишет )?

Похоже, что grep — правильный инструмент для «поиска» строки. Осталось определить такую ​​строку с помощью регулярного выражения. Первая проблема заключается в определении границ слова. Это не так просто, как «пробел», поскольку a book, a lampиспользует ,в качестве разделителя слов, в той же концепции многие другие символы или даже начало или конец строки могут действовать как разделитель слов. В GNU grep есть несколько разделителей слов:

  • \<начало слова.
  • \>конец слова.
  • \bграница слова.

Все они предполагают, что слово представляет собой последовательность из [a-zA-Z0-9_]символов. Если вас это устраивает, это регулярное выражение может работать:

 grep -o '\<.\{64\}\>' file

Если бы вы могли использовать расширенное регулярное выражение, \можно было бы уменьшить:

 grep -oE '\<.{64}\>' file

Выбирает от «начала слова» (\<), 64({64})символов(.)до «конца слова»(\>)и печатает только совпадающие(-o)части.

Однако точка(.)будет соответствовать любому символу , что может быть слишком много.

Если вы хотите быть более строгим при выборе (шестнадцатеричных цифр ), используйте:

 grep -oE '\<[0-9a-fA-F]{64}\>' file

Это позволит использовать шестнадцатеричные цифры в нижнем регистре или в верхнем регистре. Но если вы действительно хотите быть строгим, так как некоторые не -символы ASCII могут быть включены, используйте:

 LC_ALL=C grep -oE '\<[0-9a-fA-F]{64}\>' file

Некоторые реализации grep (как grep -P )не имеют «начала слова» или «конца слова» (, как \<и \>), но имеют «границу слова». "(как\b):

grep -oP '\b[0-9a-fA-F]{64}\b' file

Некоторые языки принимают границы слов POSIX [[:<:]]и [[:>:]], но не perl и только из PCRE 8.34 .

И существует гораздо больше разновидностей "границы слов" .

1
05.03.2021, 22:59
1 ответ

Отвечая на ваш первый вопрос, 40 МБ/с звучит как узкое место для USB 2.0. Pi 4 поддерживает USB 3, но убедитесь, что ваш жесткий диск и кабель имеют USB 3.

Обновлено информацией из комментариев:

Также обратите внимание, что ваш rsyncвключает в себя 2-сторонний :внешний жесткий диск и где бы вы ни находились. Чтобы удалить вторую часть из уравнения, попробуйте ddтолько для -эталонного тестирования жестких дисков:

  • Запись с участием файловой системы:sudo dd if=/dev/zero of=/mnt/usb_hdd/blob bs=16M count=100 status=progress oflag=direct
  • Чтение из файловой системы:sudo dd if=/mnt/usb_hdd/blob of=/dev/null bs=16M count=100 status=progress
  • Чтение прямо с диска:sudo dd if=/dev/sda of=/dev/null bs=16M count=100 status=progress iflag=direct
1
18.03.2021, 22:27

Теги

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