надежный скриптовый способ получения UUID загрузочного раздела

echo -n "Enter number : "
read num

length=$(echo $num | wc -c)
length=$(( $length - 1 ))

echo "Your number $num in words : "
for (( i=1; i<=$length; i++ ))
do
   # get one digit at a time
    digit=$(echo $num | cut -c $i)
   # use case control structure to find digit equivalent in words 
    case $digit in
       0) echo -n "zero " ;;
       1) echo -n "one " ;;
       2) echo -n "two " ;;
       3) echo -n "three " ;;
       4) echo -n "four " ;;
       5) echo -n "five " ;;
       6) echo -n "six " ;;
       7) echo -n "seven " ;;
       8) echo -n "eight " ;;
       9) echo -n "nine " ;;
  esac 
done

 # just print new line
echo ""
3
21.03.2019, 18:58
3 ответа

Начну с того, что это не относится к части вашего вопроса об автоматической модификации /etc/default/grub, но я подозреваю, что в этом нет необходимости.

UUID должен быть статическим, если вы не переформатируете раздел. Предполагая, что вы знаете базовое устройство, вы смотрите на /dev/disk/by-uuidи видите что-то вроде:

$ ls -l /dev/disk/by-uuid
... 9577f213-665a-427b-aa45-8927b177224e ->../../sda1
...

Так что вам просто нужно найти соответствующий для устройства, которое является вашим загрузочным разделом.

Также есть команда blkid:

$ blkid /dev/sda1
/dev/sda1: UUID="9577f213-665a-427b-aa45-8927b177224e"...

Рассматриваете ли вы ситуацию, когда UUID по какой-то причине изменяется?

3
27.01.2020, 21:24

Сначала найдем загрузочный раздел с

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' 

Затем направьте его вывод, как любезно предложил Энди Далтон выше, в blkid

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' | blkid $1
0
27.01.2020, 21:24

Если вы ищете UUID устройства, смонтированного как /bootв работающей системе, чистый способ — findmntизutil-linux:

$ findmnt --output=UUID --noheadings --target=/boot 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

При использовании этих -поясняющих опций он выводит только UUID. Это также избавит вас от необходимости выяснять, какое устройство является релевантным.

Если вы просто ищете UUID известного вам устройства, независимо от того, смонтировано оно или нет, вы можете использовать blkid, как указано в ответе Энди Далтона:

$ sudo blkid -s UUID -o value /dev/vda1 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

Опции -s tagи -o formatограничивают вывод только значением тега UUID.

Затем вы можете добавить UUID к GRUB_CMDLINE_LINUXс помощью команды как:

sed -i.bkp 's/^\([[:blank:]]*GRUB_CMDLINE_LINUX=".*\)\(".*\)$/\1 fips=1 boot=UUID='"$newuuid"'\2/' /etc/default/grub

Что предполагает синтаксис опции -iGNU sed:, он отредактирует файл в -месте, а также создаст файл резервной копии grub.bkp.
Обратите внимание, что мы не проверяем наличие параметра командной строки boot; мы просто добавляемfips=1newuuidперед вторым ", таким образом, предполагая, что ваша текущая командная строка заключена в двойные кавычки и не содержит двойных кавычек.

0
27.01.2020, 21:24

Теги

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