Безопасно ли делать символические ссылки для всей машины?
У меня есть виртуальная машина с ограниченным объемом памяти, которая стала проблемой. У меня есть домашний каталог, связанный с хранилищем NFS на сервере, и он работает без проблем. Но теперь мне нужно связать всю мою машину с NFS, так как у меня постоянно не хватает памяти!
Мне только интересно, безопасно ли связывать всю машину (то есть, всю: /) с NFS?
Я хочу использовать следующие команды для этого:
/storage/nfs
это в основном мой смонтированный NFS.
$ mkdir /storage/nfs/myvmroot
$ sudo cp -rp /* /storage/nfs/myvmroot
$ sudo mv /* /old-root
$ sudo ln -s /storage/nfs/myvmroot /
2 ответа
Вы не можете сделать /
символическая ссылка. Это просто невозможно. /
должен быть каталогом. Если /
была символическая ссылка, она указала бы на какой-то путь - и чтобы решить этот путь, система должна была пройти через /
, которая является символической ссылкой, поэтому ее необходимо разрешить... Символьная ссылка, указывающая на себя, всегда будет вызывать ошибку при разыменовании, но в любом случае вы не сможете сделать /
символическая ссылка, так как это уже существующий каталог.
То, что вы можете сделать и добьетесь желаемого эффекта, - это смонтировать файловую систему NFS в качестве корневой файловой системы вместо монтирования локальной файловой системы, как это обычно делается. Это возможно и поддерживается Ubuntu. В вики сообщества Ubuntu есть учебное пособие (оно охватывает полную бездисковую установку, вы можете пропустить части о TFTP, если сохраните /boot
локально). Перемещение существующей системы немного отличается от первоначальной установки, поэтому не ожидайте, что вы будете следовать руководству.
Вы должны убедиться, что initramfs содержит необходимые драйверы. Initramfs генерируется командой update-initramfs
на основе текущей конфигурации системы и файлов конфигурации в /etc/initramfs-tools
, Вам нужно будет явно добавить настройки NFS в /etc/initramfs-tools/initramfs.conf
хотя бы добавить строку BOOT=nfs
(Я думаю, что другие параметры могут быть указаны во время загрузки, но BOOT=nfs
необходимо для того, чтобы включить драйверы NFS, и DEVICE=…
может также потребоваться включить драйвер Ethernet). После того, как вы изменили /etc/initramfs-tools/initramfs.conf
, бежать update-initramfs
,
Я рекомендую держать /boot
как локальный раздел, отдельный от /
, если это еще не так.
Не использовать cp -rp /* /storage/nfs/myvmroot
копировать файлы, которые не будут работать. Вам необходимо исключить смонтированные файловые системы из копии. Пройти -x
вариант. Также используйте -a
скорее, чем -rp
Есть атрибуты, которые -rp
не сохраняет.
cp -ax /* /storage/nfs/myvmroot
или, если копия прервана
rsync -axAX / /storage/nfs/myvmroot
Другой, возможно, более простой вариант - сохранить корневую файловую систему локальной и перемещать только ее часть. Обычно вы получаете значительно лучшую производительность и надежность от локальной файловой системы, чем от NFS, даже с быстрым сервером и быстрой сетью.
Вы не можете просто нигде вырезать: то, что вы положили удаленно, не должно понадобиться слишком рано в процессе загрузки. Я думаю резать на /usr
Официально в настоящее время не поддерживается Ubuntu, но это родительский дистрибутив Ubuntu Debian, так что у него есть шанс на работу. Еще одно место, где есть хорошие шансы /usr/share
, Я не рекомендую /var
это может быть хлопотно, если что-то сломается, так как именно там хранятся журналы. (Если клиент NFS чем-то недоволен и пытается записать логи в /var/log
но /var
не отвечает, удачи в диагностике ошибки.)
Нет. Это сделает вашу виртуальную машину не загружаемой. Система NFS загружается в определенный момент в процессе загрузки. До этого момента никакие файлы в NFS не будут доступны. Это означает, что машина не сможет получить доступ к файлам, необходимым для загрузки. К ним относятся (но не ограничиваются ими) само ядро, оболочка по умолчанию /bin/sh
и все под /bin
который включает в себя команды, необходимые для монтирования общего ресурса NFS.
Так что нет, это не очень хорошая идея. Что еще более важно, это не обязательно. Большинство каталогов в /
не очень большие. Просто определите, кто занимает место, и поместите его туда. Вы должны быть в состоянии выполнить одно из следующих без особых проблем:
/var/cache
/usr/local
/usr
само по себе также может быть перемещено, но убедитесь, что ничего существенного в/usr/local/bin
, Это, вероятно, не будет, но проверьте.
Это, вероятно, те, кто занимают пространство в любом случае.