Как переместить / usr в новый раздел?

26

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

Это можно сделать во время работы Ubuntu, или мне нужно использовать LiveCD для этого?

Натан Осман
источник

Ответы:

27

Было бы безопаснее использовать Live CD, но вы могли бы сделать:

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

Смотрите ниже подробности о каждом шаге.

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

Копирование файлов

Я бы использовал cp -a. -aэто вариант архива. Со страницы руководства :

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

Редактирование / etc / fstab

Вам нужно знать UUID вашего нового раздела. Вы можете увидеть отображение, выполнив:

$ ls -l /dev/disk/by-uuid/

А затем добавьте эту строку в /etc/fstab:

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

Измените UUID на свой UUID и измените ext4на тип используемой вами файловой системы - вы должны знать это, если вы настроили раздел.

Удалить старые файлы

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

$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt

Но некоторое небольшое опечатка (скажем, нажатие Enter, когда вы только печатали sudo rm -rf /mnt) может привести к катастрофе, поэтому я бы использовал этот метод, только если вы были очень уверены в том, что делаете, действительно не могли справиться с простоями или не имели физический доступ к машине и, следовательно, не удалось загрузиться с живого компакт-диска или USB-флешки.

Хэмиш Даунер
источник
4
rsyncгораздо лучше подходит для этого, чемcp
Марко Чеппи
1
@MarcoCeppi Не могли бы вы расширить это? Может быть, дать вариант ответа, который использует rsyncвместо?
Казарк
6
Заменить команду cp на rsync -avz. Rsync позволяет перезапускать копии и обычно используется при перемещении между разделами, блочными устройствами или компьютерами.
Марко Чеппи
2
НЕ используйте cp. Это не сохраняет жесткие ссылки. Это сломает обновления пакета в будущем. Например /usr/bin/s2pи /usr/bin/psedтот же файл. Перемещение с cpсоздаст 2 независимых версии этого файла. Делай rsync -aHвместо этого.
ᴉɹǝɥɔ
1
Прежде всего, пропустите флаг -z - он включает сжатие, которое, если вы не отправляете файлы по сети, бесполезно (кроме того, что rsync обычно достаточно умен, чтобы игнорировать его, но, тем не менее, может с таким же успехом отбросить его) , @ AleksandarStefanović вы определенно хотите, чтобы содержимое там, а не папка, и причина, по которой это произошло, вызвана некоторыми причудами rsync: он обрабатывает rsync -avH a/ bиначе rsync -avH a b, чем копирование содержимого папки a(то есть a/*) в первом случае и самой папки В секунду. Убедитесь, что вы используете косую черту здесь.
Дараэль
7

Поскольку большинство используемых библиотек находятся в / usr, я бы не рекомендовал перемещать этот каталог во время работы Ubuntu. На самом деле, вы, вероятно, получаете сообщения об ошибках при попытке сделать это. Следовательно, лучше всего использовать LiveCD.

Вы можете использовать несколько возможностей для перемещения / копирования файлов cp, rsync и т. Д. Вы хотите убедиться, что любые символические ссылки созданы, а не просто скопированы. У cp и rsync есть варианты для этого.

После перемещения файлов в другой раздел вам нужно добавить другое монтирование в / etc / fstab для монтирования нового раздела в / usr.

txwikinger
источник
2

Внимание: я понятия не имею, что я делаю, я просто копирую команды и делаю то, что предлагают другие. Это может быть неправильный способ сделать это, но это работает для меня (пока, по крайней мере).

Вот как я это сделал (следуя ответу Хэмиша и комментариям):

  1. Скопируйте все файлы только что созданного раздела (замените его на расположение вашего раздела, оно должно выглядеть аналогично моему):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. На данный момент я понял, что он скопировал все в /usrпапку на разделе, который не будет работать , поэтому я скопировал все (с файловым менеджером) из этой папки в корень раздела, и удалил это пустое папка потом.

  3. Изменить /etc/fstab(так же, как в ответе Хэмиша, конечно, заменить на ваш UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Шаг, который оказался не очень мудрым: я изменил имя подключенного в данный момент /usrраздела /usrBACKUP, просто чтобы я знал, что при перезагрузке системы он фактически перезагружается во вновь созданный раздел, а не в старый. , После этого все глянуло на экран, и мне пришлось выключить его, нажав и удерживая клавишу включения (гений как я) . Пропустите этот шаг, если вы не хотите давать сбой вашей системе.

  5. Перезагрузите систему

  6. После перезагрузки откройте системный монитор или подобное приложение, чтобы увидеть, /usrсмонтирован ли ваш новый раздел, и проверить, все ли прошло по плану.

  7. После проверки, что все в порядке, вы можете удалить свой старый /usrраздел. Я оставлю свой на всякий случай, если что-то пойдет не так.

Александар Стефанович
источник
Зачем отвечать на вопрос 5 лет, если на него уже есть принятый ответ, и вы не знаете, о чем говорите?
CMKS
2
@cmks, потому что я чувствовал, что другие ответы были неполными - я не получил полного решения из одного ответа, и ни в одном из ответов не было достаточно деталей для них. Я чувствовал, что пользователям, которые придут на этот вопрос, понадобится помощь. Неважно, если пять лет, если кому-то все еще нужна информация из этого вопроса.
Александар Стефанович
1
Почему все перезагружают свою систему? Разве не должно sudo mount -aпозволить ему продолжать работать?
Хаген фон Айцен
@Hagen Я думаю, что это просто для хорошей меры
Александар Стефанович