Что означает If ! шопт –oq posix; именно в смысле?

Я действительно сделал это сегодня утром! Мой ноутбук, на котором я это делал, использует устаревшую загрузку BIOS на основе MBR -(ThinkPad X201 Tablet ), но большинство этих шагов должны быть одинаковыми для (u )EFI и «устаревших» BIOS. Я делал подобное на Macintosh на основе EFI -в прошлом.

1. Присвойте разделам на новом диске новые идентификаторы UUID, чтобы их можно было различить.

Чтобы обновить UUID нового диска, загрузитесь со старого диска и запустите (для раздела типа ext *):

tune2fs -U `uuidgen` /dev/sdb1

…если /dev/sdb1— это раздел вашего нового диска с -по -по -UUID и вы загружаетесь с /dev/sda.

Если он выдает ошибку, то, вероятно, он попросит вас запустить проверку файловой системы перед переименованием. Запустите команду tune2fs, а затем снова запустите tune2fs.

Для других файловых систем вам нужно выяснить, как вы можете изменить UUID. Вот еще два распространенных:

  • btrfs использует btrfstune -U `uuidgen` /dev/sdb1.
  • Я думаю, что XFS использует xfs_admin -U `uuidgen` /dev/sdb1, но это не так. На 100% уверен в этом, так как я никогда не использовал XFS лично.

Повторите это для всех разделов на новом диске.

2. отредактировать новый диск /etc/fstab.

Смонтируйте корневой раздел нового диска и отредактируйте /etc/fstab, чтобы заменить UUID старого диска на новый UUID. Вы можете проверить, какие у вас новые UUID, запустив blkid.

3. Загрузитесь с нового диска (с временным временным решением ), прежде чем продолжить

.

На этом этапе для временной однократной -загрузки на новый диск вы можете указать root=/dev/sdb1(, если /dev/sdb1является корневым разделом вашего нового диска )в параметрах ядра. В GRUB2,это так же просто, как нажать «e» на загрузочной записи Linux и прикрепить ее к концу строки, начинающейся с linux. Если вся ваша установка Linux была на одном разделе (без отдельного домашнего раздела и т. д. ), вы можете сделать это с самого начала (до изменения UUID ).

4. Обновите виртуальный диск с помощью нового файла fstab, чтобы будущие загрузки использовали правильный диск.

Далее нам необходимо обновить загружаемый виртуальный диск. В качестве следующего шага я настоятельно рекомендую просто удалить исходный диск, если это возможно. Если вы можете это сделать, то при обновлении grub вы легко сможете избежать добавления старого диска в доступные записи в меню загрузки вашего нового диска.

В любом случае, как пользователь root, вы должны запустить (на Debian и его производных; Я считаю, что команда update-initrdна некоторых других):

update-initramfs -u

4.5 обновить пункты меню GRUB (, возможно, это не обязательно)

Я не уверен, что это действительно требуется, мне стыдно признаться. Я сделал это, потому что «это не повредит», а на моем ноутбуке этого не произошло.

grub-install /dev/sdX

(где /dev/sdX — это диск, на который вы хотите переустановить загрузчик grub. Не указывайте раздел, например, /dev/sdX1 и т. д. — только укажите имя устройства ).

Благодаря этому мой клонированный диск загрузился без проблем с первой попытки. Я делал этот процесс более или менее таким же образом в прошлом, когда в последний раз мигрировал на диск большего размера.

Возможно, вам придется изменить приоритет загрузки ваших дисков в настройках BIOS/ (U )EFI, чтобы он автоматически использовал ваш диск, если он по-прежнему вызывает у вас проблемы.

0
18.06.2020, 11:58
1 ответ

Предполагая, что Ifна самом деле if, строка вводит оператор if, который запускает команду ! shopt -oq posixв качестве теста.

Утилита shoptв оболочке bash— это утилита, используемая для установки определенных параметров оболочки. Эту утилиту также можно использовать для проверки того, установлен ли конкретный параметр оболочки. Это то, для чего утилита используется в утверждении ifв вопросе.

Опция -oпредполагает, что заданная опция является одной из опций, допустимых для set -o(, см. help setв bash), а опция -qотключает утилиту, т.е. выдает только статус выхода, но не выводит. Статус выхода shoptбудет использоваться оператором if, чтобы определить, следует ли выполнять тело оператора ifили нет.

Тест проверяет, установлен ли параметр оболочки posixв оболочке bash, и если это не так, (интерпретация результата вызова shoptинвертируется предыдущим!), будет выполнено тело инструкции if.

См. также help shoptв интерактивном сеансе bash.

Утилита shopt— это не стандартная утилита, а встроенная -утилита, специально предоставляемая оболочкой bash.

0
18.03.2021, 23:26

Теги

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