Як з’єднати два логічні томи, які знаходяться на одному фізичному томі в 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?
jasonwryan

2
@jasonwryan Чому мені потрібно вручну налаштувати розподіл дискового простору? Чи не в цьому вся суть файлової системи?
Nick ODell

@NickODell Ні. Якщо один об'єм занадто малий, щоб зберігати дані, він просто занадто малий. Загальна ємність є фактором розміру гучності, а не розміром файлової системи. Логічні томи спрощують змінити розмір встановлених томів і об'єднати різні ресурси зберігання в один том. За допомогою LVM ви зможете робити те, що пропонує Jasonwryan, навіть не перезавантажуючись: переконайтеся, що постійні користувачі вийшли з системи (щоб звільнити / додому) в кореневій файловій системі, і ви закінчили. Якщо ви хочете злитися, вам потрібно зробити rsync.
Братчлі

@JoelDavis Якщо я вимагаю, щоб усі користувачі вийшли з системи, чи важливо я перезавантажуватися?
Nick 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...

Натисніть будь-яку клавішу, щоб перервати це. Ви повинні побачити такий екран:

грубний черевик centos Натисніть 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

У цей момент я зробив велику помилку, з якої можна дізнатися. Я перезавантажився, і коли система відновилася, вона відмовилася монтувати мій кореневий розділ як читання-запис, оскільки не могла змонтувати мій / домашній розділ. Отже, перед перезавантаженням ми набираємо текст

nano /etc/fstab

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

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


любите деталі!
nmr

У мене виникли подібні проблеми, але я не маю фізичного доступу до машини. Чи є спосіб зробити це, що не потребує завантаження в однокористувацький режим?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Теоретично, так. Якщо у вас є доступ до ssh, ви можете створити резервну копію свого /home. Потім, поки ви зможете їх відключити /home, ви можете вийняти її. Однак я не дуже кваліфікований, щоб говорити з вами через процес. Це те, про що слід задати нове запитання.
Нік Оделл

1
@NickODell: Я зробив задати новий питання: askubuntu.com/questions/1115913 / ...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Це набагато краща порада, ніж я міг би тобі дати.
Нік Оделл

3

ПОПЕРЕДЖЕННЯ: Перед тим, як робити що-небудь, слід створити резервну копію всіх важливих даних!

Вам потрібно буде перемістити всі дані з / домашнього розділу в інший розділ, локальний розділ або зовнішній диск або куди б там не було місця.

Видаліть / home lv, а потім розгорніть / (root) lv

Скопіюйте дані назад у / домашній каталог

Редагуйте 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 відмовились відключати, поки я не перезавантажився в режимі однокористування.
Nick ODell

Примітка: це згадується як vg_ (назва машини) та lv_home
Nick ODell

Гаразд, я працював. Однак у цьому посібнику бракує декількох деталей, тож я незабаром опублікую повну історію команд.
Nick 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 вам це вдалося?

Сподіваюсь, це комусь полегшує. Дійсно, що ви можете робити в прямому ефірі у файлових системах сьогодні.


Це, безумовно, простіше, якщо вам не потрібно мігрувати будь-які дані. :)
Nick ODell
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.