Как установить grub на диск с помощью UUID?

В базовом sed диапазоны выражений в квадратных скобках соответствуют Posix. В Posix диапазоны выражений в квадратных скобках следуют порядку сортировки. Порядок сортировки определяется на основе числового значения символа только в локали C. Но только для однобайтовых значений. Остальные локали не определены в Posix.

Чтобы заставить диапазон работать в выражении скобок sed, нам нужно использовать порядок сортировки, который сортируется по числовой кодовой точке Unicode, это C.UTF -8. Но это создает вторичное требование кодирования символов диапазона в utf8:

  • Получить символьное восьмеричное представление диапазона кодовых точек Unicode (, если используется локаль utf -8):

    $ printf '\u452\u490' | od -An -to1
    

    Если не используется локаль utf -8, преобразовать значения в utf -8:

    $ printf '\u452\u490' | iconv -t utf-8 | od -An -to1
    321 222 322 220
    
  • Добавьте тире и \o, чтобы он работал в старой/настоящей версии sed:

    $ printf '\o%s\o%s-\o%s\o%s' $(printf '\u452\u490'|iconv -tutf-8|od -An -to1)
    \o321\o222-\o322\o220
    
  • Использовать этот диапазон можно в sed:

    $ echo "$a" | LC_ALL=C.UTF-8 sed 's/[^\o321\o222-\o322\o220]//g'
    
  • Но убедитесь, что локаль C.UTF -8 и что заданная строка закодирована в utf8, и преобразуйте ее обратно в используемую локаль:

    $ echo "$a" | iconv -t utf-8 |
                  LC_ALL=C.UTF-8 sed 's/[^\o321\o222-\o322\o220]//g' |
                                    iconv -f utf-8
    

    Обратите внимание , что выше мы использовали оболочку для преобразования \u452\u490.

GNU awk может генерировать строку символов с учетом шестнадцатеричного кода Unicode (при условии, что действующая локаль разрешает такие символы):

<<<"$a" awk 'BEGIN{for(i=0x452;i<=0x490;i++){r=r sprintf("%c", i)}}
 {gsub("[^" range "]", "")}1'

Если текущая локаль не содержит эти точки кода Unicode -в кодовой точке Unicode, вам необходимо преобразовать локаль в локаль, которая, как известно, содержит такие точки кода -и использовать соответствующую переменную среды локали, что-то как:

<<<"$a" iconv -t utf8 |  
LC_ALL=en_US.UTF-8 awk '
        BEGIN{for(i=0x452;i<=0x490;i++){r=r sprintf("%c", i)}}
        {gsub("[^" r "]", "")}1
        ' | iconv -f utf8

Итог либо более высокая оболочка (GNU bash или zsh )либо awk (требуется только GNU ).

Или используйте язык более высокого уровня, например perl:

$ echo "$a" | perl -Mopen=locale -ane 's/[^\x{452}-\x{490}]//g; print'
-1
18.02.2020, 12:17
2 ответа

Обычно вы можете найти UUID таблицы разделов (PTUUID )из /dev/sdaс помощью следующей команды:

sudo blkid /dev/sda

Я никогда не пытался использовать этот PTUUID для установки grubна диск. Поэтому я не могу сказать вам, работает ли это или ваш диск чист после этого.
редактировать :уточнение таблицы разделов PTUUID <>.
edit2 :Я провел дополнительное исследование, и PTUUID не то, на что вы хотите установить grub!!
Поскольку нет UUID для всего жесткого диска, вам нужно ответить на первый вопрос:Вы не можете найти UUID для /dev/sda, так как его нет.
Что касается вашего второго пункта, вы можете (или могли бы? )установить GRUB в раздел. Существует хорошее объяснение того, как это сделать, если вы перейдете по этой ссылке

.
0
28.04.2021, 23:23

После установки в MBR GRUB не заботится о том, какой номер был у диска во время установки. Этап 1 GRUB загружает этап 2 GRUB, который, насколько мне известно, должен находиться на том же диске. Однако ядро ​​может находиться на другом диске, а раздел на этом диске можно идентифицировать по UUID. Предположим, ваш Linux в настоящее время загружается с sdbи вы подготовили вспомогательный разделsdax:

mount /dev/sdax /mnt
grub-install /dev/sda --boot-directory=/mnt
grub-mkconfig -o /mnt/grub/grub.cfg

Это установит этап 1 GRUB в MBR sda, этап 2, а данные конфигурации перейдут в файловую систему -на sdax.

Использование этого для обеспечения безопасности — ужасная идея. Безопасность по неизвестности не работает. Любой, у кого есть диск Super GRUB2, сможет загрузить вашу систему.

-1
28.04.2021, 23:23

Теги

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