W LinuxДокументация

Восстановление — когда W не загружается или загружается неправильно

W снимает снапшот файловой системы перед каждой пакетной транзакцией и перед каждым w-sync update, а ещё хранит один постоянный снапшот, W initial state, со дня установки машины. Эти снапшоты загружаемы. Эта страница — о том, как ими пользоваться.

Читайте тот раздел, который соответствует вашему симптому. Всё здесь прогнано на настоящей машине — ни одна процедура не является той, что выглядит правильной только на бумаге.


Одна команда

Если машина ещё загружается:

sudo w-rollback run

Она показывает снапшоты, спрашивает, к какому вернуться, и просит подтверждения, прежде чем что-либо менять. Система, которую она заменяет, сохраняется, а не удаляется — откат сам может быть откачен.

На зашифрованной установке система, которую вы заменяете, регистрируется как снапшот в момент отката — и это делает текущую работающую систему read-only прямо на месте. Ничего не сломалось: просто всё, что вы сохраните между откатом и перезагрузкой, не запишется. Перезагружайтесь, когда команда это предложит.

w-rollback status сообщает, где вы находитесь, ничего не меняя.


Симптом: загружается, но после обновления что-то сломалось

Откатитесь к снапшоту, снятому прямо перед изменением:

  1. w-rollback list — описания называют транзакцию (pacman -Syu …), а pre — это состояние до неё.
  2. sudo w-rollback run, выберите тот номер pre, подтвердите.
  3. Перезагрузитесь.

Обновления пакетов и собственные обновления W — разные вещи, поэтому уточните, что именно вы имеете в виду: w-update обновляет пакеты Arch, w-sync обновляет сам W.

Если неправилен лишь конфиг — тема, настройки модуля, — не откатывайте систему целиком. w-reset возвращает конфиг одной подсистемы к дефолту W и не трогает всё остальное.


Симптом: после входа экран остаётся чёрным или экран входа так и не появляется

Сама машина работает — вентиляторы ведут себя обычно, диск успокаивается, она отвечает по сети, — но ни на одном экране ничего не нарисовано.

Если вы выключили монитор в панели «Дисплеи» Хаба, а позже отключили или сняли второй, — это почти наверняка оно: все дисплеи, которые у машины ещё есть, выключены, и рисовать больше не на чем. W проверяет ровно это перед стартом десктопа и чинит сам, так что читать этот раздел вам бы не пришлось — а раз вы его читаете, проверка не успела отработать, и починка делается одной командой руками.

Перейдите в текстовую консоль по Ctrl+Alt+F2 и залогиньтесь там (или достучитесь до машины по SSH с другого компьютера — сеть поднята). Затем:

w-monitor reset --all          # раскладка дисплеев вашей сессии
sudo w-monitor greeter reset   # и экрана входа, если тёмен именно он
sudo reboot

reset --all сбрасывает только сохранённые правила дисплеев — разрешение, масштаб, поворот, размещение, вкл/выкл — и возвращает каждый выход в автоматический режим. Ничего другого в системе не меняется, поэтому не откатывайте ради этого снапшот: это файл настроек, а не сломанная система.

w-monitor status печатает эти правила, если хотите сперва посмотреть, что было не так; disabled = true на единственном оставшемся у вас дисплее — характерный признак.

Если экран чёрен с самой первой секунды — нет логотипа производителя, нет boot-меню — это не ваш симптом. Читайте «не доходит даже до boot-меню» ниже.


Симптом: не загружается

Снапшоты есть в boot-меню. Какое это меню — зависит от того, как был размечен диск при установке; вы поймёте, какое у вас, по тому, как выглядит экран.

Зашифрованная установка (Limine). Меню появляется примерно на 1,5 секунды — начинайте нажимать стрелку сразу после экрана прошивки, не ждите, пока меню покажется. Затем:

W Linux  →  Snapshots  →  выберите снапшот по дате

Пароль от диска спрашивается после меню, а не до.

Обычная установка (GRUB). Удерживайте Shift или нажимайте Esc во время загрузки, чтобы показать меню, затем откройте подменю снапшотов.

Когда загрузились:

sudo w-rollback run

Загруженный из снапшота, w-rollback восстанавливает тот самый снапшот — он не спрашивает, какой. После этого перезагрузитесь, и вы снова на нормальной системе.

Вскоре после входа появляется уведомление о том, что сессия — восстановительная загрузка, с кнопкой, которая выполняет откат за вас: она открывает терминал, спрашивает пароль и проводит через то же подтверждение. Искать команду самостоятельно не нужно.

