Как переместить / VAR на другой существующий раздел?

16

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

Вот мой дф:

File system          Size. Occ. Avai. %Ful. Monté sur
/dev/sda1             5,0G  4,5G  289M  95% /
tmpfs                 242M     0  242M   0% /lib/init/rw
udev                   10M  2,7M  7,4M  27% /dev
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda2              15G  406M   14G   3% /home

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

Жереми
источник

Ответы:

19

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

  • mkdir -p /home/var
  • rsync -va /var /home/var
  • mv /var /var.old# вы можете удалить, /var.oldкогда вы закончите, чтобы освободить место
  • mkdir -p /var
  • mount -o bind /home/var /var
  • обновите свой, /etc/fstabчтобы сделать привязку монтируемой постоянной.

/etc/fstab

 /home/var /var        none    bind
Zoredache
источник
Thks! Как я могу войти в однопользовательский режим? Папка 'var' останется в / home?
Жереми,
Да, всегда найдется /home/varкаталог, если вы решите проблему таким образом. Один из способов - войти в однопользовательский режим, перезагрузившись и выбрав однопользовательский режим в меню загрузки.
Зоредаче
Я не совсем уверен, будет ли это работать нормально все время. Если вы используете более новую версию (wheezy), вы можете быть в порядке, так как она имеет / run файловую систему. OTOH: в начале процесса загрузки файлы могут быть открыты в / var до того, как он будет подключен.
Cтамас
1
@cstamas, наличие / var в отдельной файловой системе поддерживается и всегда было. Наличие / var на отдельном даже рекомендуется как хорошая вещь в FHS и официальных документах Debian.
Зоредаче
Хорошо я думаю ты прав Мне было просто странно делать это с привязными креплениями.
Cтамас
5

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

 mkdir /home/var
 <move contents of /var to /home/var -- however you want; EX: mv /var/* /home/var>
 mv /var /var.old
 ln -s /home/var /var

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

Якорь,
источник
1
Не уверен, почему кто-то должен был бы проголосовать против. Это будет работать отлично. Сим-ссылка должна работать нормально. Я просто использую крепления для других вещей, поэтому я склонен думать о них в первую очередь.
Зоредаче
1
Чтобы добавить к этому, это может быть не так безопасно, но на самом деле это работает. Я недавно сделал это на машине до запуска в производство. Я бы проявил осторожность, если это машина, которая использовалась или имеет много запущенных процессов. В моем случае это был новый сервер, предназначенный для запуска только tomcat.
AJ Браун
1
Символьная ссылка / var работает, но вместо этого я предпочитаю помещать запись в / etc / fstab, чтобы помнить себя, на какой раздел / том я что ставил и почему (вы можете добавлять комментарии). Этот способ также более понятен для меня, что я должен изменить в конфигурации, если мне нужно что-то изменить в моем оборудовании.
Герлос
1
Я не вижу, как это будет работать. Я хочу, чтобы это работало, но основные вещи, такие как init, используют / var, не так ли?
Сью Спенс
1

Переместиться /varбез перехода в однопользовательский режим

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

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

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

sudo lvcreate -L 60GB -n var VolGroup00
sudo mkfs.ext4 /dev/VolGroup00/var
sudo mkdir /var.new
sudo mount /dev/VolGroup00/var /var.new
sudo rsync -raX /var/ /var.new/

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

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

/dev/mapper/VolGroup00-var    /var    ext4  defaults  0 0

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

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

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

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

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

    sudo mkdir /old-root
    sudo mount /dev/mapper/VolGroup00-root /old-root/
    sudo rm -rf /old-root/var/*
    sudo umount /old-root/
    sudo rmdir /old-root/
    
Энтони Дж - справедливость для Моники
источник