Переместить var на другой диск

Обновлено: 03.07.2024

Во-первых, я новичок в Linux. Недавно мне дали задание настроить сервер LAMP для клиента, но я могу подключиться к машине только по SSH, что, как я предполагаю, не может загрузиться в однопользовательском режиме.

Я не уверен, что содержит /var и для чего они используются, и почему он не монтируется только в однопользовательском режиме. Надеюсь, кто-то может объяснить это мне. Я поискал в Google, и я думаю, что есть 2 возможных метода, в которых я не уверен, поэтому мне нужно получить от вас несколько советов, прежде чем облажаться и потерять возможность SSH на машине.

Меня беспокоит этот метод: как убить все файлы, открытые в /var? Можно ли убить открытые файлы, когда я подключаюсь к машине по SSH?

Меня беспокоит этот метод: можно ли принудительно удалить файл /var с помощью ln -sf? Есть ли какие-либо последствия, которые мне нужно остерегаться при использовании символической ссылки?

Извините, я предлагаю что-то нелепое, так как я новичок в Linux. Я не могу позволить себе облажаться, так как это моя первая работа, а также я не могу воспроизвести тот же сценарий у себя дома.

Популярные темы в Linux в целом

8 ответов

  • отметить 87 лучших ответов
  • thumb_up – 178 благодарных отзывов

Попытайтесь описать проблему, которую вы пытаетесь решить, а не решение, которое вы рассматриваете.

Находится ли /var в корневой файловой системе? Журналы в /var вызывают переполнение корневой файловой системы?

Я не знаю настоящего вопроса, но рискну ответить.

Вы можете переименовать каталог /var, не затрагивая открытые файлы.

Затем вы можете создать пустой каталог с именем /var для использования в качестве точки монтирования и смонтировать туда другую файловую систему.

Процессы с открытыми файлами продолжат запись этих файлов в /var.tmp/

pigdog написал:

Попробуйте описать проблему, которую вы пытаетесь решить, а не решение, которое вы рассматриваете.

Зачем менять это?

Находится ли /var в корневой файловой системе? Журналы в /var вызывают переполнение корневой файловой системы?

Извините, я забыл упомянуть об этом. /var в настоящее время находится в корневом разделе, и я хотел бы переместить его в другой раздел из соображений безопасности.

pigdog написал:

Вы можете переименовать каталог /var, не затрагивая открытые файлы.

например,

Тогда вы можете создать пустой каталог с именем /var, чтобы использовать его в качестве точки монтирования, и смонтировать туда другую файловую систему.

Процессы, у которых есть открытые файлы, продолжат записывать эти файлы в /var.tmp. /

В этом случае, если я смонтирую /var в новый раздел и выполню rsync -a /var.tmp/. /var, затем выполните перезагрузку, все ли будет работать?

Я только что попытался переименовать файл /var на своем компьютере, но не смог из-за следующей ошибки. Думаю, я не могу выполнять какие-либо действия, пока открываются файлы.

  • отметить 87 лучших ответов
  • thumb_up – 178 благодарных отзывов

Является ли /var точкой монтирования файловой системы на вашем компьютере?

Попробуйте "df" на каждой машине, чтобы увидеть, есть ли список для /var на каждой.

badbanana

Этот человек является проверенным специалистом

бадбанана

в чем проблема?

это каталоги, созданные системой и используемые ОС, поэтому вы не можете перемещать ни один из них, не перейдя в однопользовательский режим. вот и все.

зачем нужно или говорите, что из соображений безопасности нужно переместить "/var" ?

badbanana написал:

в чем проблема?

"/"

"/etc"

"/usr"

"/var"

это каталоги, созданные системой и используемые ОС, поэтому вы не можете перемещать ни один из них, не перейдя в однопользовательский режим. вот и все.

зачем нужно или говорят, что из соображений безопасности нужно переместить "/var" ?

Я не говорил, что мне нужно переместить /var из соображений безопасности. Я сказал, что мне нужно переместить /var из соображений безопасности, например, чтобы файлы журналов не заполняли корневую папку.

