В колонках играет - Тимур Шаов/Любовное чтиво/Романс о женщинеВчера моя тестовая машина с Планом-9 оригинально пошутила: попытка обновления (replica/pull -v /dist/replica/network) завершилась полным развалом файловой системы (далее -- ФС), после чего не работала ни одна из команд, не говоря уж о перезагрузке. Переустановка системы с нуля -- дело простое, но не спортивное. 8-) Поэтому я решил восстановить файловую систему до последнего работоспособного состояния.
Для этого крайне рекомендуется иметь предусмотрительно настроенную ранее архивную ФС venti (была. 8-) и файлик конфигурации сервера venti.conf (желательно на загрузочном разделе). Загружаться нужно с компакт-диска, в меню выбирать "Boot from CD".
После загрузки нужно установить сетевой адрес машины (ip/ipconfig установит динамический адрес от DHCP-сервера). а также запустить ДHС-клиент (ndb/dns -r; ndb/cs). После этого устанавливаем переменную окружения venti='tcp!address!venti', где address -- адрес, полученный машиной. И не забыть запустить fossil-сервер:
fossil/fossil -c 'srv -p fscons'
Вот теперь можно попытаться проверить ФС с последующей коррекцией:
fossil/flchk /dev/sdC0/fossil | sed -n 's/^# //p' >>/srv/fscons
Если не помогло (вариант -- стало еще хуже), можно попробовать откатиться на предыдущее устойчивое состояние ФС. Для этого при запущенном venti (venti/venti -w -c venti.conf -h tcp!address!8000) можно попробовать переформатировать ФС с указанием последнего архива в venti:
venti=tcp!address!venti (установить переменную окружения venti)
fossil/last /dev/sdC0/fossil (выдать последнюю архивную метку в виде vac:архивная_метка)
Полученную метку (БЕЗ префикса "vac:"!) можно использовать в команде форматирования:
fossil/flfmt -h address -v архивная_метка /dev/sdC0/fossil
Если и тут будут получены сообщения об ошибках -- используем более ранние метки вплоть до получения успешного результата. Метки можно получить командой /sys/src/cmd/venti/words/dumpvacroots (на вс. сл. ее можно скопировать на загрузочный раздел и запускать оттуда, если вдруг потом придется править этот файл -- мне пришлось. 8-)
dumpvacroots | tail выдаст последние метки, которые можно поочередно подставлять в команду форматирования до тех пор, пока она не завершится успешно. Если же скрипт dumpvacroots выдаст ошибку из-за аварийного завершения awk (помимо статистики может выползти и кое-какая информация об аренах venti, на обработке которой и затыкается awk) -- правим скрипт (sed /n/9fat/dumpvacroots), меняем строку
awk '$3 == 16 { printf("vac:%s\n", $2) }'
на тупой, но рабочий вариант
grep ' 16 '
и перезапускаем dumpvacroots. Получившиеся метки (второе поле каждой строки) можно поочередно использовать в команде форматирования. А после успешного завершения форматирования можно проверить состояние ФС:
fossil/fossil -c 'srv -p fscons'
con /srv/fscons
В командной строке этой консоли (prompt:) подключаем ФС без проверки прав доступа:
srv -AWP replica
fsys main config /dev/sdC0/fossil
fsys main open -AWP
fsys main
А вот тут уже можно посмотреть размер свободного пространства (команда df) или проверить ФС (check fix). Выход из консоли -- Ctrl+\, в появившемся приглашении >>> пишем q и жмем Enter. 8-) Если ошибки не были найдены или же были корректно исправлены -- пробуем перезагрузиться с восстановленной ФС.
...может быть, кому-то будет полезно. Действия расписывал максимально подробно -- на всякий случай. 8-)