Почему "grep -w" соответствует словам, за которыми следует дефис/минус (" -" )?

Поскольку у вас есть аппаратное ограничение с двумя отдельными технологиями USB:

  • USB2.0 имеет максимальную скорость передачи данных 480 Мбит/с
  • USB3.x имеет максимальную скорость передачи данных 5120 Мбит/с (5,0 Гбит/с)

Настройка RAID -1 с использованиемmdadm(multi dустройства admинициатора)будет иметь некоторые недостатки -.

Вариант 1 :Добавить оборудование.

Добавьте разветвитель порта USB 3.x / концентратор USB 3.x и подключите оба жестких диска к концентратору, а концентратор — к порту USB 3.x на Pi, что снизит их индивидуальную максимальную теоретическую скорость передачи до 2560 Мбит/с (5120/2 )вместо подключения одного к порту USB2, а другого к порту USB3, так как это снизит максимальную теоретическую скорость передачиобоихвсего до 480 Мбит/с.¹

Вариант 2 :Жить с некоторой разницей в скорости.²

Ладно, значит, у тебя нет времени,ни денег, ни физического места, чтобы поместить в это решение USB-концентратор, Pi и 2 жестких диска:
Поскольку в RAID (любой версии )нет такого понятия, как «Первичный» и «Вторичный», а только JBOD объединены в один, вы можете использовать параметр write-mostlyдля mdadmдля обойти некоторых несоответствий.

Эта опция определяет один из жестких дисков как «медленный», и все операции чтения будут выполняться с быстрого диска , но все записи будут по-прежнему ожидаться медленным диском . (так что только половина преимуществ диска USB 3.0)

Настройка RAID:

Все следующие команды необходимо выполнять как rootили с sudo.

Предположим, что первый жесткий диск отображается как /dev/sdc, а второй — как /dev/sdd. Выполните следующую команду для создания программного RAID-массива с именем md0с уровнем RAID 1 с использованием 2 жестких дисков:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc /dev/sdd

Только если вы используете опцию #2 , вы должны добавить--write-mostlyперед медленным диском (sdd, взятым в качестве примера ), и использовать следующую команду вместо приведенной выше (наведите курсор на с помощью мыши, чтобы отобразить его, чтобы не запутаться, что использовать):

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc --write-mostly /dev/sdd

Теперь нам нужно создать файловую систему на только что созданном /dev/md0программном RAID:

mkfs.ext4 -F /dev/md0

Теперь мы собираемся смонтировать это пространство в /mnt(, замените это, если вам нужно смонтировать это где-то еще)

mkdir --parents /mnt/md0

И отредактируйте свой fstab, чтобы включить это крепление при каждой загрузке (добавьте вторую строку в конце вашегоfstab):

nano /etc/fstab
/dev/md0  /mnt/md0 ext4 defaults 0 2

Ctrl + XYВведите для сохранения и выхода.

Теперь перезагрузите компьютер, чтобы сделать его активным, или введите следующую команду без перезагрузки:

mount /dev/md0 /mnt/md0

Примечание 1:Самое слабое звено в цепочке определяет общую скорость, поскольку 2 жестких диска становятся одним.:-(
Примечание 2:Спасибо fra -san и Stephen Kitt за указание мне правильного направления для второго варианта!
Примечание 3:Для получения дополнительной информации о mdadmвведите man mdadmна самом pi и прочитайте (все, даже то, что, по вашему мнению, вам никогда не понадобится, например -сборка RAID после провал...);-)
Примечание 4 :RAID не заменяет резервное копирование! ; -П

1
15.09.2021, 10:21
1 ответ

Опция -wдействительно указывает grepискать только те строки, которые соответствуют fruitкак «слову», что означает, что они должны либо начинаться в начале строки, либо предшествовать «не -». ] слово» и либо заканчиваться в конце строки, либо сопровождаться символом «не -слово».

Тем не менее, символ «слово» в соответствии со страницей руководства -документа grep— это:

Word-constituent characters are letters, digits, and the underscore.

Это означает, что -является символом «не -слово», а fruit-будет соответствовать «слову -поиск» для fruit, так как алгоритм сопоставления остановится при достижении -].

Теперь, похоже, вы хотите выбрать только те строки, в которых содержимое между первыми двумя/точно равно fruit, а не , содержащее шаблонfruit. В этих случаях вы должны сделать соответствие более явным :

.
  • С помощью grepвы можете сказать :
    grep "^/fruit/" file.txt
    
    Это привяжет шаблон к началу строки и примет только те строки, где нет -после fruit.
  • В качестве альтернативы,используйте awkс /, установленным в качестве разделителя полей -:
    awk -F/ '!$1&&$2=="fruit"' file.txt
    
    Это будет принимать только строки, которые имеют пустое первое поле (, т.е. начинаются справа с/)и чье второе поле точно fruit.
6
15.09.2021, 10:35

Теги

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