Я понимаю, что это каталоги, созданные системой, которые должны использоваться операционной системой. Это та часть, которую я не понимаю, когда я перехожу в однопользовательский режим, система не использует /var?

badbanana

Этот человек является проверенным специалистом

бадбанана

Kent-Virtuosoul написал:

badbanana написал:

в чем проблема?

"/"

"/etc"

"/usr"

"/var"

это каталоги, созданные системой и используемые ОС, поэтому вы не можете перемещать из них без предварительного перехода в однопользовательский режим. вот и все.

зачем нужно или говорят, что из соображений безопасности нужно переместить "/var" ?

Я не говорил, что мне нужно переместить /var из соображений безопасности. Я сказал, что мне нужно переместить /var из соображений безопасности, например, чтобы файлы журналов не заполняли корневую папку.

Я понимаю, что это каталоги, созданные системой, которые должны использоваться операционной системой. Это та часть, которую я не понимаю, когда я перехожу в однопользовательский режим, система не использует /var?

по привычке :-) должно быть как вы сказали "безопасность".

он ​​по-прежнему используется даже в однопользовательском режиме. просто в этом режиме обслуживание выполняется в этом режиме, чтобы никакие файлы не использовались совместно (следовательно, однопользовательский режим) с другими. для его перемещения необходимо выполнить множество действий, включая перезагрузку, поэтому, если на вашем сервере все еще нет данных, можно начать с нуля.

У меня есть раздел /, содержащий /var, и он слишком мал. У меня есть другой существующий раздел с достаточным пространством.

Как переместить папку /var из sda1 в sda2?

3 ответа 3

Перейдите в однопользовательский режим и убедитесь, что любой процесс записи в /var остановлен. (Проверьте с помощью lsof | grep /var )


Да, если вы решите проблему таким образом, всегда будет каталог /home/var. Одним из способов перехода в однопользовательский режим является перезагрузка и выбор однопользовательского режима в меню загрузки.

Я не совсем уверен, что это будет работать нормально все время. Если вы используете более позднюю версию (wheezy), вы можете быть в порядке, поскольку она имеет файловую систему /run. OTOH: в начале процесса загрузки файлы могут быть открыты в /var до того, как он будет смонтирован при помощи привязки.

@cstamas, Наличие /var в отдельной файловой системе поддерживается и всегда поддерживалось. Использование /var отдельно даже рекомендуется как хорошая идея в FHS и официальной документации Debian.

Вы также можете использовать:

Это кажется намного проще, чем возиться с fstab и монтированием.


Не уверен, почему кто-то проголосовал против этого. Это отлично сработает. Сим-ссылка должна работать нормально. Я просто использую привязку для других целей, поэтому обычно думаю о них в первую очередь.

Кроме того, это может быть не так безопасно, но на самом деле работает. Недавно я сделал это на машине, прежде чем запускать ее в производство. Я бы проявил осторожность, если бы это была машина, которая использовалась или на которой запущено много процессов. В моем случае это был новый сервер, предназначенный только для запуска tomcat.

Симлинк /var работает, но вместо этого я предпочитаю помещать запись в /etc/fstab, чтобы самому помнить, на какой раздел/том я что и зачем ставил (можно добавить комментарии). Этот способ также более понятен мне, что я должен изменить в конфигурации, если мне нужно что-то изменить в моем оборудовании.

Когда я занял новый виртуальный сервер, предоставленный мне хостинговой компанией моего работодателя, я создал дополнительные логические тома для var и home, которые раньше были обычными каталогами в корневом разделе. Поскольку провайдер виртуального сервера не предоставил KVM-подобный интерфейс, с помощью которого я мог бы получить доступ к серверу в однопользовательском режиме, приведенные выше ответы не были применимы к моей настройке. Я надеюсь, что этот ответ будет полезен для других в аналогичной ситуации (я сохранил детали LVM, но их можно пропустить, поскольку не имеет особого значения, создается ли новая файловая система на логическом томе или на разделе диска).

Создать и использовать новую файловую систему /var с LVM

