Как стать автором
Обновить

Изменение схемы разбивки диска на арендуемом VPS

Время на прочтение5 мин
Количество просмотров13K
«Можно ли сделать произвольную схему разбивки диска на виртуальном сервере?» Такой вопрос однажды возник в моей голове. Сразу скажу — речь о случае, когда нет доступа к гипервизору (иначе это было бы слишком легко). На первый взгляд может показаться, что вопрос не решаемый. В самом деле — чтобы переразбить раздел, его нужно отмонтировать. В случае с домашними компьютерами для этого используют Live{CD,USB}. Но если в вашем распоряжении только ssh? Пару секунд на обдумывание — и я нашёл решение. Казалось, на этом можно успокоиться: сам проблему придумал, сам решил. Но потом я в шутку задал этот же вопрос коллеге, будучи уверен, что у него так же не возникнет затруднений с решением вопроса. Результаты меня удивили. Опросив других, оказалось что все опрошенные уверены, что переразбить диск на VPS невозможно. Дальше всех пошёл только один парень, который сказал: «Можно, но не корневой раздел».

Если вы тоже не знаете решения этой задачки или просто хотите посмотреть на пример реализации — добро пожаловать в статью!

Зачем вся эта возня?


По-большому счёту, конечно, не обязательна. Сервер ведь всё равно работает. Но, пожалуй, у каждого есть своё видение «правильной» разбивки, которое может не совпадать с тем, что есть на самом деле.

Мой виртуальный сервер с CentOS 6.6 x86-64 имел такую схему:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda3       24G  1,7G   21G   8% /
tmpfs           371M     0  371M   0% /dev/shm
/dev/xvda1      194M   29M  156M  16% /boot

# free -m
...
Swap:          511          0        511

В моей философии 200 метров на загрузочный раздел — это расточительство. Обычно я использую 32 Мб (из любви к «круглым» числам). Этого мне достаточно для размещения 4 ядер и ещё остаётся. Вполне естественно, что мне хотелось бы более эффективно использовать место виртуального сервера — убрать лишнее из /boot, присоединить к /. А заодно сменить ОС. Компания, которой принадлежит виртуальный сервер, предоставляет фиксированный список возможных операционных систем. К сожалению, в нём нет моей любимой Gentoo. Но… Разве это действительно значит, что я не могу её использовать?

Ответ на главный вопрос жизни, вселенной и этой статьи


Так как же переразбить корневой раздел? Специально для тех, кто не догадался сразу, я оставил выше подсказки. Да, всё верно — нас спасёт swap.

Вот общая схема для тех, кому нужен только сам принцип и нет нужды в объяснениях:
  • избавляемся от swap'а — получаем свободный раздел;
  • создаём на нём ФС;
  • облегчаем текущий корневой раздел до размера ФС на бывшем swap'е;
  • копируем данные на новый раздел;
  • переносим загрузочный раздел;
  • вертим как пожелаем освободившиеся разделы;
  • при необходимости повторяем действия по переносу корня до полного удовлетворения.

Как всё это сделать?


Вначале — отключим раздел подкачки и создадим на нём ФС. После чего уберём строчку о нём из /etc/fstab. Теперь интересный этап — облегчение ОС. Само собой, что если у вас уже есть какие-то данные на сервере — заберите их. Однако этого, скорее всего, будет не достаточно. В моём случае раздел xvda2 (где был swap) имел размер чуть более 0,5 Гб, а ОС, которую я получил после создания сервера — чуть более 1,5 Гб. Немного не хватает. Чтобы уменьшить размер, я выпилил все приложения, о которых знал, и которые не влияли на возможность:
  • загрузки сервера;
  • изменения разделов;
  • создания ФС;
  • работы с сетью;
  • подключения по SSH.

Если на вашем сервере есть предустановленная панель управления (в «моей» компании есть возможность сразу получить ISPmanager) — то там гарантировано будет куча лишнего для нас в данный момент. Сохраните конфиги, если желаете, а потом сносите все эти почтовые-веб-фтп-днс-прочие-сервера.

Но даже и без предустановленного обвеса на все случаи жизни в системе стоит много в данный момент лишнего. Чтобы получить список всех установленных программ в дебианообразных, выполните:

# dpkg --list

