Я действительно сделал это сегодня утром! Мой ноутбук, на котором я это делал, использует устаревшую загрузку BIOS на основе MBR -(ThinkPad X201 Tablet ), но большинство этих шагов должны быть одинаковыми для (u )EFI и «устаревших» BIOS. Я делал подобное на Macintosh на основе EFI -в прошлом.
Чтобы обновить UUID нового диска, загрузитесь со старого диска и запустите (для раздела типа ext *):
tune2fs -U `uuidgen` /dev/sdb1
…если /dev/sdb1
— это раздел вашего нового диска с -по -по -UUID и вы загружаетесь с /dev/sda
.
Если он выдает ошибку, то, вероятно, он попросит вас запустить проверку файловой системы перед переименованием. Запустите команду tune2fs
, а затем снова запустите tune2fs.
Для других файловых систем вам нужно выяснить, как вы можете изменить UUID. Вот еще два распространенных:
btrfstune -U `uuidgen` /dev/sdb1
. xfs_admin -U `uuidgen` /dev/sdb1
, но это не так. На 100% уверен в этом, так как я никогда не использовал XFS лично. Повторите это для всех разделов на новом диске.
/etc/fstab
. Смонтируйте корневой раздел нового диска и отредактируйте /etc/fstab
, чтобы заменить UUID старого диска на новый UUID. Вы можете проверить, какие у вас новые UUID, запустив blkid
.
На этом этапе для временной однократной -загрузки на новый диск вы можете указать root=/dev/sdb1
(, если /dev/sdb1
является корневым разделом вашего нового диска )в параметрах ядра. В GRUB2,это так же просто, как нажать «e» на загрузочной записи Linux и прикрепить ее к концу строки, начинающейся с linux
. Если вся ваша установка Linux была на одном разделе (без отдельного домашнего раздела и т. д. ), вы можете сделать это с самого начала (до изменения UUID ).
Далее нам необходимо обновить загружаемый виртуальный диск. В качестве следующего шага я настоятельно рекомендую просто удалить исходный диск, если это возможно. Если вы можете это сделать, то при обновлении grub вы легко сможете избежать добавления старого диска в доступные записи в меню загрузки вашего нового диска.
В любом случае, как пользователь root, вы должны запустить (на Debian и его производных; Я считаю, что команда update-initrd
на некоторых других):
update-initramfs -u
Я не уверен, что это действительно требуется, мне стыдно признаться. Я сделал это, потому что «это не повредит», а на моем ноутбуке этого не произошло.
grub-install /dev/sdX
(где /dev/sdX — это диск, на который вы хотите переустановить загрузчик grub. Не указывайте раздел, например, /dev/sdX1 и т. д. — только укажите имя устройства ).
Благодаря этому мой клонированный диск загрузился без проблем с первой попытки. Я делал этот процесс более или менее таким же образом в прошлом, когда в последний раз мигрировал на диск большего размера.
Возможно, вам придется изменить приоритет загрузки ваших дисков в настройках BIOS/ (U )EFI, чтобы он автоматически использовал ваш диск, если он по-прежнему вызывает у вас проблемы.
Предполагая, что 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
.