Создайте файловую систему для нового тома var, смонтируйте его (используя временный каталог) и скопируйте файлы из текущего каталога /var в новую файловую систему. При копировании файлов с помощью rsync используйте параметр -a, --archive для сохранения меток времени, прав собственности, режимов и т. д., а также параметр -X, --xattrs для сохранения расширенных атрибутов, таких как метки безопасности, используемые AppArmor и SELinux.

Обновить таблицу файловой системы

Настройте новую файловую систему для использования в качестве новой точки монтирования для /var, добавив следующую строку в /etc/fstab. Обратите внимание, что 0 используется в качестве номера прохода (последнее поле), чтобы файловая система не проверялась автоматически (fsck) после определенного количества перезагрузок (у меня нет доступа для входа на сервер в однопользовательском режиме) .

Поскольку я не могу перейти в однопользовательский режим, перезагрузите компьютер, чтобы использовать этот новый том как /var .

Восстановить место на диске из корневой файловой системы

После перезагрузки компьютера выполните следующие действия, чтобы очистить временный каталог и удалить старые файлы /var из корневой файловой системы:

Удалить временную точку подключения:

Создайте новую точку монтирования, чтобы создать альтернативный путь к файлам в старом каталоге /var в корневой файловой системе (в настоящее время он «замаскирован» новой файловой системой /var, смонтированной в каталоге):

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

Текущая настройка перед переносом /var в новый раздел:

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

  • Создайте образ qcow2 и подключите его к виртуальной машине.
  • Создать и смонтировать файловую систему xfs на вновь добавленном диске, rsync существующую /var на вновь смонтированный диск
  • Добавить данные в /etc/fstab для монтирования /var при перезагрузке

1. Подключить диск к ВМ §

Кстати, при создании разделов на существующем диске следуйте этому руководству . Вернёмся к нашему сценарию, создадим и подключим новый диск к гостевой машине и выполним на KVM-машине, как показано ниже

Убедитесь, что диск создан и подключен к гостевой машине (Fedora)

2. Создайте файловую систему на диске §

После добавления диска к виртуальной машине вы можете следовать этому руководству до создания файловой системы, потому что в нашем сценарии мы создаем файловую систему xfs. Выполните команду mkfs.xfs /dev/vg1/lv1 на виртуальной машине хоста, и на диске будет создана новая файловая система.

Если вы хотите использовать уже существующий диск и создать на нем xfs, сотрите (ВНИМАНИЕ: возможная потеря данных) существующие заголовки файловой системы, запустив wipefs -a, и создайте на нем новую файловую систему.

*Если вы не хотите мучиться с созданием LVM, вы можете просто запустить mkfs.xfs на новом диске.

3. Синхронизировать /var на новый диск §

Мы смонтируем новый диск и, чтобы избежать записи данных, перейдем на уровень запуска 1 и выполним rsync данные /var на смонтированный диск

Если все в порядке, сервер должен перезагрузиться без каких-либо проблем с /var, смонтированным в соответствии с записями /etc/fstab.

Проверка и минимальное устранение неполадок §

После перезапуска сервера смонтировать | grep var должен быть успешным, df -h должен указать, что /var монтируется в другую файловую систему, а lsblk указывает /var на lvm

Ниже представлена ​​информация после переноса:

Если по какой-то причине сервер не заработал должным образом, войдите в виртуальную машину через консольное подключение (virt-manager) из KVM и выполните следующие действия:

Многие сервисы используют /var для журнальных сообщений и хранения данных помимо конфигураций, всегда полезно, особенно в серверных средах, иметь достаточный объем свободного места в каталоге /var.

Все описанные выше шаги выполняются и проверяются в Fedora 32 Server Edition как часть освобождения места для образов контейнеров и монтирования связанных томов.

Спасибо за ваше время, и я надеюсь, что оно потрачено не зря. Я буду очень рад услышать ваши мысли в разделе комментариев, или вы можете связаться со мной любым способом, указанным в нижнем колонтитуле 😄.

Я хочу хранить /var в отдельном разделе от / . Как правильно это настроить?

2 ответа 2

Сначала подготовьте новый раздел (например, с помощью parted и mkfs ).

