Говорят, два переезда равны одному пожару. Для того чтобы модернизация компьютеров не обернулась таким же стихийным бедствием, а наработанный файловый багаж и программное обеспечение остались в целости и сохранности, требуются определенные навыки.

Смена поколений компьютерной техники происходит сегодня стремительными темпами — давно ли Pentium 2/233 МГц казался чудом техники? В результате, по крайней мере, раз в два года приходится обновлять «железо» целиком. А отдельные компоненты, в том числе, и жесткий диск иногда приходится менять и независимо от остальных составляющих компьютера. Так возникает проблема «переезда» со старого диска на новый. А как гласит народная мудрость, два переезда равны одному пожару. Так и смена компьютера может грозить потерей половины того, что было наработано. Потратив столько времени на обустройство своей системы, на установку необходимых пакетов, их настройку, прилаживание всяких красивостей и просто накопили массу полезных файлов, вовсе не хочется потерять все это в спешке переезда. А восстановить все это хозяйство, даже если была сделана полная резервная копия системы, непросто [1].

Вот и передо мной недавно встала такая проблема. Получил новый компьютер, а старый нужно было сдать и требовалось перебраться на новый со всей настроенной и привычной средой, основу которой составляет ОС Linux. Имелась еще лицензированная система виртуальных машин VMware, в которой вполне удовлетворительно работала Windows NT 4.0 с MS Office. Если устанавливать на новый компьютер все заново, то пришлось бы развернуть две операционных системы и массу программ. Просто обменять жесткие диски старого и нового компьютера тоже не хотелось: старый был на 10 Гбайт, а новый вдвое больше. Поэтому возникло желание переместить Linux со всем программным обеспечением, которое под ней работает, на новый диск. Задача осложнялась тем, что на новом диске была уже установлена лицензионная ОС Windows 98, а на старом лицензионная — Windows 2000, была организована многовариантная загрузка. Хотя я и редко перезагружался в Windows 2000, довольствуясь работой NT в окне Linux, но терять лицензионные версии тоже не хотелось: не все пользователи перешли пока на Linux, да и компьютеры с лицензионным программным обеспечением от Microsoft еще какое-то время послужат.

Первой мыслью было воспользоваться продуктом Acronis Migrate Easy, как раз предназначенным для переноса программного обеспечения с одного диска на другой. Однако, как оказалось, для этого требуется, чтобы новый диск был девственно чист. В конце концов, после нескольких неудачных попыток мне удалось совершить переезд именно так, как того хотелось, причем используя только стандартные средства ОС Linux и программу переразбиения диска Partition Magic Pro 7.0 компании PowerQwest.

Прежде чем приступить к изложению, необходимо сделать обычное в таких случаях предупреждение: автор допускает, что при попытке повторить его действия читатель может столкнуться с отклонениями (их могут вызвать, в частности, особенности конкретной версии системного программного обеспечения или конкретно аппаратной платформы), и рекомендует сохранять осторожность.

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

Шаг 1. Создадим загрузочную дискету для старой системы:

[root]# mkbootdisk —device /dev/fd0 2.4.2-2

где «2.4.2-2» нужно заменить на версию установленного у вас ядра, причем должен существовать каталог /lib/modules/2.4.2-2. Если у вас уже есть загрузочная дискета, то на всякий случай предварительно произведите загрузку с ее помощью (для проверки ее пригодности).

Шаг 2. Подключаем новый жесткий диск к старому компьютеру (я подключил новый диск как Secondary Slave, так что в соответствии с принятыми в Linux соглашениями он обозначается как /dev/hdd) и создаем на нем разделы для Linux. Если вы просто меняете жесткий диск, то можно попытаться создать на новом диске точную копию разделов старого. У меня же на новом диске уже были два раздела FAT32: один для программ производителя компьютера, а второй — для Windows 98; я хотел их сохранить, поэтому и воспользовался программой Partition Magic Pro 7.0 от Power Qwest, которая позволяет изменять разбиение диска без потери информации. С ее помощью я уменьшил размер раздела для Windows 98, освободив место для расширенного раздела. К сожалению, мне по каким-то причинам не удалось с помощью Partition Magic отвести третий раздел для Linux. После корректировки разбиения и запуска программы /sbin/sfdisk -l /dev/hdd третий раздел все время оказывался расширенным разделом типа Win95 (Id = b). Тогда я воспользовался программой fdisk из Linux и с ее помощью сначала удалил все вновь созданные разделы (сохранив два первых, где было предустановленное производителем программное обеспечение), а затем создал разделы, подобные разделам на первом диске. Вот что было на первом диске:

и вот что получилось на втором:

Видно, что разбиения существенно различаются, но это не помешает. Единственное требование, которое надо соблюсти: новые разделы для Linux по объему должны быть не меньше старых.

Шаг 3. Монтируем все разделы типа 83 (Linux) нового диска в работающую систему и выполняем для каждого из них команду

[root]# mke2fs /dev/hddN

(в моем случае N принимало значения 3,6,7), а для swap-раздела — команду

[root]# mkswap /dev/hdd5.

Шаг 4. Теперь можно выполнить копирование каждого раздела со старого диска в соответствующий раздел нового диска. Для разделов, не содержащих каталога /boot (для меня это был корневой раздел), можно выполнить такое копирование с помощью программы Midnight Commander (как обычно, с помощью клавиши F5) или же командами

[root]# cp -Rpd /usr /mnt/hdd6
[root]# cp -Rpd /home /mnt/hdd7

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

[root]# dd if=/dev/hda3 of=/dev/hdd3

причем раздел /dev/hdd3 нового диска предварительно лучше размонтировать. Размонтировать создаваемый раздел я рекомендую потому, что вначале я выполнил эту команду, не размонтировав /dev/hdd3. Когда копирование закончилось, я попробовал войти в каталог /mnt/hdd3, т. е. во вновь скопированный раздел, однако получил сообщение об ошибке. Запуск команды [root]# /sbin/fsck /dev/hdd3 показал, что ошибок в файловой системе раздела /dev/hdd3 огромное количество (возможно такой эффект стал следствием того, что операция копирования занимает большое время и я что-то еще делал в это время в системе).

После завершения процедур копирования имеет смысл проверить файловые системы на новых разделах, для чего выполнить команды (учтите, что команда fsck предпочитает работать с размонтированными разделами):

[root]# /sbin/fsck /dev/hdd3
[root]# /sbin/fsck /dev/hdd6
[root]# /sbin/fsck /dev/hdd7

При выполнении команды fsck для корневого раздела (/dev/hdd3) появилось несколько сообщений об ошибках; однако fsck эти ошибки исправила.

Вероятен вопрос: почему для раздела с каталогом /boot используется команда dd, а остальные разделы переносятся простым копированием? Это станет ясно на шаге 7.

Шаг 6. Возвращаем новый диск на его законное место в новый компьютер. Однако пытаться загрузиться с него еще рано: в загрузочной записи MBR у него по-прежнему прописан стандартный загрузчик от Microsoft, который ничего не знает об ОС Linux. Установленная ранее Windows 98 загрузится без проблем, а новых разделов вы не увидите. Копировать главную загрузочную запись со старого диска на новый не имеет никакого смысла — таблицы разбиения дисков различаются. Я, впрочем, попытался скопировать программу-загрузчик из MBR старого диска, не трогая таблицу разбиения, что делается командой

[root]# dd if=/dev/hda of=/dev/hdd bs=446 count=1

Однако это к желаемой цели не привело: загрузчик lilo, который стоял на старом компьютере остановился на полпути, выдав на экран только две буквы: LI. Поэтому не стоит копировать загрузочную запись, лучше переустановить LILO, для чего надо запустить систему с помощью заготовленной на шаге 1 загрузочной дискеты. В процессе загрузки Linux с дискеты утилита проверки конфигурации аппаратного обеспечения kudzu обнаруживает, что это самое аппаратное обеспечение существенно изменилось (естественно, что пакет kudzu должен быть у вас установлен). Сначала kudzu сообщает, что некоторые аппаратные составляющие удалены и предлагает либо удалить соответствующие настройки, либо сохранить их. Я выбиал вариант «Удалить настройки». kudzu обнаруживает новое оборудование (видеоплату, монитор, сетевую плату, USB-порты и т.д.) и предлагает настроить новые устройства, с чем, конечно, нужно соглашаться.

После того, как процесс загрузки системы с дискеты завершен, необходимо переустановить lilo командой

[root]# /sbin/lilo.

Шаг 7. Теперь уже можно перезагрузиться без дискеты и работать в привычной программной среде. Однако нужно еще ликвидировать некоторые потери, ставшие следствием использования команды dd для копирования корневого раздела. Дело в том, что первоначальным применением команды dd было создание копии всей файловой системы [2, стр. 223]. Что мы и сделали на шаге 5, скопировав файловую систему с корневым разделом в новый раздел /dev/hdd3. При этом все файлы, включая ядро, размещенное в каталоге /boot, копировались по-блочно, с сохранением относительного порядка блоков, отведенных каждому файлу. Если попытаться на шаге 5 копировать раздел /dev/hdd3 с помощью команды cp, то загрузчику lilo даже после его переустановки загрузить систему не удается. Вероятно, это является следствием того, что нарушается непрерывность размещения ядра на диске и загрузчик уже не может его отыскать. Однако поскольку с помощью dd мы скопировали файловую систему целиком из раздела, имевшего меньший размер, чем новый раздел /dev/hdd3, та часть нового раздела, которая осталась за пределами файловой системы, стала недоступна. Это и есть те потери, которые были уже упомянуты ранее. Бороться с этим можно по-разному. Можно попытаться на шаге 2 создать этот раздел по размеру в точности равным аналогичному разделу на старом диске. Если размеры соответствующих разделов различаются незначительно, можно просто смириться с небольшими потерями. Я использовал третий вариант, заключающийся в повторном применении утилиты переразбиения дисков Partition Magic. Она умеет трансформировать разделы диска с сохранением всех данных, а значит умеет правильно преобразовывать файловые системы. Поскольку полезная информация занимает не весь раздел /dev/hdd3, можно с помощью этой программы вначале уменьшить объем этого раздела, а затем расширить один из других разделов, отдав ему освободившееся пространство. В процессе этого преобразования Partition Magic успешно возвратила все потерянные области диска.

На этом процесс переезда можно считать завершенным. По крайней мере, у меня все получилось: после перезапуска я снова оказался в привычной для себя программной среде. Даже система VMware с Windows NT 4.0 запустилась без проблем.

В заключение одно замечание по поводу возможных опасностей, которые могут подстерегать при таком переезде. Если просто поменять жесткий диск, то особых опасностей нет, но вот если целиком сменить компьютер, то о некоторых последствиях надо подумать заранее. Во-первых, если вы компилировали ядро под свою конфигурацию аппаратного обеспечения, то на новом компьютере могут возникнуть проблемы с запуском. Во-вторых, чтобы переезд прошел гладко, надо установить пакет kudzu. И третья опасность связана с правильным заданием параметров для частот вертикальной и горизонтальной разверток монитора [3]. Поэтому стоит перед началом описанных манипуляций отключить автоматический переход в графический режим и проводить всю процедуру в текстовом режиме, а после ее завершения до первой загрузки графической оболочки проверить задание параметров в файле /etc/X11/XF86Config-4 (или /etc/X11/XF86Config).

Литература
  1. "Обновление Linux", http://linuxbegin.by.ru/articles/article20.shtml
  2. Э. Немет, Г. Снайдер, С. Сибасс, Т. Хейн. UNIX: руководство системного администратора. // К.:BHV, 1999
  3. В.А. Костромин, Linux для пользователя. СПб.: "БХВ-Петербург", серия "Самоучитель", 2002

Виктор Костромин (kos@nbrt.kazan.su), независимый эксперт