А в семействе красношапочных:

# yum list installed

Метод простой: вначале проходите по всему списку и удаляете то, что вы знаете, затем перебираете каждый пункт списка отдельно и смотрите на его зависимости. Внимательно смотрите на список приложений, которые будут удалены вместе с выбранным, и проверяйте, не затронет ли их удаление какой-то из пунктов списка выше.

Не переусердствуйте!
Я настолько увлёкся чисткой системы, что и сам не заметил, как остался без какого-либо текстового редактора. Т. к. ставить их заново мне было лень, то все конфигурационные файлы пришлось править при помощи sed'а. Ощущения были… интересные.

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

Кстати, есть ещё две возможности незначительно поправить место:
— изменить в первую очередь размер раздела с /boot, чтобы высвобожденное место добавить к месту раздела подкачки;
— и более экстремальная чистка — удаление (а лучше перенос на другую машину) содержимого /usr — все эти doc/, man/, файлы часовых поясов, шрифты и прочее. Будьте трижды внимательны при выполнении этих действий и не приступайте к ним без крайней на то необходимости.

Но, положим, вы всё же справились. Скопируйте всё содержимое текущего корня на новое место. И не забудьте поправить значения в /etc/fstab и в конфигурации загрузчика.

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

С Grub2 проблем не было. А вот Grub legacy (он же Grub 0.97) не подозревает, что имена разделов могут быть на подобии /dev/xvda2. Научим его этому. В файле /sbin/grub-install нужно найти строку:

        tmp_disk=`echo "$1" | sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \

А ниже:

        tmp_part=`echo "$1" | sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \

В моём случае это строки 99 и 105, но не исключаю что в разных дистрибутивах могут быть небольшие различия.
Замените вот эту часть:

[shv]d

Таким образом:

x[shv]d

Теперь с установкой grub 0.97 проблем не будет.

Если при удалении программ, установке загрузчика и редактировании конфигурационных файлов не было допущено ошибки, то, перезагрузившись, вы получите систему, которая работает на одном небольшом разделе. Теперь достаточно удалить старый корневой раздел (xvda3 в моём случае) и в конце освободившегося пространства создать новый. В очередной раз перетащив туда корень — мы получаем возможность менять разделы с самого начала диска.

Так как я решил заодно и поменять ОС, то вместо копирования туда-сюда файлов корневого раздела можно сразу создавать в новом месте файловую систему будущей ОС. К счастью, Gentoo не использует все эти новомодные графические установщики. Для того, чтобы поселиться на новом месте, ей достаточно распаковать чемоданы (архив третьей стадии — минимальная среда ОС), поправить несколько конфигов и выполнить несколько команд. К сожалению, мне не известно, сработает ли подобный подход с другими дистрибутивами.

Изменение разделов


Будьте внимательны при работе с разделами. Ядро не узнает о сделанных вами изменениях, пока вы не перезагрузитесь или не проинформируете его. Сделать это можно использовав команду partprobe из пакета parted. Но что интересно — если в CentOS 6.6 x32 удалось всё сделать без перезагрузок, то, использовав ту же версию ОС, но 64-х разрядную, оказалось, что partprobe не удаётся сообщить ядру об изменениях в таблице разделов и приходилось перезагружаться. Внимательно следите за тем, что бы у вас всегда где-нибудь был загрузчик и его конфигурация была верной с учётом текущей схемы разбивки.

Что в итоге?


Если при заказе VPS вы не можете повлиять на схему разбивки — это не значит, что вы не сможете воплотить на сервере своё виденье «правильной» схемы. Я изменил размер загрузочного раздела, оставив ему необходимый минимум и выделив дополнительные Мб под более нужные цели. Сделал два дополнительных раздела. И сменил ОС на ту, которая была нужна мне, а не выбирая из тех, которые предлагали мне. Однако, если вы решите повторить — настоятельно рекомендую вначале уточнить у компании, предоставляющей вам сервер — не повлияют ли запланированные вами изменения на его обслуживание. Возможно, какая-то программа или скрипт на физическом сервере, обслуживающем ваш VPS, рассчитывает на вполне определённые таблицы разделов.
Теги:
Хабы:
Всего голосов 11: ↑10 и ↓1+9
Комментарии10

Публикации

Ближайшие события