Фон
У меня была новая система, на которую я потратил много времени, настраивая программное обеспечение для выполнения всевозможных служб, а затем обнаружил, что диск потенциально нестабилен. Поэтому я решил заменить диск, сохранив его содержимое для нового диска.
У системного диска также была проблема с загрузкой в правильном режиме kernel
, которую я, похоже, не мог исправить (я следовал всем инструкциям grub
, но он просто не загружался правильно kernel
по умолчанию, только если вы вручную выбирали правильный). Поэтому я решил, что лучшим способом будет просто выполнить новую установку на Fedora Server
новый диск, и это исправит проблему загрузки по ходу дела.
Что случилось
Новый диск был намного больше, поэтому я разбил его немного по-другому во время процесса установки. Затем я извлек привод и вставил новый и старый системные диски в другой сервер, который был у меня поблизости. Из предосторожности я сохранил с fstab
нового системного диска, зная, что на нем есть раздел UUIDs
.
Есть много способов перемещать вещи, и я решил, что мне нужен чистый корневой раздел на новом системном диске. Я подумал, что, dd
возможно, смогу это сделать, но я привык использовать его, когда разделы имеют одинаковый размер, и был немного не уверен, поэтому вместо этого я просто переформатировал корневой раздел ("/") с помощью gparted
. Затем я переместил файлы с помощью обычных инструментов ОС. Затем я вырезал и вставил UUID
материал из новой установки и вставил его в очень нестандартный fstab
с сервера, который я чинил.
Все прошло отлично.
Затем я попытался загрузить систему. Она загрузилась, затем добралась до grub
загрузчика, автоматически выбрала нужное ядро и понеслась! ... Пока не перестала!
Он должен был "показать экран загрузки Plymouth" или что-то в этом роде, сделать паузу, а затем выдать кучу предупреждений о тайм-ауте от чего-то, называющего себя dracut
. Отсюда я сделал снимок экрана с помощью своего телефона. Там написано:
Warning: Could not boot.
Starting Dracut Emergency Shell...
Warning: /dev/disk/by-uuid/<a uuid> does not exist
Generating "/run/initramfs/rdsosreport.txt"
затем следует предложение использовать journalctl
и, возможно, сохранить rdsosreport.txt
для сообщения об ошибках.
ACK! Что делать? Я искал везде и всюду это Warning [...] does not exist
и dracut emergency shell
то, что было упомянуто выше. Nada!
решение1
Обновить fstab
Необходимо обновить /etc/fstab
файлы с правильным UUID раздела.
Обновление криптотаба
Если ваш предыдущий раздел был зашифрован, вам необходимо удалить запись из/etc/crypttab
Если ваш новый раздел зашифрован, вам необходимо добавить соответствующую запись в/etc/crypttab
Регенерировать initramfs
После обновления /etc/fstab
файла /etc/crypttab
вам необходимо обновить образ initramfs с помощью dracut.
Вы можете обновить образ dracut из аварийной оболочки dracut, запустив
# dracut --hostonly --regenerate-all --force
Рекомендации
решение2
Сообщение:
Warning: /dev/disk/by-uuid/<uuid> does not exist
является важной подсказкой.
Оказывается, корневой раздел UUID
хранится в двух местах в grub2
части раздела современного Fedora Server /boot
. Но в этом сценарии на самом деле есть три UUID
проблемы.
Переформатирование корневого раздела («/») фактически изменило UUID
.Итак, новое UUID
должно быть сначала обнаружено, а затем помещено в правильные места. Есть много способов найти, UUIDs
но один инструмент командной строки для этого blkid
- как в этом примере:
# blkid
/dev/sda1: UUID="64bbac09-1a12-4bea-8873-212ffb56f2a8" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="8a09913a-fdb2-42a0-98e3-6b89e16374d2"
Обратите внимание, что для каждого раздела есть два, UUIDs
показанных этим инструментом; вам нужен первый из них. Обратите внимание также, что непривилегированные пользователи не могут запускать blkid
.
UUID
Вот три места, где должен располагаться корневой раздел :
- В
/etc/fstab
строке, где описано монтирование корневого раздела, и; - В
/boot/grub2.cfg
строке настройки параметров ядра. Самый быстрый способ найти его — поискать первый,UUID
если он у вас еще есть. Или поискать"set kernelopts="root=UUID="
, и; - В
/boot/grub2/grubenv
строке, которая похожа на строку, указанную в/boot/grub2.cfg
файле. Найдите:kernelopts=root=UUID=
Не забудьте изменить только один новый UUID и оставить все остальное как есть. Возможно, сделайте резервную копию файла перед редактированием, на всякий случай!