Снапшот есть в списке, но его нет в boot-меню

На зашифрованном пути загрузочные пункты генерируются отдельно от самих снапшотов, поэтому снапшот может существовать, не будучи загружаемым: он есть в w-rollback list, но меню его не предлагает. Перегенерируйте пункты из системы, которая ещё загружается:

sudo limine-snapper-sync

Как выглядит загрузка из снапшота

Снапшот доступен только для чтения, и W намеренно грузит его именно так. Ожидайте следующего и не пугайтесь:

  • Десктоп поднимается нормально, и им можно пользоваться.
  • Горстка сервисов падает — сокет-юниты GnuPG, ipp-usb. Им нужно писать в /, а они не могут. Это безвредно и исчезает, как только вы вернётесь на нормальную систему.
  • Всё, что вы сохраните внутри снапшота, будет потеряно. Копируйте нужные файлы в /home — это отдельный подтом, и он остаётся доступным для записи.

Симптом: не доходит даже до boot-меню

Загрузитесь с установочного носителя W (или любого Arch) и сделайте подмену руками. Это то же самое, что делает w-rollback, минус удобства.

Если диск зашифрован, сначала разблокируйте его:

cryptsetup open /dev/<корневой-раздел> cryptroot

Смонтируйте вершину файловой системы — без опции subvol=; это единственное место, где видны и @, и снапшоты:

mount -o subvolid=5 /dev/mapper/cryptroot /mnt   # обычная установка: /dev/<корневой-раздел>
ls /mnt                                          # @  @home  @snapshots  …

Найдите нужный снапшот. Даты — в UTC:

grep -r '<дата>' /mnt/@snapshots/*/info.xml

Подмените, сохранив сломанную систему, а не удалив её:

mv /mnt/@ /mnt/@.broken
btrfs subvolume snapshot /mnt/@snapshots/<номер>/snapshot /mnt/@

Отмонтируйте и перезагрузитесь. На зашифрованной установке, если ядро больше не соответствует восстановленной системе, загрузите один раз снапшот из меню Limine и выполните sudo w-rollback run — она восстановит пару ядра с EFI-раздела, чего ручная подмена сделать не может.


Симптом: пароль от диска не принимается

Слот с паролем — это резервный вариант, существующий всегда; разблокировка по TPM2 и распечатанный ключ восстановления — дополнительные слоты поверх него. Управляет ими w-crypt:

w-crypt status          # какие слоты существуют
sudo w-crypt help       # регистрация TPM2, добавление ключа восстановления, сброс TPM2

Если разблокировка по TPM2 перестала работать после смены прошивки или изменений в загрузке — это ожидаемо: значения PCR изменились. Воспользуйтесь паролем, а затем перерегистрируйте TPM2.


Симптом: пропал файл в домашней директории

У /home есть собственные timeline-снапшоты, снимаемые ежечасно и хранимые отдельно от системных, — так что откатывать систему ради файла не нужно:

snapper -c home list
ls /home/.snapshots/<номер>/snapshot/<ваш-пользователь>/

Копируйте нужное прямо оттуда.


Как отменить откат

Зашифрованная (Limine). Система, из которой вы откатились, была зарегистрирована как снапшот с тем описанием, которое вы ввели. Она есть в boot-меню, как и любой другой, — загрузите её и выполните sudo w-rollback run.

Обычная (GRUB). Она сохранена как подтом с именем @.bak-<временная-метка>. Верните его на место с установочного носителя, проделав описанную выше процедуру в обратную сторону:

mount -o subvolid=5 /dev/<корневой-раздел> /mnt
mv /mnt/@ /mnt/@.discard
mv /mnt/@.bak-<временная-метка> /mnt/@

Когда убедитесь, что сохранённая система больше не нужна, удалите её. За вас её никто не удалит, а простой btrfs subvolume delete откажется: внутри корневого подтома вложены другие (/var/lib/machines, /var/lib/portables), поэтому удаление должно быть рекурсивным.

btrfs subvolume delete -R /mnt/@.bak-<временная-метка>

Где машина записывает, что произошло

/var/log/w/w-install-*.log    инсталлятор
/var/log/w/w-apply-*.log      настройка, которая идёт после него
journalctl -b -1              предыдущая загрузка, целиком

/var/log — отдельный подтом, поэтому эти логи переживают откат: лог той загрузки, которая сломалась, никуда не денется и после того, как вы из неё восстановитесь.

Изменить эту страницу на GitHub