Изменение схемы разбивки диска на арендуемом VPS
«Можно ли сделать произвольную схему разбивки диска на виртуальном сервере?» Такой вопрос однажды возник в моей голове. Сразу скажу — речь о случае, когда нет доступа к гипервизору (иначе это было бы слишком легко). На первый взгляд может показаться, что вопрос не решаемый. В самом деле — чтобы переразбить раздел, его нужно отмонтировать. В случае с домашними компьютерами для этого используют Live{CD,USB}. Но если в вашем распоряжении только ssh? Пару секунд на обдумывание — и я нашёл решение. Казалось, на этом можно успокоиться: сам проблему придумал, сам решил. Но потом я в шутку задал этот же вопрос коллеге, будучи уверен, что у него так же не возникнет затруднений с решением вопроса. Результаты меня удивили. Опросив других, оказалось что все опрошенные уверены, что переразбить диск на VPS невозможно. Дальше всех пошёл только один парень, который сказал: «Можно, но не корневой раздел».
Если вы тоже не знаете решения этой задачки или просто хотите посмотреть на пример реализации — добро пожаловать в статью!
Зачем вся эта возня?
По-большому счёту, конечно, не обязательна. Сервер ведь всё равно работает. Но, пожалуй, у каждого есть своё видение «правильной» разбивки, которое может не совпадать с тем, что есть на самом деле.
Мой виртуальный сервер с CentOS 6.6 x86-64 имел такую схему:
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
...
Swap: 511 0 511
В моей философии 200 метров на загрузочный раздел — это расточительство. Обычно я использую 32 Мб (из любви к «круглым» числам). Этого мне достаточно для размещения 4 ядер и ещё остаётся. Вполне естественно, что мне хотелось бы более эффективно использовать место виртуального сервера — убрать лишнее из /boot, присоединить к /. А заодно сменить ОС. Компания, которой принадлежит виртуальный сервер, предоставляет фиксированный список возможных операционных систем. К сожалению, в нём нет моей любимой Gentoo. Но… Разве это действительно значит, что я не могу её использовать?
Ответ на главный вопрос жизни, вселенной и этой статьи
Так как же переразбить корневой раздел? Специально для тех, кто не догадался сразу, я оставил выше подсказки. Да, всё верно — нас спасёт swap.
Вот общая схема для тех, кому нужен только сам принцип и нет нужды в объяснениях:
- избавляемся от swap'а — получаем свободный раздел;
- создаём на нём ФС;
- облегчаем текущий корневой раздел до размера ФС на бывшем swap'е;
- копируем данные на новый раздел;
- переносим загрузочный раздел;
- вертим как пожелаем освободившиеся разделы;
- при необходимости повторяем действия по переносу корня до полного удовлетворения.
Как всё это сделать?
Вначале — отключим раздел подкачки и создадим на нём ФС. После чего уберём строчку о нём из /etc/fstab. Теперь интересный этап — облегчение ОС. Само собой, что если у вас уже есть какие-то данные на сервере — заберите их. Однако этого, скорее всего, будет не достаточно. В моём случае раздел xvda2 (где был swap) имел размер чуть более 0,5 Гб, а ОС, которую я получил после создания сервера — чуть более 1,5 Гб. Немного не хватает. Чтобы уменьшить размер, я выпилил все приложения, о которых знал, и которые не влияли на возможность:
- загрузки сервера;
- изменения разделов;
- создания ФС;
- работы с сетью;
- подключения по SSH.
Если на вашем сервере есть предустановленная панель управления (в «моей» компании есть возможность сразу получить ISPmanager) — то там гарантировано будет куча лишнего для нас в данный момент. Сохраните конфиги, если желаете, а потом сносите все эти почтовые-веб-фтп-днс-прочие-сервера.
Но даже и без предустановленного обвеса на все случаи жизни в системе стоит много в данный момент лишнего. Чтобы получить список всех установленных программ в дебианообразных, выполните:
А в семействе красношапочных:
Метод простой: вначале проходите по всему списку и удаляете то, что вы знаете, затем перебираете каждый пункт списка отдельно и смотрите на его зависимости. Внимательно смотрите на список приложений, которые будут удалены вместе с выбранным, и проверяйте, не затронет ли их удаление какой-то из пунктов списка выше.
Не переусердствуйте!
Я настолько увлёкся чисткой системы, что и сам не заметил, как остался без какого-либо текстового редактора. Т. к. ставить их заново мне было лень, то все конфигурационные файлы пришлось править при помощи 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, рассчитывает на вполне определённые таблицы разделов.
http://habrahabr.ru/post/257269/
|