У меня есть сервер с двумя жесткими дисками по 1 ТБ. У меня есть папка загрузок на /disk2/uploads
, Эта папка заполнила весь жесткий диск. Другой диск в основном пуст. Я хочу, чтобы на пустом диске была дополнительная папка, в которой размещались бы любые дополнительные закачки, которые не помещаются на первом диске.
Проблема в том, что моему веб-приложению необходимо знать, где находятся файлы. Одним из решений было бы, чтобы мое веб-приложение загружало все новые файлы на пустой диск, и когда приложению необходимо получить файл, оно будет видеть, существует ли он в новом месте, и если нет, оно проверит старое местоположение. . Я бы хотел решить эту проблему с помощью Linux.
Можно ли создать символическую ссылку (или что-то еще), которая позволила бы мне загружать новые файлы в / var / www / uploads и позволить мне найти файлы в / disk2 / uploads из папки / var / www / uploads?
Например:
если /disk2/uploads
имеет folder1
и folder2
и /var/www/uploads
имеет folder3
. Тогда я бы хотел это:
> ls /disk2/uploads
folder1 folder2
> ls /var/www/uploads
folder1 folder2 folder3
Если такое решение существует, что произойдет, если /disk2/uploads/folder1/foo.log
существует, и я пытаюсь загрузить foo.log
к /var/www/uploads/folder1/foo.log
? Вероятно, это не проблема для меня, потому что все наши файлы имеют временную метку в их имени, но мне любопытно.
Если все, что вы хотите сделать, это линейно распределить данные между двумя блочными устройствами (в данном случае - дисками) при представлении единого пространства имен файловой системы, вы можете использовать LVM. Использовать группу томов с двумя физическими томами и одним логическим томом, выделенным для использования всего необходимого вам пространства, будет очень просто. Это также позволит более гибко изменять размер объема. Это решит проблему на уровне блоков, а выбранная файловая система в значительной степени не имеет значения. Вот ссылка на руководство RedHat о том, как это сделать в общем смысле.
То же самое можно сделать с BTRFS, добавив несколько дисков в один пул файловой системы, а BTRFS имеет отличные функции устойчивости, которые LVM не обязательно включает, такие как контрольная сумма и полностью онлайн-проверки файловой системы. Это решило бы проблему на уровне файловой системы. А вот общее руководство по BTRFS для нескольких устройств.
Однако оба этих решения требуют, чтобы вы копировали данные в новые файловые системы. Так что это не обязательно полный план миграции. Лично я, вероятно, выбрал бы BTRFS в этом случае, если только вы не запускаете что-то вроде рабочей нагрузки базы данных с тех же дисков, для которых я бы рекомендовал LVM и традиционные файловые системы.
Что касается миграции, вероятно, будет достаточно нескольких промежуточных символических ссылок и копии файла. Однако я не знаю, какое приложение вы используете, поэтому это может повлиять на вашу стратегию.
РЕДАКТИРОВАТЬ Если подумать, не используйте BTRFS в старых системах (например, до CentOS / RHEL 7 или SLES 12). Ранние пакеты в ядре 2.6 не очень хороши в плане поддержки функций и стабильности.
РЕДАКТИРОВАТЬ Ответ JDS напомнил мне, что вы, возможно, серьезно ищете почти полную онлайн-миграцию, и есть способ (фактически несколько) обеспечить полностью прозрачные наложения между файловыми системами, которые позволят вам получить доступ к содержимому обеих систем в различных унифицированных способами.
У меня неплохой личный опыт работы с unionfs, который отлично работает и довольно прост. Вы также можете посмотреть на aufs в зависимости от того, какие функции вам нужны. Эти файловые системы оказались для меня бесценными при миграции приложений и центров обработки данных.
С предоставленными вами сведениями невозможно просто связать каталоги вместе и сделать так, чтобы они отображались как один каталог.
Однако у вашей проблемы есть решения. Однако решения в основном потребуют перестройки файловой системы. Это будет включать в себя такие шаги, как резервное копирование всех ваших данных, внесение серьезных разрушительных изменений в файловую систему, а затем восстановление данных.
Вы не предоставили достаточно подробностей о сервере и существующей файловой системе, чтобы точно знать, какой подход является лучшим, но я могу сделать некоторые обоснованные предположения.
LVM - хороший вариант для создания единой «папки», охватывающей несколько физических дисков. LVM достаточно легко настроить, но определенно требует некоторого планирования.
Самый простой способ перестроить существующий сервер с двумя отдельно смонтированными жесткими дисками в сервер с двумя жесткими дисками, смонтированными как один том LVM, - это создать резервную копию всех данных и переустановить ОС с нуля. В установщиках современных ОС есть шаги, в которых LVM-часть может быть настроена автоматически.
Если два диска емкостью 1 ТБ являются просто дисками с данными, а ОС находится на другом диске, вы можете создать резервную копию всех своих данных, объединить два диска по 1 ТБ в единый том LVM размером почти 2 ТБ и смонтировать его в исходном месте. Затем восстановите данные.
Существуют и другие файловые системы, которые предоставляют решение, аналогичное LVM (например, ZFS), но все они сводятся к одному и тому же: 1) резервное копирование; 2) перестроить fs как непрерывный логический том и смонтировать его в исходном месте, 3) восстановить данные.
Я что-то упустил? Почему бы просто не сохранить простое копирование / перемещение всего каталога загрузки на новый (пустой) диск и указать сервер на нем?