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