В настоящее время я застрял на схеме ограничительного разбиения, которая приводит к заполнению моих разделов. Это выглядит так:
/dev/sda7 870G 315G 511G 39% /
/dev/sda6 2.0G 271M 1.6G 15% /tmp
/dev/sda3 15G 13G 1.5G 90% /usr
/dev/sda2 15G 8.6G 5.0G 64% /var
/dev/sda1 99M 36M 58M 39% /boot
tmpfs 7.9G 0 7.9G 0% /dev/shm
Я хочу переместить данные /usr
(и /var
, возможно, также) в корневой раздел. Мне не особо интересны сами разделы, поэтому слияние не требуется.
Какой подход будет наилучшим для этого? В настоящее время мой план таков:
cp -R /usr /newusr
umount /usr
mv /newusr /usr
Неужели все так просто или я что-то упускаю из виду?
решение1
Ваш подход правильный. Создайте каталог на корневом разделе, скопируйте туда свои данные, отмонтируйте usr
раздел и переместите новый каталог в usr
. Не забудьте /etc/fstab
потом отредактировать свой.
решение2
Сначала всегда нужно проверять, достаточно ли у вас свободного места. На этот раз оно есть.
О копии:
Не все так просто. Есть специальные файлы, чьи специальные атрибуты не всегда копируются правильно. Вместо cp -R
, используйте
cp -vfa /usr /newusr
Если вы хотите увидеть, что в данный момент делается, это можно сделать с помощью флага «-v».
- Не забудьте внести
/etc/fstab
изменения. - ВНИМАНИЕ: После переразметки ядро не всегда может перечитать вашу новую таблицу разделов, и поэтому возможно, что оно будет использовать вашу старую! Это очень опасно! Версию ядра о текущей таблице разделов можно найти в
/proc/partitions
, а таблицу разделов на диске можно прочитать с помощьюfdisk -l /dev/sda
. Если есть несоответствие о разделе, который вы хотите изменить в данный момент, лучше всего перезагрузиться.
решение3
Для этого необходимо сделать это в однопользовательском режиме или с помощью LiveCD, который вы найдете в Интернете.
Более того, это можно сделать во время выполнения (конечно, это немного рискованно), но я думаю, что этот способ будет работать только для /var, а не для/usr, некоторые библиотеки времени выполнения зависят от этой папки. Вы можете попробовать на тестовой машине заранее, если это работает.
Во-первых, ты вообщедолженпроверьте, что все процессы/службы используют/пишут в каталог, который вы хотите переместить.
lsof | grep -E '/usr|/var'
Обычно /var по-прежнему используется для файлов pid и sock,/usrа также любая библиотека будет в этом нуждаться.
Итак, остановите/убейте службы и процессы, которые появляются.
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 723 root 5u REG 8,1 0 8651393 /var/log/cups/error_log
cupsd 723 root 6u REG 8,1 0 8651908 /var/log/cups/page_log
cupsd 723 root 12u unix 0xffff88020d97d780 0t0 9958 /var/run/cups/cups.sock
В этом коротком примере запущен демон cups, который использует эти каталоги. Если их остановить, они не появятся в выводе lsof.
После этого вам понадобится копия ваших текущих данных, я предлагаю использовать rsync вместо cp (чтобы сохранить все, разрешения, символические ссылки и т. д.)
mkdir /mnt/var
mkdir /mnt/usr
Сделайте резервную копию
rsync -avz /var/* /mnt/var
rsync -avz /usr/* /mnt/usr
Размонтировать папки
umount /var
umount /usr
Восстановить данные
rsync -avz /mnt/var/* /var
rsync -avz /mnt/usr/* /usr
Редактировать ваш/etc/fstabфайл и прокомментируйте/удалите записи, где/вари/usrгде предполагается его установка.
Затем вы можете запустить все остановленные службы или перезапустить машину. Если для/usrне работает, вы не можете остановить демон (возможно, вы не можете убить его, потому что это зависит от init pid), единственный способ — использовать LiveCD.
Хотя вы не упомянули, какой тип машины используется (ваш ПК, офисная машина, сервер и т. д.), от этого будет зависеть выполнение действий максимально формальным способом.