Скрипт BASH / shell, сбой blkid с символами новой строки в метках дисков - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть сценарий BASH / shell, работающий в Linux, но иногда возникает проблема с получением меток диска с помощью blkid. Blkid получает метки диска и UUID данного диска.

Пример вывода blkid:

# blkid /dev/sda1
/dev/sda1: LABEL="Home" UUID="f1e5e82b-1c75-4fd7-8841-6ad766152dcf" TYPE="ext2"

Проблема возникает, когда метка диска имеет символ новой строки ... Я включил соответствующую функцию. Кажется, проблема в команде eval. Кто-нибудь может мне помочь?

blkid_name_generator() {
   #Gather blkid output and filter out required device
   if [ ! -f /tmp/blkid.txt ]; then
      blkid -c /dev/null > /tmp/blkid.txt
   fi
   blkid_cleaner &
   LABEL=""
   LABEL1=""
   eval $( cat /tmp/blkid.txt | grep "$@:" | cut --delimiter=" " -f 2- | sed -e 's/ /;/g')
   LABEL1=${LABEL//;/ } # akita beta4 fix: remove newlines below
   LABEL=`echo $LABEL1 | tr -d '\n'` # akita beta5 fix, remove newlines from drive label
   #Generate drive label
   [ "$LABEL" = "" ] && ONEDRVLABEL="$@\n \n " || ONEDRVLABEL="${LABEL}\n($@)\n "
   echo "${LABEL}" and "${ONEDRVLABEL}"
} 

blkid_name_generator /dev/sda1

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Вот мой фрагмент bash:

while read curline; do
  if [[ ${curline:0:1} == "/" ]]; then
    [[ $prevline ]] && echo "$prevline"
    prevline="$curline"
  else
    prevline+="$curline"
  fi
done < $INPUTFILE

[[ $prevline ]] && echo "$prevline"

Вот мой тестовый файл:

/dev/sda1: LABEL="Boot" UUID="fdc5e51d-3da6-4edf-bf07-6397b1765797" TYPE="ext2"
/dev/sda2: LABEL="Root" UUID="f883df24-1b93-46fb-8990-840774c380c4" TYPE="ext4"
/dev/sda3: LABEL="Usr" UUID="ba759de3-e0e4-4603-a324-f11dc25fa784" TYPE="reiserfs"
/dev/sdb1: LABEL="Persis
tents" UUID="50b81ef0-a38b-4677-b9d9-9548b29ce2bb" TYPE="ext4"
/dev/sdc1: LABEL="Tempo
raries" UUID="a649c535-1a8a-4b2b-b0a0-4afbdc60a3bc" TYPE="reiserfs"
/dev/sdd1: LABEL="Usr
Portage" UUID="a228148e-6405-4bbe-990f-df6eaebb1b1d" TYPE="reiserfs"
/dev/sda1: LABEL="Boot" UUID="fdc5e51d-3da6-4edf-bf07-6397b1765797" TYPE="ext2"
/dev/sda2: LABEL="Root" UUID="f883df24-1b93-46fb-8990-840774c380c4" TYPE="ext4"

Вот мой тестовый файл после обработки фрагментом bash:

/dev/sda1: LABEL="Boot" UUID="fdc5e51d-3da6-4edf-bf07-6397b1765797" TYPE="ext2"
/dev/sda2: LABEL="Root" UUID="f883df24-1b93-46fb-8990-840774c380c4" TYPE="ext4"
/dev/sda3: LABEL="Usr" UUID="ba759de3-e0e4-4603-a324-f11dc25fa784" TYPE="reiserfs"
/dev/sdb1: LABEL="Persistents" UUID="50b81ef0-a38b-4677-b9d9-9548b29ce2bb" TYPE="ext4"
/dev/sdc1: LABEL="Temporaries" UUID="a649c535-1a8a-4b2b-b0a0-4afbdc60a3bc" TYPE="reiserfs"
/dev/sdd1: LABEL="UsrPortage" UUID="a228148e-6405-4bbe-990f-df6eaebb1b1d" TYPE="reiserfs"
/dev/sda1: LABEL="Boot" UUID="fdc5e51d-3da6-4edf-bf07-6397b1765797" TYPE="ext2"
/dev/sda2: LABEL="Root" UUID="f883df24-1b93-46fb-8990-840774c380c4" TYPE="ext4"

Надеюсь, это поможет!

0 голосов
/ 11 августа 2013

Благодаря этому вопросу ... Я мог бы найти решение для другой проблемы.Пример (sda2 = раздел ntfs):

blkid / dev / sda2

Ошибка сегментации (дамп ядра)

Трудно найти руководство по устранению неполадок для этой проблемы (ОС на основе Ubuntu илилюбой другой)

Причиной является неправильная метка в разделе NTFS.(конечно, неправильное формирование мы не можем видеть как переводы строк ;-) Решение: Очистите LABEL с помощью GParted;затем переписать его или установить новую метку.

0 голосов
/ 23 ноября 2011

Я не понимаю точно, что собирается делать скрипт (кроме пропущенных битов).

Вот что я придумал:

blkid | perl -ne 'print "$1\n" if m/LABEL="(.*?)"/o'

Это покажет это (в моей системе):

test^J123
WIN7VIRT
TEMP

Обратите внимание, как символ новой строки в метке обозначен как ^J? Просмотр через шестнадцатеричный кодер показывает, что это действительно двухсимвольная комбинация 0x5e 0x4a

Надеюсь, вы сможете продвинуться дальше с этим.


PS: «доказательство» того, что символ новой строки действительно правильно указан в метке тома

tune2fs /dev/sdc1 -l
tune2fs 1.41.14 (22-Dec-2010)
Filesystem volume name:   test
123
Last mounted on:          /media/9868d90c-aede-4e7a-b105-d9312f8b17ab
Filesystem UUID:          9868d90c-aede-4e7a-b105-d9312f8b17ab
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
...

и на уровне блока:

dd if=/dev/sdc1 count=10 | xxd | grep 123
0000470: b105 d931 2f8b 17ab 7465 7374 0a31 3233  ...1/...test.123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...