Безопасно ли делать символические ссылки для всей машины?

У меня есть виртуальная машина с ограниченным объемом памяти, которая стала проблемой. У меня есть домашний каталог, связанный с хранилищем 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, Это, вероятно, не будет, но проверьте.

Это, вероятно, те, кто занимают пространство в любом случае.

Другие вопросы по тегам