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

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

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

решение1

Вы не можете создать /символическую ссылку. Это просто невозможно. /должен быть каталогом. Если бы /это была символическая ссылка, она бы указывала на какой-то путь — и чтобы разрешить этот путь, система бы прошла через /, который является символической ссылкой, поэтому его нужно разрешить... Символическая ссылка, указывающая на саму себя, всегда вызовет ошибку при разыменовании, но в любом случае вы не сможете создать /символическую ссылку, поскольку это уже существующий каталог.

Что вы можете сделать и достичь желаемого эффекта, так этоустанавливатьфайловая система 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не отвечает, удачи в диагностике сбоя.)

решение2

Нет. Это сделает вашу виртуальную машину незагружаемой. Система NFS загружается в определенный момент процесса загрузки. До этого момента никакие файлы на NFS не будут доступны. Это означает, что машина не сможет получить доступ к файлам, необходимым для загрузки. К ним относятся (но не ограничиваются) само ядро, оболочка по умолчанию /bin/shи все, /binчто находится ниже, включая команды, необходимые для монтирования общего ресурса NFS.

Так что нет, это не очень хорошая идея. Что еще важнее, это не нужно. Большинство каталогов /не очень большие. Просто определите тот, который занимает место, и поместите его туда. Вы должны иметь возможность переместить любой из следующих без особых проблем:

  • /var/cache
  • /usr/local
  • /usrсам по себе обычно может быть перемещен, но убедитесь, что в нем нет ничего существенного /usr/local/bin. Скорее всего, этого не произойдет, но проверьте.

Вероятно, именно они и занимают место.

Связанный контент