Я запускаю безголовый сервер Ubuntu с USB-диска, и чтобы минимизировать количество операций записи, я хочу переместить папку / var на другой диск.
Проблема в том, что все остальные накопители зашифрованы и становятся доступными только хорошо после завершения загрузки . Я мог бы, конечно, просто mount /dev/mapped/drive /var
, но тогда я уверен, что многие процессы будут сбиты с толку из-за того, почему их старые дескрипторы открытых файлов не могут общаться со своими недавно созданными.
Есть ли способ перезапустить всю систему без перезагрузки, или мне нужно попытаться выяснить, какие процессы запущены, и /etc/init.d/* перезапустить их вручную?
Это должно быть возможно, но не может стоить хлопот, перезагрузка является наиболее выполнимым вариантом.
/var
также может содержать базу данных, такую как mysql, различные файлы журналов и кэши. Возможно, вам удастся выполнить lsof | grep /var/
и отправить остановку связанным службам, и большинство из них могут даже пережить mv /var /varold && mkdir /var && mount -t auto /dev/whatever /var && cp -Rp /varold /var
, потому что они просто будут придерживаться своих старых файлов pid, но это может привести к краху.
Другой подход заключается в том, чтобы войти на сервер с учетной записью, отличной от root, и выполнить killall -SIGSTOP -u root
(или любого другого специального пользователя, с которым они могут работать), выполнить ваши изменения и возобновить процессы с помощью killall -SIGCONT -u root
.
Если это действительно критически важно, без времени простоя и неограниченных разрешенных усилий, я бы предпочел настроить клонированную виртуальную машину и связываться с ней перед тем, как попробовать это на реальном сервере.