Восстановление — когда W не загружается или загружается неправильно
W снимает снапшот файловой системы перед каждой пакетной транзакцией и перед
каждым w-sync update, а ещё хранит один постоянный снапшот, W initial state,
со дня установки машины. Эти снапшоты загружаемы. Эта страница — о том, как ими
пользоваться.
Читайте тот раздел, который соответствует вашему симптому. Всё здесь прогнано на настоящей машине — ни одна процедура не является той, что выглядит правильной только на бумаге.
Одна команда
Если машина ещё загружается:
sudo w-rollback run
Она показывает снапшоты, спрашивает, к какому вернуться, и просит подтверждения, прежде чем что-либо менять. Система, которую она заменяет, сохраняется, а не удаляется — откат сам может быть откачен.
На зашифрованной установке система, которую вы заменяете, регистрируется как снапшот в момент отката — и это делает текущую работающую систему read-only прямо на месте. Ничего не сломалось: просто всё, что вы сохраните между откатом и перезагрузкой, не запишется. Перезагружайтесь, когда команда это предложит.
w-rollback status сообщает, где вы находитесь, ничего не меняя.
Симптом: загружается, но после обновления что-то сломалось
Откатитесь к снапшоту, снятому прямо перед изменением:
w-rollback list— описания называют транзакцию (pacman -Syu …), аpre— это состояние до неё.sudo w-rollback run, выберите тот номерpre, подтвердите.- Перезагрузитесь.
Обновления пакетов и собственные обновления 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 — отдельный подтом, поэтому эти логи переживают откат: лог той
загрузки, которая сломалась, никуда не денется и после того, как вы из неё
восстановитесь.