Как объединить два логических тома, которые находятся на одном физическом томе в LVM?


14

У меня есть два логических тома, один монтируется как /, другой монтируется как / home.

Я хочу объединить их, потому что /объем постоянно исчерпывает пространство. (Да, я знаю, что использует все это пространство; нет, я не могу его удалить.)

Я готов снять машину на день или два, чтобы сделать это.

ОС: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
Почему бы просто не увеличить /объем, не в этом ли смысл использования LVM?
Джейсонвриан

2
@jasonwryan Зачем мне нужно вручную настраивать, как выделяется дисковое пространство? Разве это не весь смысл файловой системы?
Ник ODell

@NickODell Нет. Если один том слишком мал для хранения данных, то он слишком мал. Общая емкость зависит от размера тома, а не от размера файловой системы. Однако логические тома упрощают изменение размера подключенных томов и объединение разнородных ресурсов хранения в один том. С LVM вы сможете делать то, что предлагает jasonwryan, даже не перезагружаясь: убедитесь, что обычные пользователи вышли из системы (чтобы освободить / home) umount / home lvreduce (не забудьте -r) заново смонтировать его, а затем выполнить lvextend на корневой файловой системе, и все готово. Если вы хотите объединить, вы должны сделать rsync.
Братчли

@JoelDavis Если я требую, чтобы все пользователи вышли из системы, уместно ли перезагружаться?
Ник ODell

@NickODell Хм ... да? Большинство Linux-систем являются серверами, вы должны понимать, что это будет предположение людей, если вы не скажете иначе.
Братчли

Ответы:


10

Я сделал, и переразметка сработала. Однако, поскольку в обоих руководствах отсутствуют области, я собираюсь подвести итог тому, что я сделал. Обратите внимание, что я заменил свое имя пользователя на zzzzи имя моего компьютера xxxxxxx. Кроме того, все команды должны выполняться от имени пользователя root, если не указано иное.

Сначала я сделал резервную копию:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Это создает сжатую резервную копию каталога / home и помещает ее на мой внешний диск. (Обратите внимание, что ваш внешний диск будет иметь другой путь.)

Теперь вам нужно перезагрузиться в однопользовательский режим.

reboot

Когда ваш компьютер снова включается, вам нужно искать такой экран:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Нажмите любую клавишу, чтобы прервать это. Вы должны увидеть такой экран:

личинка ботинок Нажмите a, затем пробел, затем введите single. Нажмите Enter.

Вы должны увидеть приглашение вроде этого:

 [root@xxxxxxx /] # 

Введите следующие команды:

df -h

Он должен показать вам Size, Usedи Avail. Мы заинтересованы в Used.
Запишите, сколько места используется вашим домашним томом. Нам это понадобится позже.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Помните, сколько места занял ваш домашний объем? Удвой это и отдай этой команде. Например, у меня было 15 гигабайт, используемых в моем домашнем каталоге, поэтому я измерил его до 30 гигабайт.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Предупреждение : следующий шаг может привести к потере данных. Убедитесь , что вы указали размер больше, чем предыдущая команда. Добавьте 5 гигабайт, чтобы быть уверенным.

lvresize -L 35G vg_xxxxxxx/lv_home

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

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Скопируйте ваши данные в корневой раздел

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(Между прочим, это -aважно, потому что в противном случае все будет принадлежать пользователю root, а вы этого не хотите.)
Быстро проверьте правильность копирования данных:

ls -lR /home

Теперь мы удаляем домашний раздел и говорим root, чтобы он снова занял новое место.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

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

nano /etc/fstab

Одна из этих строк скажет системе смонтировать раздел / home. Положите #перед ним. Нажмите Ctrl-O, Enter, Ctrl-X. Теперь вы можете перезагрузиться.

(Гипотетически, если вы забудете отредактировать fstab, как я, команда для монтирования вашего корневого раздела будет такой mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)


люблю детали!
ЯМР

Я столкнулся с подобной проблемой, но у меня нет физического доступа к машине. Есть ли способ сделать это, не требующий загрузки в однопользовательском режиме?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Теоретически, да. Если у вас есть доступ по SSH, вы можете сделать резервную копию своего /home. Затем, пока вы можете размонтировать /home, вы можете удалить его. Тем не менее, я не совсем квалифицирован, чтобы говорить вам через процесс. Это то, о чем вы должны задать новый вопрос.
Ник ODell

1
@NickODell: Я сделал задать новый вопрос: askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Это гораздо лучший совет, чем я мог бы дать вам.
Ник ODell

