Удалить пробелы из всех элементов массива

Были внесены изменения как в ядро ​​Linux, так и в утилиты для поддержки дисков Advanced Format. Эти изменения гарантируют правильное выравнивание всех разделов на дисках расширенного формата на границах сектора 4K. Поддержка ядра для дисков Advanced Format доступна в версиях ядра 2.6.31 и выше. Поддержка порционирования и форматирования Диски расширенного формата доступны в следующих утилитах Linux:

Fdisk: GNU Fdisk - это утилита командной строки, которая разбивает жесткие диски. Версии 1.2.3 и выше поддерживают диски расширенного формата.

Parted: GNU Parted - графическая утилита для разбиения жестких дисков. Версии 2.1 и выше поддерживают диски расширенного формата.

4K native (4Kn) диски имеют размер логического сектора 4 КБ. Современные операционные системы могут хранить данные на этих дисках, но обычно они не могут загружаться с этих дисков. Эти диски обычно являются внешними дисками с USB-соединением.

Чтобы создать раздел, используемый в качестве устройства хранения мультимедиа, просто нажмите Ctrl + Alt + T на клавиатуре, чтобы открыть терминал. Когда он откроется, запустите следующие команды:

sudo mkfs.ext4 -m 0 /dev/sdb1

Большинство дисков 4k имеют размер физического сектора 4096 байт, так что 3TB может поместиться на пластинах, но у них все еще есть 512B логический размер сектора для совместимости с ОС, которые ожидают, что один сектор будет 512B. Вот почему, когда вы используете команду печати, разделенной для печати деталей, говорится, что размер сектора логический / физический 512B / 4096B. Это нормально.

Это «преобразование» выполняется интеллектом на самом диске, и это нормально. Это должно сработать.

Если вы не видите первую проверку 3TB в BIOS, это не ограничивает размер диска. Возможно, вам понадобится обновление BIOS для поддержки диска.

Также используется parted для создания раздела, начиная с 0, что является ошибкой. Вам нужно запустить первый раздел в секторе 2048, который эквивалентен 1MiB, чтобы разделы на диске были выровнены для оптимальной производительности.

Итак, измените устройство на MiB, распечатайте данные на диске, которые также будут напечатайте размер диска в MiB и создайте раздел (если вам нужен только один раздел), начиная с 1MiB и заканчивая на последнем MiB (или один до последнего).

Например, 3TB-диск должен имеют в действительности что-то вроде 2,861,022 MiB. Таким образом, создание единого раздела, охватывающего весь диск на дисководе, называемом / dev / sdX, будет таким же (замените X правильной буквой):

sudo parted /dev/sdX
unit MiB
mklabel gpt
print (to see the total size in MiB)
mkpart primary 1 2861022
quit

Если размер диска немного больше MiB или менее 2861022 отрегулируйте конечное местоположение.

Вот и все. После этого создайте нужную файловую систему в разделе.

Источники и дополнительное чтение

Источники и дополнительное чтение

Проверка ошибок и установка 4k-дисков в Linux

Проверка ошибок и установка 4k-дисков в Linux

1
задан 4 July 2015 в 23:11

3 ответа

Использование более поздних версий GNU grep (поставляется с Ubuntu) с опцией -z:

$ IFS=, arrayvar=( $(grep -Pzo '\s+VARIABLES\s+{\K[^}]+(?=})' temp1 | tr -d '[:space:]') )

$ echo "${arrayvar[0]}"
a9EventCode

$ echo "${arrayvar[1]}"
a9ControllerNumber

$ echo "${#arrayvar[@]}"
6
-z позволяет grep обрабатывать строки входного текста, разделенные ASCII NUL вместо новых строк, чтобы мы могли буквально соответствовать символам новой строки. Образец PCRE \s+VARIABLES\s+{\K[^}]+(?=}) будет соответствовать тексту внутри {}. Затем мы удалили пробелы (пробел, табуляцию, новую строку) с помощью tr -d '[:space:]'. Когда IFS установлен в ,, мы можем создать массив с запятой разделенные строки.
1
ответ дан 23 May 2018 в 19:20

Делайте все с awk, как показано ниже:

arrayvar=($(awk '/'"$vovar"'/,/}/ {gsub("'"$vovar"'"," "); gsub("}"," "); gsub("{"," ");gsub(","," ");all=all$0} END {print all}' temp1 ))
1
ответ дан 23 May 2018 в 19:20

Использование perl

perl -ne 'exit if ($start == 1 && /}/ ); if ($start == 1) {s/\s*([0-9]|\w+)(,|)/$1/g; printf "%s",$_}; $start=1 if (/'"$vovar"'/);' <your_input_file>

Объяснение

exit if ($start == 1 && /}/ ); Выход из сценария, если есть }, если VARIABLES ( vovar) передается if ($start == 1) {s/\s*([0-9]|\w+)(,|)/$1/g; printf "%s",$_} Печатается строка, если передано VARIABLES (vovar) $start=1 if (/'"$vovar"'/) Установите маркер начала, если VARIABLES (vovar) передано

Пояснение

$ vovar=VARIABLES
$ arrayvar=($(perl -ne 'exit if ($start == 1 && /}/ ); if ($start == 1) {s/\s*([0-9]|\w+)(,|)/$1/g; printf "%s",$_}; $start=1 if (/'"$vovar"'/);' foo))
$ for((i=0;i<${#arrayvar[@]};i++)); do echo "${arrayvar[i]}"; done
a9EventCode
a9ControllerNumber
a9ChannelNumber
a9TargetNumber
a9LunNumber
a9EventTimeStamp


$ cat foo
        ENTERPRISE eMylexRaidEventInformation
        VARIABLES {
            a9EventCode,
            a9ControllerNumber,
            a9ChannelNumber,
            a9TargetNumber,
            a9LunNumber,
            a9EventTimeStamp
        }
 DESCRIPTION
 "device became online."

 --#SUMMARY "[Event %d ctl %d chn %d tgt %d lun %d Time %d :] device became online."
 --#ARGUMENTS {0,1,2,3,4,5}
 --#SEVERITY INFORMATIONAL
         --#TIMEINDEX 5
 --#STATE OPERATIONAL
 ::= 1
1
ответ дан 23 May 2018 в 19:20

Другие вопросы по тегам:

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