Перенос системы и данных на другой компьютер

О смене компьютерного «железа» с сохранением всего программного обеспечения и наработанного файлового багажа.

Смена поколений компьютерной техники происходит сегодня стремительными темпами—давно ли Pentium 2/233 казался чудом техники? В результате, по крайней мере, раз в два года приходится целиком обновлять «железо». А отдельные компоненты, в частности, жесткий диск иногда приходится менять и независимо от остальных составляющих компьютера. И возникает проблема переезда с одного компьютера на другой или со старого диска на новый. А как гласит народная мудрость – два переезда равны одному пожару. Вот и получается, что смена компьютера грозит потерей половины того, что было наработано в старой системе. Мы столько времени потратили на обустройство своей системы: установку необходимых пакетов, их настройку, прилаживание всяких красивостей и просто накопили массу полезных файлов, потерять которые в спешке переезда вовсе не хочется. А восстановить все это хозяйство, даже если была сделана полная резервная копия системы, непросто [1].
Вот и передо мной недавно встала такая проблема—получил новый компьютер, а старый нужно было сдать. Требовалось перебраться на новый компьютер со всей настроенной, обжитой и привычной средой, основу которой составляет ОС Linux. Причем имелась еще лицензированная система виртуальных машин VMware, в которой вполне удовлетворительно работала NT 4.0 с MS Office. Если устанавливать на новый компьютер все заново, то пришлось бы устанавливать две операционных системы и массу ПО. Просто обменять жесткие диски старого и нового компьютера тоже не хотелось—старый был объемом 10, а новый 20 Гбайт. Поэтому возникло желание переместить ОС Linux со всем ПО, которое под ней работает, на новый диск. Задача осложнялась тем, что на новом диске была уже установлена лицензионная ОС Windows 98, а на старом лицензионная ОС Windows 2000 и организована многовариантная загрузка. Хотя я и редко перезагружался в Windows 2000, довольствуясь работой NT в окне Linux, но терять лицензионные версии тоже не хотелось—не все пользователи перешли пока на Linux и компьютеры с лицензионным ПО еще какое-то время послужат.
Первой мыслью было воспользоваться продуктом Acronis Migrate Easy, как раз предназначенным для переноса программного обеспечения с одного диска на другой. Однако, как оказалось, для этого требуется, чтобы новый диск был девственно чист. В конце концов, после нескольких неудачных попыток мне удалось совершить переезд именно так, как того хотелось, причем используя только стандартные средства ОС Linux и программу переразбиения диска Partition Magic Pro 7.0 фирмы Power Qwest. Однако, прежде чем приступить к изложению, хочу повторить обычное в таких случаях предупреждение: автор не несет ответственности за последствия операций, которые будет производить читатель со своей системой, прочитав статью.
Естественно, что почти все перечисляемые действия требуют прав супервизора, причем предпочтительнее работать в текстовом режиме, так что покиньте графическую оболочку и зарегистрируйтесь в одной из виртуальных консолей как пользователь 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 и с ее помощью сначала удалил все вновь созданные разделы (сохранив два первых, где было предустановленное производителем ПО), а затем создал разделы, подобные разделам на первом диске. Вот что было на первом диске:

Disk /dev/hda: 1306 cylinders, 240 heads, 63 sectors/track
Units = cylinders of 7741440 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 1 2- 15088+ 12 Compaq diagnostics
/dev/hda2 2 321 320 2419200 b Win95 FAT32
/dev/hda3 322 490 169 1277640 83 Linux
/dev/hda4 491 1305 815 6161400 f Win95 Ext'd (LBA)
/dev/hda5 491+ 499 9- 68008+ 82 Linux swap
/dev/hda6 500+ 848 349- 2638408+ 83 Linux
/dev/hda7 849+ 1305 457- 3454888+ 83 Linux

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

Disk /dev/hdd: 2498 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/hdd1 * 0+ 382 383- 3076416 b Win95 FAT32
/dev/hdd2 383 498 116 931770 b Win95 FAT32
/dev/hdd3 499 669 171 1373557+ 83 Linux
/dev/hdd4 670 2497 1828 14683410 f Win95 Ext'd (LBA)
/dev/hdd5 670+ 702 33- 265041 82 Linux swap
/dev/hdd6 703+ 1259 557- 4474071 83 Linux
/dev/hdd7 1260+ 2497 1238- 9944203+ 83 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 было создание копии всей файловой системы [1, стр.223]. Что мы и сделали на шаге 5, скопировав файловую систему с корневым разделом в новый раздел /dev/hdd3. При этом все файлы, включая ядро, размещенное в каталоге /boot, копировались по-блочно, с сохранением относительного порядка блоков, отведенных каждому файлу. Если попытаться на шаге 5 копировать раздел /dev/hdd3 с помощью команды cp, то загрузчику lilo, даже после его переустановки загрузить систему не удается. Вероятно, это является следствием того, что нарушается непрерывность размещения ядра на диске и загрузчик уже не может его отыскать. Однако, поскольку с помощью dd мы скопировали файловую систему целиком из раздела, имевшего меньший размер, чем новый раздел /dev/hdd3, та часть нового раздела, которая осталась за пределами файловой системы, стала нам недоступна. Это и есть те потери, которые были упомянуты выше. С этим можно бороться по разному. Можно попытаться на шаге 2 создать этот раздел по размеру в точности равным аналогичному разделу на старом диске. Если размеры соответствующих разделов различаются незначительно, можно просто смириться с небольшими потерями. Я использовал третий вариант, заключающийся в повторном применении утилиты переразбиения дисков Partition Magic. Она умеет трансформировать разделы диска с сохранением всех данных, а значит умеет правильно преобразовывать файловые системы. Поскольку полезная информация занимает не весь раздел /dev/hdd3, можно с помощью программы Partition Magic вначале уменьшить объем этого раздела, а затем расширить один из других разделов, отдав ему освободившееся пространство. В процессе этого преобразования Partition Magic успешно возвратила все потерянные области диска.
На этом процесс переезда можно считать завершенным. По крайней мере у меня все получилось: после перезапуска я снова оказался в привычной программной среде. Даже система Vmware с Windows NT 4.0 запустилась без проблем.
В заключение одно замечание по поводу возможных опасностей, которые могут вас подстерегать при таком переезде. Если просто поменять жесткий диск, то особых опасностей нет, но вот если целиком сменить компьютер, то о некоторых последствиях надо подумать заранее. Во-первых, если вы компилировали ядро под свою конфигурацию аппаратного обеспечения, то на новом компьютере могут возникнуть проблемы с запуском. Во-вторых, чтобы переезд прошел гладко, надо установить пакет kudzu. И третья опасность связана с правильным заданием параметров для частот вертикальной и горизонтальной разверток монитора [3]. Поэтому стоит перед началом описанных манипуляций отключить автоматический переход в графический режим и проводить всю процедуру в текстовом режиме, а после ее завершения до первой загрузки графической оболочки проверить задание параметров в файле/etc/X11/XF86Config-4 (или /etc/X11/XF86Config).