3

ВНИМАНИЕ: Сделайте резервную копию всех важных данных, прежде чем делать что-либо!

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

Удалите / home lv, а затем разверните / (root) lv

Скопируйте данные обратно в / home каталог

Редактировать 1

Ответ выше предполагает, что в корневом разделе недостаточно места для размещения данных в домашнем разделе.

Если это не так, просто смонтируйте домашний раздел где-нибудь еще и скопируйте данные, например:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Затем просто удалите домашний раздел и разверните корневой раздел.


3

Вы можете сделать это без какого-либо внешнего хранилища, запущенного из /, но вам нужно будет размонтировать /home.

Это не особенно рискованная процедура, если вы осторожны, но, тем не менее, применяется стандартный совет: сначала сделайте резервные копии, и протестируйте их.

Я буду использовать fooдля имени тома группы, а rootи homeкак имена логических томов. Это делает пути логических томов foo/rootи foo/home, и пути устройств /dev/mapper/foo-rootи /dev/mapper/foo-home. Я предполагаю, что они находятся в одной группе томов, в противном случае это усложняется и зависит от макета физического тома двух групп томов.

Сначала размонтируйте /homeи запустите e2fsck -f /dev/mapper/foo-home. Затем сначала сожмите файловую систему и соответственно логический том. Run , resize2fs /dev/mapper/foo-home NNNNгде NNNN этого количества блоков , которые вы хотите сохранить внутри объема (вы можете использовать кБ или МБ или ГБ вместо с суффиксом K, Mили G). После усадки файловой системы, уменьшить логический том , lvresize -L MMMM foo/homeгде MMMM является количеством мегабайта (обратите внимание , что единица по умолчанию отличается от resize2fs, но вы можете использовать одни и те же суффиксы K, M, G). Будьте очень осторожны, чтобы не сжать логический том дальше, чем файловая система - это один опасный шаг в этой процедуре.

Теперь в группе томов есть неиспользуемая комната. Запустите, lvresize -l +100%FREE foo/rootчтобы корневой том захватил все свободное место в группе томов. Затем запустите resize2fs /dev/mapper/foo-root(без параметра размера), чтобы увеличить файловую систему, чтобы охватить весь логический том; увеличение может быть сделано, пока объем установлен.

Теперь у вас есть место для копирования некоторых файлов. Если вам не хватает места для всего, переместите столько, сколько можете, затем повторите процедуру.

Как только вы скопировали все файлы /home, вы готовы уничтожить их. Убедитесь, что /homeон пуст (если вы переместили файлы) или что все файлы /homeбыли скопированы /root(если вы скопировали файлы). Чтобы уничтожить ненужный логический том, запустите lvremove foo/home. Наконец, увеличьте корневой том с помощью lvresize -l 0%FREE foo/rootи его файловую систему с resize2fs /dev/mapper/foo-home.


Примечание: / home отказывался отключаться, пока я не перезагрузился в однопользовательском режиме.
Ник ODell

Примечание: это упоминается как vg_ (имя машины) и lv_home
Ник ODell

Хорошо, я получил это работает. Однако в этом руководстве отсутствовало несколько деталей, поэтому я скоро опубликую свою полную историю команд.
Ник ODell

2

ОК, я оказался в том же положении. Кажется, CentOS по умолчанию создает небольшой корневой том и заполняет оставшуюся часть пространства /home. Я даже сначала протестировал настройки на виртуальной машине, но с меньшим диском CentOS не создавал домашний том. Я подхватил эту проблему, прежде чем стал ограниченным пространством, а также подумал, как не входить в однопользовательский режим. Следующее:

Получите доступ к машине, ssh в порядке (при условии, что пользователь не root).

  1. cd / так что вы не в домашнем каталоге
  2. sudo -s мы будем болеть за все это
  3. lsof /home убедитесь, что никто не использует домашний том, не должно быть
  4. mv, tarИли подобное содержание дома где - нибудь еще
  5. lvremove centos/home
  6. Отредактируйте /etc/fstabи закомментируйте или удалите строку для/home
  7. Переместите содержимое дома, из которого вы сделали резервную копию, обратно в /home- теперь вы находитесь в безопасном положении, перезагрузка здесь должна быть в порядке.
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root на CentOS 7 другие могут использовать resize2fs
  10. df -h тебе удалось?

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


Это определенно проще, если вам не нужно переносить какие-либо данные. :)
Ник ODell
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.