LINUX.ORG.RU
ФорумAdmin

Отмонтировать корневую фс в systemd-based дистрибутиве

 , ,


2

3

В дискуссии в моей теме Бэкап файловой системы по ssh несколько раз промелькнула мысля, что вполне себе возможно отмонтирование корневой фс, например чтобы перемонтировать её в r/o, чтобы ничего не мешало выполнить бэкап всей фс, либо вообще перемонтировать на корень tmpfs, а бывшую корневую фс зачистить, чтобы выполнить на чистый лист восстановление из бэкапа или вообще заменить предустановленный дистрибутив каким-нибудь другим. Если это не шутка и такие фантастические действия действительно можно выполнять, то я не против поэксперементировать. Сервер виртуальный, физический доступ к нему отсутствует как факт, только ssh.
Вот нашел статейку http://habrahabr.ru/post/141320/ Любую фс отмонтировать можно если на ней нет открытых файлов, то есть сначала используем инструмент lsof на предмет поиска открытых файлов, затем прибиваем процессы, эти файлы открывающие, затем закрываем сокеты. Не понимаю одно: как закрыть сокеты, не потеряв при этом связь с сервером по ssh? Статья писалась для init-based дистрибутивов, что делать в случае systemd-based дистрибутива, там куча файлов открыты процессом с pid 1, а его просто так не прибьёшь? Но вообще лучше дайте мне нормальный рецепт, потому что из этой хабростатьи я по правде говоря нихрена не понял.

★★★★★

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

Монтируешь куда-нибудь tmpfs, строишь там минимальную систему (вместе с sshd в default.target), потом pivot_root (systemctl switch-root) и делаешь со старым корнем что хочешь.

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

Перемонтировать read-only несложно. Достаточно чтобы никто не держал открытыми файлы на запись, обычно достаточно перейти в single user. Systemd тут параллелен.

Про отмонтирование выше написали, это более заковыристо. Я обычно просто с live cd/usb загружаю, когда собираюсь с корнем что-то страшное делать.

const86 ★★★★★
()

отмонтирование корневой фс, например чтобы перемонтировать её в r/o

это немного слегка очень разные по сложности действия совсем

я не против поэксперементировать. Сервер виртуальный, физический доступ к нему отсутствует как факт, только ssh.

1) получи удаленный доступ хотя бы к VNC или serial console 2) если он хоть кому-то важен — сейчас же остановись, подними себе свой и извращайся на нем

по ssh
примерился прибить pid 1

ай молодец

<еще и systemd приплел>

и грустно, и противно.

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

Переход в single user это «telinit 1». Как он на systemd-based системе выполняется? При этом ведь должен произойти перезапуск всех процессов, порожденных процессом с pid 1, то есть sshd остановится и я потеряю контроль над системой. Дальше только холодный резет и всё сначала.

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

так же как и несколько ядер (проверенное и новое) должно быть два корня, на удаленых серверах. С одним экспериментируешь, второй на случай если доэкспериментировался

most-fucktum
()
Ответ на: комментарий от sunny1983

Товарищ, у тебя в голове каша.

Во-первых, single user mode — это не «перезапуск всех процессов», а остановка всех процессов (кроме PID 1 и ещё пары-тройки системных, типа udev) и запуск аварийного шелла.

Во-вторых, в systemd нет ранлевелов. То, чем будет твой single user mode, определяешь только ты. В частности, нет никакой проблемы добавить sshd.service и сеть в Wants= к rescue.target.

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

Делал по указанной инструкции уменьшение корня на виртуалке в жидитал оушен, виртуалка centos 7. Вся разница только в том, что вместо telinit u, надо использовать systemctl daemon-reload, ну и journalctl перезапустить до кучи.

Связь при перезапуске ssh не теряется.

В этой статье вполне себе рабочий и понятный рецепт. Если то, что там написано не понятно, могу только посочувствовать.

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

Товарищ, у тебя в голове каша.

Во-первых, single user mode — это не «перезапуск всех процессов», а остановка всех процессов (кроме PID 1 и ещё пары-тройки системных, типа udev) и запуск аварийного шелла.

Во-вторых, в systemd нет ранлевелов. То, чем будет твой single user mode, определяешь только ты. В частности, нет никакой проблемы добавить sshd.service и сеть в Wants= к rescue.target.

Это так делается? А что ему не нравится?

root@iskatelproxy:/# systemctl isolate recue.target
Failed to start recue.target: Operation refused, unit may not be isolated.

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