Скажем, раздел /dev/sda5

Смонтируйте новый раздел:

Синхронизировать текущую переменную:

Добавить запись в /etc/fstab

Если вам нужно вернуться к своему старому /var, просто закомментируйте запись в fstab.

Я бы добавил некоторую информацию, чтобы освободить место на старом /var : начать с livecd, смонтировать раздел на установленной системе / и rm -rf /var/* .

Хорошее замечание. Или вы можете смонтировать / в какое-либо другое место в текущей системе во время ее работы (но после перезагрузки). Затем вы можете добраться до старого /var и удалить его, если хотите

Раньше я тоже об этом задумывался. Первая 1 является чем-то действительно архаичным и неэффективным, вторая управляет порядком fsck, когда пришло время сканировать ваш добавочный во время загрузки. Я больше не обращаю на них внимания. Просто поставьте 1 1, потому что этого требует синтаксис.

Вы должны поставить 2 2, чтобы такие вещи, как / get fsck, сканировались до / var при 30-й перезагрузке. В противном случае, если /var выйдет из строя и попросит вас исправить что-то вручную в одной пользовательской оболочке, у вас не будет никакой файловой системы. Забавный материал.

Разве не рекомендуется использовать UUID в fstab? Я получил соответствующий с помощью blkid -o list -s UUID , но я думаю, вам нужно запустить с помощью sudo

Когда я занял новый виртуальный сервер, предоставленный хостинговой компанией моего работодателя, в корневой файловой системе не хватило свободного места. К счастью, они использовали Logical Volume Manager (LVM) для разделения виртуального диска, и было достаточно свободного места для создания новых томов. Я создал дополнительные логические тома для var и home, которые раньше были обычными каталогами в корневой файловой системе. Поскольку провайдер виртуального сервера не предоставил KVM-подобный интерфейс, с помощью которого я мог бы получить доступ к серверу в однопользовательском режиме, я использовал метод, очень похожий на метод, описанный Александром (этот ответ включает дополнительные сведения о восстановлении дискового пространства в дополнение к командам, специфичным для LVM).

Создать новую файловую систему /var с помощью LVM

Создайте логический том для новой файловой системы var, смонтируйте его (используя временный каталог) и скопируйте файлы из текущего /var в новую файловую систему:

Поскольку запущенные процессы будут иметь файлы в /var открытыми и используемыми, дерево каталогов нельзя просто переместить в новую файловую систему. Рекурсивно ( -r ) копировать файлы из текущего раздела /var в новую файловую систему, сохраняя при этом атрибуты файлов и расширенные атрибуты (параметр -a, --archive). Осторожный пользователь может сначала создать моментальный снимок LVM текущего тома перед копированием, но это слишком много не по теме для данного вопроса.

Кроме того, файлы можно копировать с помощью rsync с параметром -a, --archive для сохранения меток времени, владельцев, режимов и т. д. и параметром -X, --xattrs для сохранения расширенных атрибутов, таких как метки безопасности, используемые AppArmor и SELinux:

Обновить таблицу файловой системы

Настройте новую файловую систему для использования в качестве новой точки монтирования для /var, добавив следующую строку в /etc/fstab. Обратите внимание, что в качестве номера прохода (последнее поле) используется 0, чтобы файловая система не проверялась автоматически ( fsck ) после определенного количества перезагрузок.

Поскольку переход в однопользовательский режим невозможен, перезагрузите компьютер, чтобы использовать этот новый том как /var .

Удалить временную точку подключения

После перезагрузки компьютера новая файловая система будет смонтирована в /var, чтобы можно было безопасно удалить временную точку монтирования:

Восстановить место на диске из корневой файловой системы

Старые файлы /var по-прежнему будут занимать место в корневом разделе, но к ним будет нелегко получить доступ, пока другая файловая система смонтирована в /var (они «маскируются» новой файловой системой, использующей каталог /var в качестве монтирования). -точка). Используйте временную точку монтирования для монтирования корневой файловой системы, чтобы содержимое исходного каталога /var было доступно по альтернативному пути.

Читайте также: