Магия разделов по Линуксу
Partition Magic из консоли
Roman I Khimov, Воскресенье, 28 Ноябрь 2004, 11:28

Буквально несколько дней назад мне потребовалось расширить раздел Linux для свопа, заодно расширить раздел для корневой файловой системы своей SuSE и удалить уже, в конце концов, раздел NTFS с одной небезызвестной операционной системой. Естественно, что Partition Magic здесь был уже неприменим, во-первых, не было под рукой, во-вторых, известно какие у нас Partition Magic'и продают за 70-90 рублей, в-третьих, известно, что PM некорректно работает с разделами Ext 2/3 и тем более ReiserFS, и, в конце-концов, я прекрасно знал, что все могу сделать с любого Live CD с дистрибутивом Linux.

В принципе, ничто не мешает менять эти разделы и с установленной системы, но как здесь будет с изменением размера корневой ФС сказать не берусь, да и вообще, операции над не просто живой, но и дышащей файловой системой как-то проводить не хочется, пускай там все лежит тихо-мирно, мы подвигаем, потом оживим. Плюс к тому, не у всех уже установлен хоть какой-нибудь Linux, с которого можно поменять разделы, решение же с Live CD хорошо своей универсальность.

Изначально я планировал использовать для этой цели Blin Linux 1.3 в версии с Gnome 2. Во-первых, мне хотелось, чтобы дистрибутив был маленьким, хоть у меня и лежал рядом Knoppix 3.3 (не свеж, но все ж), и умещался на mini-CD. Почему? Ну, во-первых, мне не хотелось перезаписывать ни одну из своих "" CD-RW, а во-вторых, я расцениваю Live CD в первую очередь как дистрибутивы для восстановления и диагностики системы, а такие CD вдвойне хороши если они помещаются в кармашек рубашки и их можно носить с собой всегда и везде. Итак, я записал на mini cd-rw Blin (183,7 Мб) и загрузился с него.

<span style='float: right; border:3'><a href='http://www.osrc.info/files/images/articles/partmagic/blin-first.png'><img src='http://www.osrc.info/files/images/articles/partmagic/blin-first-small.png' alt='Первый Blin (скриншот)' title='Скриншот Blin Linux (первая загрузка)'/></a></span>
Blin отозвался приветствием и небольшим пояснением своих параметров, пока я пытался сообразить, что бы этакое ему вписать, он начал загружаться. Ну, собственно, и ладно, пускай, подумал я. Через некоторое время я увидел жутковато мерцающий экран (на LCD) уже в иксах, в разрешении, похоже, 800x600, что отнюдь не радовало. Загрузился Gnome, открылась какая-то справка (на мой взгяд, для Live CD очень правильное решение сразу же запускать справку), это все мне понравилось, но терпеть такое изображение я был не совсем согласен, посему перезагрузился и выставил в том приглашении "<tt>blin screen=1024x768</tt>", нажал одну из самых потертых клавиш на своей клавиатуре и подождал пока он... не вывалился в консоль с сообщением о невозможности запустить иксы с такими параметрами.

Значит все замечательно, подумал я, все равно от иксов в данной затее толку немного, перезагрузился (зачем, я так до конца и не понял - консоль-то уже была под руками!), набрал "<tt>blin text</tt>", то есть обозначил свое желание работать в текстовом режиме. Вскоре показалась консоль, я этому событию порадовался, хотя, конечно, режим 80x25 не самое лучшее, что я видел. Но я подключил внешний USB 2.0 винчестер, примонтировал единственный на нем ReiserFS раздел, начал копировать раздел со своего винчестера в файл на внешнем (об этом попозже) и... по истечении некоторого времени этот процесс остановился. А если точнее, то подвис, потому как винчестер внешний горел красной лампочкой, но никакой записи уже не шло, что было видно из других консолей.

Первое знакомство с Blin Linux явно вышло комом, но что поделать, возможно это проблемы моего железа, возможно у меня на этот день был не блинный гороскоп, но затею с Blin я выбросил из головы. Сразу же возникло желание зажечь образ Knoppix, но об этом я уже писал выше. Отбросил и это желание, посмотрел, что же у меня еще есть и обнаружил свежайший минимальный Live CD Gentoo 2004.3. Его образ весит всего лишь 50 с половиной мегабайт, но он не включает в себя X и соответствующие графические среды/приложения. Да здравствует консоль!
<span style='float: right; border:3'><a href='http://www.osrc.info/files/images/articles/partmagic/gentoo2004.3.minimal-live-cd-splash.png'><img src='http://www.osrc.info/files/images/articles/partmagic/gentoo2004.3.minimal-live-cd-splash-small.png' alt='Gentoo boot splash' title='Загрузочный splash Gentoo 2004.3'/></a></span>
Gentoo сразу же порадовал прекрасным фреймбуфером в режиме 1024x768 и 16-битным цветом. Забавная заставочка на загрузке (мне ну очень понравилось , загрузка, после чего мы попадаем в консоль и начинаем, собственно, работать.

Итак. По предварительно составленному мною плану операция должна была проходить путем копирования корневого раздела на внешний винчестер, дальнейшей (частичной) переразбивки винчестера, закатывания старого корня на новое место и изменения размера ФС. Что здесь, кстати, важно понимать, и что не дает понять Partition Magic, так это то, что размер раздела и размер файловой системы - это разные понятия. Первое - всего лишь разметка диска, информация о которой лежит в MBR, а второе - внутреннее дело каждого раздела. То есть, возможны ситуации, когда файловая система будет меньше по размеру, чем выделенный для нее раздел. Это нормально, просто ФС отформатированана один размер, а ей дали другой.

<span style='float: right; border:3'><a href='http://www.osrc.info/files/images/articles/partmagic/gentoo-console.png'><img src='http://www.osrc.info/files/images/articles/partmagic/gentoo-console-small.png' alt='Красивая консоль Gentoo' title='Красивая консоль Gentoo'/></a></span>
Вспоминаем - что есть Unix? Unix это файл. Файл везде и файл всегда. Что такое раздел на винчестере в Linux? Это файл. Это файл вида "<tt>/dev/hdxx</tt>", третья буква по очереди отделяет друг от друга различные физические винчестеры, а третья цифра - разделы на том самом винчестере. Итого, имеем записи вида "<tt>/dev/hda1</tt>", "<tt>/dev/hda4</tt>", "<tt>/dev/hda6</tt>", и т.д. В этих примерах физический винчестер один, однако, если их несколько, то определиться будет легко либо по существующим разделам и показаниям cfdisk (чуть позже), либо просто зная принцип по которому назначаются буквы. Как ни странно, но этот принцип тривиален - по порядку. То есть на первом контроллере master имеет букву "a", там же slave "b", на втором master "c", на ней же slave "d" и так далее, если у вас большее число IDE-контроллеров (в чем я сомневаюсь .

Теперь рассмотрим разделы. Разделы тоже нумеруются очень просто и логично. Но надо понять, какие же бывают разделы и что с этим делать. Итак, разделы бывают первичные (Primary) и логические (Logical). Сам по себе винчестер с традиционным разбиением может содержать до четырех первичных записей, но одна из них может содержать в себе другие записи - записи о логических разделах. Такой раздел называется Extended разделом и у него есть свой тип файловой системы - <tt>0x05</tt>, фактически, это все, что отличает Extended раздел от Primary в таблице разделов. На всякий случай напомню, что информация о типе ФС хранится вместе с записью о разделе. Так что, хоть структура диска и может быть представлена как плоская, она скорее все-таки напоминает дерево (из-за вложенности логических разделов в один первичный).

Разберемся окончательно с разделами. Все Primary (и Extended, соответственно) разделы (4 штуки) идут по порядку как <tt>hdx1</tt>, <tt>hdx2</tt>, <tt>hdx3</tt> и <tt>hdx4</tt> (подставьте вместо x букву своего диска). Этот порядок задается только физическим размещением разделов на диске. Стало быть, в моем случае, разметка была такая: один Extended раздел в самом начале диска и затем три Primary. В Extended разделе находились два логических раздела. Логические же разделы нумеруются также просто - по порядку с <tt>hdx5</tt>.

Надеюсь, что мои запутанные объяснения хоть в чем-то кому-то помогли (во всяком случае, по ходу написания статьи я и сам успел запутаться ). Так вот, переходим непосредственнок работе. Основной наш инструмент - <tt>cfdisk</tt>, программа для редактирования разметки диска. Со своими задачами она справляется на ура, но есть одна заминка - мы работаем над "" диском и нам бы надо сохранить данные.

Но это очень просто! Я, например, как уже было упомянуто выше, просто подключил внешний винчестер и скопировал необходимый раздел на него, во-первых, я тогда не знал об одной утилитке, которая может двигать разделы, а во-вторых, сделал все-таки резервную копию! Как-никак, а это тоже важно. Чем же скопировать раздел в Linux, возможно спросит озадаченный читатель, привыкший к графическим backup-утилитам? Ну как чем... Вернитесь несколькими абзацами выше и вспомните, что в Unix все есть файл. А я так долго распинался про то, как найти файл вашего раздела именно для того, чтобы потом вы могли его скопировать быстро и безболезненно. Что у нас есть для работы с файлами? <tt>cp</tt> здесь не подойдет, как бы того ни хотелось, все-таки файл файлом, но так наглеть не надо (файл специальный, надо понимать). А мы просто возьмем да прочитаем файл и перенаправим поток в какой-нибудь файл! Старый добрый <tt>cat</tt> приходит на помощь.

Можно, в принципе, воспользоваться и <tt>dd</tt>, в данном случае это не принципиально, но с <tt>dd</tt> вроде как чуть-чуть сложнее получается. Кстати, а для "" винчестеров есть еще такая вещь как <tt>ddrescue</tt> - при ошибке чтения эта, в отличие от просто <tt>dd</tt> и уж тем паче <tt>cat</tt>, не вывалится в консоль на том месте, где она возникла, а будет идти дальше и выуживать все что можно. Так вот в нашей красивой консоли достаточно набрать "<tt>cat /dev/hdxx &gt; file</tt>" и пойдет процесс копирования! В моем случае копировался второй раздел из первого Extended, посему я сделал "<tt>cat /dev/hda6 &gt rootfs</tt>". Конечно, имена файлов можете задавать по обстоятельствам, но процесс копирования после этого пойдет, а именно это нам и нужно! Кстати, такой скорости копирования на свой внешний винчестер я еще никогда не видел. Конечно, это неудивительно - текстовый режим, минимум сервисов, один большой сплошной файл... В общем, даже 8 гигабайт, которые занимал мой старый раздел копировать было отнюдь не утомительно.

Вкратце о моем старом разбиении диска на 40 Гб: Extended раздел в самом начале, содержащий 256-мегабайтный раздел со свопом для Linux и раздел на 8 Гб для корневой ФС Linux, Primary раздел для Windows на 8 Гб, раздел на 4 Гб для экспериментов и оставшееся место было выделенно для различных данных (тоже Primary раздел), сначала это был просто раздел с FAT32, но чуть позже это стало разделом <tt>/home</tt>, зашифрованным twofish256 (Хе . К сожалению, скриншот, который сразу бы все прояснил, в этом случае делать уже поздно.
<span style='float: right; border:3'><a href='http://www.osrc.info/files/images/articles/partmagic/cfdisk.png'><img src='http://www.osrc.info/files/images/articles/partmagic/cfdisk-small.png' alt='cfdisk screenshot' title='Скриншот cfdisk'/></a></span>
Итак, раздел, который надо было сохранить, мы сохранили, переходим к <tt>cfdisk</tt>. Интерфейс cfdisk нагляден и прост (скриншот сделан уже после разбиения - да, вот такой бардак творится сейчас на моем винчестере , в нем сразу же видно, кто есть кто, и что с этим можно делать. Стрелочками вверх-вниз перемещаемся по разделам, вправо-влево по доступным действиям. Нашли необходимое - нажали Enter. Далее по обстоятельствам, например, при создании нового раздела вас спросят сначала о типе раздела, а потом и сколько места ему выделить.

Думаю, что общение с этой замечательной утилитой не должно вызывать трудностей - удалить раздел можно через Delete, создать через Create, все просто. Главное - после того, как вы приведете таблицу разделов к желаемому виду, записать изменения с помощью Write. Дабы уберечь вас от ошибок он еще раз переспросит, хотите ли вы записать таблицу разделов и, если вы согласны, то смело впечатывайте "yes". В моем случае, я удалил первый логический раздел (то есть два логический раздела, если посмотреть с другой стороны), удалил первый Primary раздел и привел таблицу к тому виду, что вы видите на скриншоте. Вообще-то, после переноса <tt>/home</tt> на отдельный раздел я уже опять не удовлетворен текущим положением дел, но пока что повторять процедуру переразбиения желания нет - других забот хватает.

Итак, это, конечно, замечательно, что мы переразбили винчестер, но что из этого вышло? У меня вышло вот что - так как начало нового и старого swap разделов совпали (самое начало винчестера в обоих случаях), то информация о старой файловой системе swap осталась на месте, что я и обнаружил уже загрузившись в систему. Те же 256 Мб, как я уже говорил - размер ФС и размер раздела это не одно и то же. В то же время, раздел на почти 12 Гб фактически остался без ФС. Но это проблема легко решаема - делаем "<tt>cat rootfs &gt; /dev/hda6</tt>", или подставляйте свои имена файлов/разделов. То есть делаем обратную операцию нашему простому резервному копированию.

Кстати, здесь хочу отметить, что пытаться таким образом уменьшать раздел с сохранением данных - неправильная инициатива. Чуть-чуть попозже доберемся до этого. А теперь, после успешного возвращения на место нашей ФС, мы обнаружим, например, смонтировав ее, что размер ее остался прежним - каким был до изменения размера раздела! Конечно, это непорядок, но и тут есть все, чтобы решить проблемы - программы <tt>resize2fs</tt>, <tt>resize_reiserfs</tt>, <tt>ntfsresize</tt> (вот ее в Gentoo 2004.3 minimal Live CD нет) помогут. Единственное, чего мне не удалось найти отдельной утилитой - утилиту изменения размера FAT, однако это (и многое другое) умеет делать <tt>parted</tt>, я им не пользовался, но вообще, почитав мануал по нему, был слегка удивлен - он может двигать и изменять размеры разделов с Ext 2/3, linux swap, FAT и FAT32 автоматически меняя размеры и файловой системы. Есть даже графический интерфейс к ней - qtparted, но в мою SuSE он не включен, в Gentoo 2004.3 minimal Live CD тем паче, да и вообще, столь интересное открытие я совершил уже после того как подвигал все как надо! Кстати, именно qtparted использует при установке MEPIS, но это так, к сведению, в принципе, свои графические инструменты для разбивки диска при установке предоставляют все дистрибутивы, но мы сейчас хотим все сделать с карманного Live CD и отнюдь не хотим заниматься установкой какого бы то ни было дистрибутива!

Если вернуться, то в моем случае <tt>resize_reiserfs</tt>, запущенный без параметров автоматически подгоняет размер ФС под размер раздела и все становится на свои места. Аналогичным образом поступает и <tt>resize2fs</tt>, наверное, хотя я и не уверен до конца, также будет делать и <tt>ntfsresize</tt>.

Все эти инструменты можно использовать и для обратной задачи - для уменьшения размера ФС. И здесь надо понять, что если вы хотите уменьшить размер раздела, но сохранить данные на нем, то сначала (<b>!</b>) необходимо уменьшить размер ФС, а потом уже можно лезть в cfdisk и править размеры разделов. Уменьшение размеров легко реализуется ключами к командам изменения размера разделов. Еще одно интересно примечание здесь касается разделов с файловой системой NTFS - чтобы уменьшить ее необходимо сначала произвести дефрагментацию из Windows, иначе, возможно, уменьшить ее из Linux Live CD не удастся.

Кстати, еще несколько интересных вещей обнаружилось по ходу написания статьи. Так, в моем примере, я производил довольно "" копирование раздела с помощью <tt>cat</tt>, оно работает абсолютно нормально и надежно, но если, например, у вас есть раздел на 20 Гб и 1 Гб данных на нем, то с помощью этого способа вы честно скопируете 20 Гб. А можно всего один - смотри утилиту <tt>ntfsclone</tt> для NTFS, или делай .tar архив со своих Ext2/3 или ReiserFS разделов. Честно говоря, утилиток для клонирования Ext 2/3 и Reiser я не нашел. Но, собственно, такой задачи изначально и не ставилось - опять-таки <tt>cat</tt> присутствует во всех, даже самых-самых минимальных дистрибутивах Linux (а чем дискета не восстановительнй дистрибутив? Иногда может и помочь), а при проблемах с местом может помочь простой <tt>tar</tt>.

Итак, мы дошли до того, что скопировали содержимое старого раздела назад и расширили ФС до необходимого размера. Отлично! Вот только если попробовать перезагрузиться с винчестера, то, скорее всего, ничего не выйдет - во всяком случае мой GRUB показывать меню и грузить что-либо отказался (хотя теоретически из его консоли все-таки можно вытянуть за уши операционную систему даже при таком раскладе). Но я не расстроился - загрузился опять с Gentoo Live CD, да сделал <tt>chroot</tt> в примонтированны раздел корневой ФС на винчестере. А далее просто набрал "<tt>grub-install</tt>" и получил рабочий загрузчик. В чем прелесть <tt>chroot</tt> с Live CD на корневой раздел установленного дистрибутива - можно использовать все, что дает ваша основная ОС без каких-либо поправок на расположения файлов, фактически, как будто это и есть ваша основная система. Я, например, недолго думая, взял да запустил YaST в консоли - там уже подредактировалменю GRUB (удалил лишнее), снова переписал загрузчик и наконец-то перезагрузился уже по-нормальному. Да, я, наверное, забыл упомянуть, что же такое <tt>chroot</tt> - смена корневой ФС для текущего сеанса (то есть если переключиться по Alt+Fn на параллельные консоли, то там корневая ФС будет та, что пришла с Live CD).

Ну что же, на этом я перезагрузился и увидел свой привычный KDE в SuSE 9.1. Однако, посмотрел на монитор использования свопа и удивился - а почему же 256 Мб потолок? Проверил, увидел, что жестко задана граница индикатора, изменил, но для проверки запустил и полноценный монитор - там граница автоматическая и она стояла как раз на 256 Мб! Я уже чуть было не завопил, что это какое-то безобразие, но потом вспомнил, что своп в Linux тоже имеет свою файловую систему, а ее размеры я не изменял. Решил проблему банально - сходил в YaST и переформатирова раздел. Все, после этого у меня стал один гигабайт свопа и все как хотелось. А можно было воспользоваться и <tt>mkswap</tt>. Из консоли. Из Gentoo 2004.3 minimal Live CD.

Вот таким вот образом я порешил насущную проблему разбиения дисков у себя на машине. Надеюсь, сей скромный опыт хоть кому-нибудь будет полезен, с этой мыслью и публикую сию статью. Впрочем, если вы знаете лучшие методы/утилиты, смело пишите в комментариях или на форуме с темой "Как же тупо у вас тут некоторые разбивают диски...". Или хотя бы почтой - буду рад.

Однако, это не совсем все - тема mini Live CD меня сильно затронула, хочется выбрать лучший восстановительн-диагностическийCD, который всегда можно было бы взять с собой (эх, а ведь можно просто купить USB-флэшку на гигабайт, но это траты непонятно на что, да и грузиться с USB могут отнюдь не все компьютеры). Этим как-нибудь однажды и займусь, о результатах доложу.


это контент от Центр информации по операционным системам
( http://www.osrc.info/plugins/content/content.php?content.74 )