LINUX.ORG.RU

Защита от случайного выдёргивания запущенной с флешки системы

 devmapper, ,


8

2

Привет всем, кто запускает Linux с флешки!

Вы наверняка попадали в ситуации, когда кто-то задевал флешку, с которой работает система, или подключал рядом с USB-жёстким диском требовательный к питанию смартфон, в результате чего устройство на долю секунды теряло питание, сбрасывалось и переподключалось. Система оказывалась в дико неприятном состоянии, в котором вот оно, корневое устройство, но ни одна команда, кроме тех, которые ещё лежат в кэше, не работает, и даже Alt+SysRq+S,U не поможет предотвратить потерю данных: устройство, на которое можно было бы сбросить кэш, уже отключено, и убедить ядро обратиться к другому невозможно. Фрустрации добавляло ещё и то, что Windows To Go с этим прекрасно справляется, зависая, пока флешку не вставят обратно (с выключением по минутному таймауту).

Оказывается, в Linux это тоже просто обойти. Достаточно создать при помощи dmsetup логический диск в режиме linear и при помощи правил udev делать ему suspend, если устройство было удалено, и создавать ему новую таблицу и делать resume, когда устройство с тем же UUID вставят обратно. На всякий случай, memlockd позволяет удержать в кэше бинарники udev, dmsetup, busybox и blockdev, на которых всё работает. Готовые скрипты (в расчёте на initramfs-tools) лежат на https://github.com/aitap/switchblock/. Адаптировать на другие initramfs должно быть несложно, потому что это всего лишь правило udev + вызываемые из него файлы.

Если кому-то будет интересно, готов принять pull request'ы со скриптами сбора пакетов.

★★★★★

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

Молодец! Мне лично не нужно, но ты полезное дело сделал, хвалю

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

Проще. Если речь идёт о squashfs размером 200..500M, это правильное решение.

Но эти строки я пишу с чужого ноутбука с 1G оперативной памяти, загруженного с USB-жёсткого диска (не считая /home, занято 4G). И хотя я верю, что в природе есть livecd с CMake, Fossil, gfortran и R, у меня не было времени их искать.

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