Обновление до 16.04 невозможно загрузить, корневая файловая система только для чтения, измененный grub
Это совершенно глупо (ИМХО). Я обновил один компьютер до 16.04 (Xubuntu), и у меня были проблемы с ним, которые я обсуждал в другом месте, читая здесь. Поэтому я подождал несколько недель, пока этот компьютер не заработал достаточно хорошо, а затем обновил свой другой компьютер, одноядерный, выпущенный в 2006 году. После установки обновления я не смог загрузить Xubuntu. Я попробовал уловки, которые я сделал для своего первого компьютера, я думаю, что наиболее полезным было заменить "тихий режим" на "nomodeset" в /boot/grub/grub.cfg. Все, что я сделал, это загрузил меня в интерфейс командной строки. После входа в систему я обнаружил, что не могу запустить startx, чтобы инициировать среду рабочего стола с графическим интерфейсом. Хммм... Еще немного охоты и пробовал разные вещи, и я обнаружил, что мой корневой раздел был в режиме только для чтения. Я обнаружил, что могу исправить это с помощью команды
sudo mount -o remount,rw /
Как только я это сделал, система сразу попала в среду рабочего стола с графическим интерфейсом (хотя без графического драйвера и с уменьшенным разрешением). Ура! К сожалению, это только для текущей загрузки. Каждый раз, когда я загружаюсь, я нахожусь в командной строке, и я должен повторить эту команду. Не решение
При изучении этого, большинство сообщений указывают на файл /etc/fstab и указывают на опцию для корневой файловой системы.
errors=remount-ro
И что этот вариант для вашей защиты, потому что что-то не так с корневой файловой системой, и вам не следует писать в нее, и на самом деле вам лучше сделать резервную копию, потому что она находится на выходе. Запустите fsck на нем. Ну, я нахожу подозрительным, что это происходит сразу после обновления. Кроме того, это относительно новый SSD, и мне все равно не рекомендуется запускать на нем fsck. Но я могу удалить эту опцию, и корневая файловая система все еще работает в режиме только для чтения, так что это не проблема fstab.
Что-то еще произошло со мной. В файле grub строка запуска
linux /vmlinuz-4.4.0-38-generic root=/dev/mapper/vg_ssd1-xubu_root_ssd1 ro nomodeset $vt_handoff
Непосредственно перед "nomodeset" (изменен с "тихий всплеск") является "ro". Grug загружает мою корневую систему в режиме только для чтения? Я изменил "ro" на "rw", а также изменил "nomodeset" обратно на "тихий всплеск", сохранил файл и перезагрузился. Отлично подошел в графическом режиме при правильном разрешении.
Хм.... я побежал
sudo upgrade-grub
пересобрать файл grub.cfg. Снова, строка запуска была изменена на "ro" и снова перезагрузилась в командную строку.
Мое обновление было неполным? Я выполнил следующие команды, чтобы проверить полное обновление и убедиться, что было установлено достаточно дополнительных компонентов:
sudo apt-get -f install
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo apt-get clean
Я снова побежал
sudo upgrade-grub
но опять-таки выяснилось, что линия запуска была установлена на "ро".
Поэтому я провел еще несколько поисков. Я посмотрел в файле /etc/grub.d/10_linux и выполнил поиск по запросу "ro". Я нашел следующий фрагмент кода:
if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
sed "s/^/$submenu_indentation/" << EOF
linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
else
sed "s/^/$submenu_indentation/" << EOF
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
EOF
Мне пришлось посмотреть, что представляет собой материал с подписью EFI, и речь идет о безопасной загрузке, которая защищает вашу систему от вредоносных программ в загрузочном секторе. Так заражен ли мой загрузочный раздел BIOS? У меня есть версия Windows XP в системе, хотя она больше не запускается.
Но затем статус "ro" реализуется с обеих сторон оператора if. Я немного поигрался и обнаружил, что это было "другое" условие, которое выполнялось. Поэтому я изменил это с "ro" на "rw", так что теперь весь фрагмент выглядит так:
if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
sed "s/^/$submenu_indentation/" << EOF
linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
else
sed "s/^/$submenu_indentation/" << EOF
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} rw ${args}
EOF
Я реран
update-grub
И все вышло хорошо. Я проверил строку запуска в grub.cfg, и она имеет "rw", а не "ro".
linux /vmlinuz-4.4.0-38-generic root=/dev/mapper/vg_ssd1-xubu_root_ssd1 rw nomodeset $vt_handoff
Я перезагрузился, и все встало нормально. Так что я бы сказал, что проблема решена, но я не думаю, что это так. Я не думаю, что это просто ошибка в Grub. У некоторых других систем Linux, найденных os-prober, были строки запуска, которые не указывали ни "rw", ни "ro".
Я не понимаю, что здесь происходит, и почему он по умолчанию "ro" в первую очередь. Если кто-то может пролить свет на это и лучше решить эту проблему, я был бы очень признателен.