LINUX.ORG.RU
ФорумAdmin

hibernate текущей сессии на диск и начало новой, с возможностью восстановить предыдущую

 , ,


1

2

Собственно сабж.

Предпосылки: относительно слабый комп, относительно сложное окружение в рантайме, желание невозбранно переключить комп в «домашний» режим.

Окружение гибернацию преживает. Городить собственный огород с criu или чего там ещё придуманно - нет никакого желания.

★★★★★

Последнее исправление: pon4ik (всего исправлений: 2)

Нипа лучится

Нельзя восстановить старое содержимое памяти после того, как файловая система на диске была изменена.

anonymous
()
Ответ на: Облом :( от pon4ik

Хотя тогда уж нужно 3, плюс диск с системой - readonly между сессиями. Что не есть удобно :(

pon4ik ★★★★★
() автор топика

Да, из-за потери состояния ФС так не получится.

Точнее, может получиться в единственном случае — если все участвующие ФС монтируются в ro. Но в любом случае нужна поддержка со стороны ядерного механизма resume, каковая была только в TuxOnIce (ныне заброшенном).

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Странно, разве нельзя восстановиться как-то. Надо больше технических деталей. А то «из-за потери состояния ФС» звучит как то неуверенно. Какое именно состояние, тоже не очень понятно.

Желательно пруф линк на подобную запись. Винда после гибернации, таки востанавливается, достаточно не писать на её смонтированные разделы.

pon4ik ★★★★★
() автор топика
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Странно, разве нельзя восстановиться как-то.

Говорю же: можно тогда и только тогда, когда второе состояние не пересекается с первым никакими файловыми системами.

Надо больше технических деталей. А то «из-за потери состояния ФС» звучит как то неуверенно. Какое именно состояние, тоже не очень понятно.

Куда уж больше-то? Вот запустил ты линукс, работаешь. У тебя примонтированы какие-то ФС. В линуксе во всех ФС есть кэширование файлов и своих внутренних структур — как на чтение, так и на запись. Грубо говоря, записал ты файл, а он ещё пару минут лежит в памяти.

Потом ты уводишь ФС в гибернацию. Всё записывается на диск, включая кэши файловых систем. Запускаешь другую ОС. С её точки зрения предыдущая ОС «грохнулась», не отмонтировав файловые системы. Отрабатывают fsck, восстанавливается журнал... вторая ОС тоже изменяет какие-то файлы. Потом ты просыпаешь первую ОС, а она офигевает от того, что состояние на диске не соответствует тому, что в кэше.

Дальше может быть что угодно, начиная от kernel panic и заканчивая тихим повреждением данных (а обычно и то, и другое).

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

Линукс тоже после гибернации восстанавливается — достаточно не писать на его смонтированные разделы. Я тебе о чём всё это время говорю?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Ну я и говорю маловато деталей.

она офигевает от того, что состояние на диске не соответствует тому, что в кэше.

Кэш можно сбросить sync'ом, а если програмно то в момент гибернации можно так же и залочить думаю.

Даже в тупом софте который делаю я преудсмотренно неконсистентное состояние кэша, неужели в ядре нет?

Линукс тоже после гибернации восстанавливается — достаточно не писать на его смонтированные разделы. Я тебе о чём всё это время говорю?

Вооот. Осталось сообразить, сколько нужно дисков (или всё таки достаточно разделов), что бы реализовать сабж, с ограничением, что допустим мы не пишем даже в хоум дир из следующей сессии (хотя его можно и отмонтировать перед гибернацией). Т.е. по сути - обещаем не менять систему из новой сессии.

А вопрос, про то, какими средствами можно это реализовать. По идее хватит resume= и ... ?

Т.е. для начала надо узнать например, как попросить ядро в следующий раз загрузиться с определённым параметром, или, как это изящно обыграть в загрузчике. Ну и плюс понять как подготовить файлик к гибернации. Я начал читать статью, но вы с аноном в один голос сказали «никак» и я пошёл прокрастенировать.

Но вообще, изначальный вопрос, был, конечно, про готовый набор утилит.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Кэш можно сбросить sync'ом, а если програмно то в момент гибернации можно так же и залочить думаю.

Полностью — нельзя. Грязные (недозаписанные) страницы ты сбросишь sync'ом, а кэш на чтение не сбросишь. Всякие там суперблоки вообще всегда находятся в памяти и их никак нельзя перечитать.

Даже в тупом софте который делаю я преудсмотренно неконсистентное состояние кэша, неужели в ядре нет?

Именно так — нет. Это слишком дорого обходится в плане производительности и никому не нужно.

Вооот. Осталось сообразить, сколько нужно дисков (или всё таки достаточно разделов), что бы реализовать сабж, с ограничением, что допустим мы не пишем даже в хоум дир из следующей сессии (хотя его можно и отмонтировать перед гибернацией). Т.е. по сути - обещаем не менять систему из новой сессии.

Разве не очевидно? Придётся продублировать все разделы, примонтированные на чтение и запись хотя бы в одной из систем. Монтировать одну и ту же ФС на чтение можно сколько угодно раз — только нужно иметь в виду, что, например, в ext2/3/4 журнал восстанавливается даже при монтировании на чтение.

Т.е. для начала надо узнать например, как попросить ядро в следующий раз загрузиться с определённым параметром, или, как это изящно обыграть в загрузчике.

Читай документацию на свой загрузчик. Они у всех разные.

Ну и плюс понять как подготовить файлик к гибернации.

Какой «файлик»?

intelfx ★★★★★
()

Я однажды так сделал - посыпались данные.

Тебе всё правильно говорят: система хранит кеши, части ФС в памяти; если после просыпания это не будет соответствовать состоянию на диске - торба.

Хоть я сюда и пришел по тегу «хочется странного», но то, что ты хочешь, уже давно реализовано в двух ипостасях.

1) Виртуализация. Виртуальные машины можно так останавливать/восстанавливать. Если с каким-нибудь virtualbox'ом имел дело, то всё и так знаешь. Если не имел - попробуй, там всё до безобразия просто. Еще можешь посмотреть про тип-1 и тип-2 гипервизоры. В энтерпрайсе для подобных задач ставят гипервизоры первого типа. Я подумываю о гипервизоре первого типа на рабочей машинке, чтобы Alt-Tab'ом (условно) переключать Windows и Линукс

2) Посмотри проект Criu - вики, и на OpenNet'е про него было. Это тот же hibernate, но для конкретного приложения.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 3)
Ответ на: комментарий от Kroz

Виртуальной коробкой я конечно пользовался но, ощущения не те. Однако сохранение стейта как раз хочется именно такого.

А вот про виртуализацию и гипервизоры я слышал конечно краем уха, но никогда в ту сторону не смотрел, особенно в контексте этой задачи.

Можешь кинуться хорошей ссылью на разьяснения по типам гипервизоров?

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Ну да, в таком виде, явно выглядит это всё сложно и неуклюже. Вот уже в двух тредах товарищи советуют виртуализацию, возможно ключ кроется там.

pon4ik ★★★★★
() автор топика

слабый комп

хочешь, чтобы работало ещё медленнее? Ты представляешь себе, сколько времени будет разворачиваться сессия сна???

darkenshvein ★★★★★
()
Ответ на: комментарий от darkenshvein

Пусть хоть час-два поднимается, это можно настроить по расписанию как раз.

Если речь о десятке часов, то это, конечно, уже не интересно.

pon4ik ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.