Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Мини-HOWTO: Переход на новый жесткий диск

Yves Bellefeuille

yan@storm.ca

Konrad Hinsen

hinsen@cnrs-orleans.fr

Перевод: Станислав Рогин, SWSoft Pte Ltd.

Версия 2.11, 13 апреля 2000

Как скопировать систему с Linux с одного диска на другой


1. Введение

В этом документе описывается перенос (или миграция) целой системы Linux с одного диска на другой.

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

Конкретные разделы старого диска будут называться /dev/hda1, /dev/hda2 Конкретные разделы нового диска будут называться /dev/hdb1, /dev/hdb2 и так далее.

Все примеры в документе испытывались на дистрибутиве Red Hat 6.0. Также они были проверены в Debian 2.1, Slackware 3.5 и SuSE 6.2; мы будем указывать на различия в дистрибутивах.

Если какие-то из команд не сработают в вашей системе, пожалуйста, дайте нам знать; не забудьте упомянуть дистрибутив и его версию.


2. Установите оба диска в вашу систему

Современные системы поддерживают четыре "EIDE"-устройства на одном контроллере жестких дисков, поэтому, в идеале, не должно возникнуть проблем с установкой обоих дисков в систему, даже если у вас есть еще "EIDE"-устройства. Жесткие диски и CD-ROM - типичные примеры EIDE-устройств. Флоппи-дисководы и стримеры обычно подключаются к контроллеру флоппи, очень редко к контроллеру жестких дисков.

SCSI-адаптеры значительно более гибки и поддерживают до семи устройств. Если вы являетесь счастливым (и богатым) обладателем SCSI-адаптера, то уже наверно про это знаете, и вы, возможно, знаете, какие из устройств являются SCSI! За более подробной информацией обращайтесь к HOWTO: SCSI .

Даже очень старые системы поддерживают два устройства на контроллере жесткого диска, поэтому вы все равно сможете установить два диска одновременно. Однако, если у вас, в дополнение к старому диску, подключено еще одно дополнительное устройство (например, если у вас есть жесткий диск и CD-ROM), то придется его убрать, чтобы вместо него установить новый диск.

Вы также должны правильно настроить диски "главными" или "зависимыми" ("master" или "slave"), соответствующим образом выставив переключатели ("jumpers") на дисках. Обычно информация об этих настройках бывает написана на самих дисках; если ее нет - читайте документацию или обратитесь к производителю.

Вы также обязаны проинформировать BIOS о наличии дисков и их "геометрии". Обычно программа настройки BIOS запускается при запуске системы нажатием клавиши. Ниже приведены варианты этих клавиш для наиболее распространенных версий BIOS:

Notebook-и фирмы Acer:

Клавиша F2 в процессе Теста-При-Включении (Power-On Self-Test (POST))

American Megatrends (AMI):

Клавиша Del в процессе Теста-При-Включении (Power-On Self-Test (POST))

Award:

Del, или Ctrl-Alt-Esc

Compaq:

Клавиша F10после того, как в верхнем правом углу экрана появится небольшой квадрат (при включении системы)

Dell:

Ctrl-Alt-Enter

DTK:

Клавиша Esc в процессе Теста-При-Включении (Power-On Self-Test (POST))

Hewlett-Packard Pavilion:

Клавиша F1 в момент появления синей заставки HP

IBM Aptiva 535:

Клавиша F1, когда квадратик с волнистыми линиями появляется в правом верхнем углу экрана [1]

IBM PS/2:

Ctrl-Alt-Del, или Ctrl-Alt-Ins, когда курсор находится в правом верхнем углу

Mr. BIOS:

Ctrl-Alt-S в процессе Теста-При-Включении (Power-On Self-Test (POST))

Packard Bell:

В некоторых моделях клавиши F1 или F2 в процессе Теста-При-Включении (Power-On Self-Test (POST))

Phoenix:

Ctrl-Alt-Esc, Ctrl-Alt-S, или Ctrl-Alt-Enter

На многих старых системах требуется диск с надписью "Installation" или "Reference".

(Мы будем не против, если кто-нибудь дополнит этот список, послав нам информацию о других BIOS-ах)

Перезагрузите систему и войдите в нее как root. Если вы используете команду " su" , чтобы стать root-ом, используйте " su -"(с параметром "-").


3. Отключите не-Linux разделы и сетевые диски

Некоторые пользователи подключают разделы других операционных систем (DOS, Windows, OS/2, и т.п.), чтобы использовать их в Linux. Эти разделы должны создаваться и копироваться в их родных операционных системах, и их необходимо отключить (unmount) до начала копирования Linux-разделов. Например, если у вас к каталогу /dos подключен DOS-раздел, его необходимо отключить командой:
umount /dos

Обратите внимание на синтаксис команды umount, он отличается от английского слова unmount отсутствием первой буквы n.

Вам также придется подобным образом отключить все сетевые диски.


4. Разбейте новый диск на разделы

Для разбития нового диска на разделы используйте команду:
fdisk /dev/hdb

EIDE -устройства именуются, как hda, hdb, hdc, и hdd в каталоге /dev. Разделы на этих дисках могут принимать номера от 1 до16 и также находятся в каталоге /dev. Например: /dev/hda4 - это 4-ый раздел на диске a (первом EIDE-диске).

SCSI -устройства именуются, как sda, sdb, sdc, sdd, sde, sdf, и sdg в каталоге /dev.Разделы на них, аналогично EIDE-дискам, могут принимать номера от 1 до 16 и находятся в каталоге /dev. Например: /dev/sda3 - это 3-ий раздел на SCSI-диске a (первом SCSI-диске).

(Примечание переводчика: на деле SCSI-диски могут не ограничиваться /dev/sdg - очевидно, что если у вас несколько SCSI-контроллеров, то SCSI-дисков может быть значительно больше - но это, однако, достаточно редкое явление.)

Для Linux-разделов с файловой системой ext2, используйте идентификатор файловой системы 83. Для разделов подкачки (swap), используйте 82.

Если на вашем новом диске более 1024 цилиндров, смотрите "Мини-HOWTO: Большие диски". Вкратце, вы должны все файлы, необходимые для загрузки Linux, поместить в пределах первых 1024 цилиндров. Один из вариантов - создать небольшой раздел (5 Мб или что-то около того) исключительно для каталога /bootв начале диска. (Внимание, пользователи Slackware: Ядро находится в файле /vmlinuzвместо /boot/vmlinuz, поэтому вам придется поместить ядро одновременно в каталог /boot/vmlinuz/ и в каталог /boot в этот небольшой раздел.)

Разделы для других систем (не для Linux) должны быть созданы в родных системах, с использованием родного fdisk или чего-то подобного, а не при помощи fdisk из Linux.


5. Отформатируйте новый диск

Для форматирования ext2fs-разделов на новом диске используйте команду:
mkfs.ext2 /dev/hdb1

Чтобы программа форматирования произвела также и поиск плохих блоков (физических дефектов) в форматируемом разделе, добавьте опцию -c перед /dev/hdb1.

В случае, если на новом диске будет больше одного Linux-раздела, отформатируйте их все командами "mkfs.ext2 /dev/hdb2", "mkfs.ext2 /dev/hdb3" соответственно. Добавьте опцию -c, если это необходимо.

Замечание

(Замечание: в старых дистрибутивах команда "mkfs -t ext2 -c /dev/hdb1" не проверяла наличие плохих блоков в Red Hat, Debian и Slackware, что должна была делать в соответствии с man. Сейчас это исправлено.)

Чтобы отформатировать раздел подкачки, используйте команду:
mkswap /dev/hdb1

К этой команде вы также можете добавить опцию -c для проверки плохих блоков на разделе "/dev/hdb1".


6. Подключите новый диск

Создайте каталог для нового диска, например /new-disk, и подключите его туда:
mkdir /new-disk
mount -t ext2 /dev/hdb1 /new-disk

Если на новом диске имеется больше одного раздела - подключите их все в каталоге /new-disk с той же организацией, что они будут иметь позже.

Пример: . На новом диске будет 4 Linux-раздела, соответственно:
/dev/hdb1:    /
/dev/hdb2:    /home
/dev/hdb3:    /var
/dev/hdb4:    /var/spool
Подключите их в каталоге /new-disk соответственно, как:
/dev/hdb1:    /new-disk
/dev/hdb2:    /new-disk/home
/dev/hdb3:    /new-disk/var
/dev/hdb4:    /new-disk/var/spool

До подключения разделов вам придется создать точки подключения на соответствующих "уровнях", например:

Пример: .
mkdir /new-disk                                 [1st level]
mount -t ext2 /dev/hdb1 /new-disk

mkdir /new-disk/home                            [2nd level]
mount -t ext2 /dev/hdb2 /new-disk/home

mkdir /new-disk/var                             [2nd level also]
mount -t ext2 /dev/hdb3 /new-disk/var

mkdir /new-disk/var/spool                       [3rd level]
mount -t ext2 /dev/hdb4 /new-disk/var/spool
Если вы создаете новую точку подключения к каталогу /new-disk/tmp, вам будет необходимо исправить разрешения на этот каталог для того, чтобы все имели к нему доступ:
chmod 1777 /new-disk/tmp

7. Скопируйте файлы со старого диска на новый

Вам, наверное, будет необходимо перейти в однопользовательский режим перед началом копирования диска - это необходимо для отключения системных демонов, остановки журналов и прекращения входа других пользователей в систему:
/sbin/telinit 1

При копировании жесткого диска вам надо скопировать все каталоги и файлы, включая ссылки.

Однако, вам не нужно копировать каталог /new-disk, потому что это и есть новый диск!

Более того, вам надо создать на новом диске каталог /proc, но содержимое этого каталога копировать не нужно: /proc - это виртуальная файловая система, и в ней нет настоящих файлов, а есть лишь информация о системе и процессах, в ней работающих.

Существуют 3 разных способа копирования старого диска на новый. Это может занять значительное время, особенно если у вас большой диск или мало оперативной памяти. Минимум скорости копирования - примерно 10 Мб в минуту, а, скорее всего, это будет происходить значительно быстрее.

Вы можете следить за копированием командой "df", запущенной с другого терминала. Используйте "watch df" или "watch ls -l /new-disk", чтобы видеть отчет, обновляемый раз в две секунды; нажмите клавиши Ctrl-C для прекращения просмотра. Помните, однако, что сам запуск команды "watch" может замедлить процесс копирования.

cp -ax / /new-disk

Это наиболее простой способ, но он подходит, только если ваша исходная система находилась на одном разделе.

Опция -a сохраняет исходную файловую систему настолько, насколько возможно. Опция -x ограничивает работу команды cp одной файловой системой - поэтому не нужно беспокоиться о каталогах /new-disk и /proc.

Для пользователей SuSE: . Используя этот метод, вы должны также создать каталог /dev/pts на новом диске. Используйте команду "mkdir /new-disk/dev/pts".

Замечание

(Замечание: Новые версии cp, при использовании опции -x, создадут пустые каталоги /new-disk/new-disk и /new-disk/proc. В этом случае необходимо удалить каталог /new-disk/new-disk, и оставить /new-disk/proc..)

cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-disk | sh

(напишите все это в одной строке)

Эта команда перейдет в корневой каталог и затем скопирует все файлы и каталоги, кроме /new-disk и /proc в /new-disk. Заметьте, что первый символ после ls - это цифра 1, а не буква L!

Эта команда должна работать в любом случае.

cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp /usr /var /new-disk

(напишите все это в одной строке)

Последний каталог - /new-disk - это назначение команды cp. Все остальные каталоги - источники. Таким образом, мы копируем все каталоги из списка в /new-disk.

При применении этого метода вы просто перечисляете каталоги, которые хотите скопировать. Здесь мы указали все каталоги, кроме /new-disk и /proc. Если вы не можете использовать первые два метода по каким-либо причинам, то всегда можете вручную указать каталоги, которые необходимо скопировать.

Также надо учесть, что если в корневом каталоге есть файлы, то их тоже надо скопировать отдельной командой. В частности, это касается Debian и Slackware, так как эти дистрибутивы помещают файлы в корневой каталог:
cp -dp /* /.* /new-disk

В предыдущих версиях этого Мини-HOWTO упоминалось, что вы можете использовать "tar" для копирования диска, но в этом методе была обнаружена ошибка. Конечно, существуют и другие методы скопировать диск, но эти три являются наиболее простыми, быстрыми и надежными.

После использования любого из этих методов вам также надо создать каталог /proc на новом диске, если его еще нет:
mkdir /new-disk/proc
Затем вы можете проверить файловую систему нового диска, если хотите:
umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk

Если на новом диске существует больше одного раздела, то вам придется отключить их все "снизу вверх" до запуска fsck.ext2: в соответствии с примером, приведенном выше, вам надо сначала отключить разделы 3-го уровня, затем 2-го и, только в конце, первого.

Можно сравнить два диска, чтобы убедиться, что все скопировано верно:
find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -exec cmp {} /new-disk{} \;

(напишите все это в одной строке)

Для пользователей Slackware:. стандартная "базовая" установка Slackware (только файлы серии "A") не включает команду "cmp", поэтому это сравнение не запустится, если у вас установлены только базовые файлы. Команда "cmp" находится в файлах серии "AP1".

Здесь мы сравниваем только обычные файлы, символьные же и блочные устройства (из каталога /dev), гнезда (sockets), и т.п. здесь не учитываются, так как команда "cmp" работает с ними не совсем корректно. Мы будем не против, если кто-нибудь подскажет нам, как сравнить эти "специальные" файлы.


8. Исправьте необходимым образом файл /new-disk/etc/fstab

Если разделы или их организация на новом диске отличается от того, что было на старом диске, исправьте необходимым образом на новом диске файл /new-disk/etc/fstab.

Убедитесь в том, что названия разделов дисков (первая колонка) соответствуют организации разделов, которую вы создали на новом диске, что разделы старого диска убраны, и что вы подключаете только один раздел в качестве корневого "/" (это написано во второй колонке).

Чтобы подробнее узнать о формате файла /etc/fstab, см Руководство системного администратора Linux , глава 4 "Подключение и отключение разделов".

Для разделов подкачки используйте примерно следующее:
/dev/hda1   swap    swap    defaults    0  0

9. Приготовьте LILO для загрузки с нового диска

 

(Спасибо Rick Masters за помощь в создании этой главы.)

Мы предполагаем, что вы собираетесь установить LILO в Главную Загрузочную Запись (Master Boot Record (MBR) - это делается в большинстве случаев. Вы хотите установить LILO на второй диск, который станет первым.

Отредактируйте файл /new-disk/etc/lilo.conf примерно так:
 
        disk=/dev/hdb bios=0x80       # Указываем LILO воспринимать второй
                                      # диск так, как будто он первый
                                      # диск (BIOS ID 0x80).
        boot=/dev/hdb                 # Устанавливаем LILO на второй жесткий
                                      # диск.
        map=/new-disk/boot/map        # Местонахождение файла карты ("map file").
        install=/new-disk/boot/boot.b # Файл, которые надо записать в
                                      # загрузочный сектор жесткого диска.
        prompt                        # LILO должно вывести приглашение
                                      #  "LILO boot:".
        timeout=50                    # Загрузить систему по умолчанию после 5
                                      # секунд ожидания. (Значение задается в
                                      # десятых долях секунды.)
        image=/new-disk/boot/vmlinuz  # Местонахождение ядра Linux. Настоящее
                                      # имя может включать в себя номер
                                      # версии, например,
                                      # "vmlinuz-2.0.35".
            label=linux               # Название Linux-системы.
            root=/dev/hda1            # Местонахождение корневого раздела
                                      # нового жесткого диска. Исправьте
                                      # его в соответствии с новой системой.
                                      # Заметьте, что вы должны использовать
                                      # название будущего местоположения, на
                                      # момент физического отключения старого диска.
            read-only                 # Сначала подключаем разделы в режиме
                                      # "только для чтения", для запуска fsck.

Для пользователей Slackware:. Используйте image=/new-disk/vmlinuz.

Если вы используете SCSI-диск, то вам, возможно, придется добавить строку с "initrd". Смотрите ваш текущий файл /etc/lilo.conf.

Установите LILO на новый диск:
/sbin/lilo -C /new-disk/etc/lilo.conf

Опция -C указывает LILO, какой конфигурационный файл использовать.


10. Создайте загрузочную дискету (необязательно)

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

Вставьте чистую дискету, отформатируйте ее, создайте на ней файловую систему и подключите ее:
fdformat /dev/fd0H1440
mkfs.ext2 /dev/fd0
mount -t ext2 /dev/fd0 /mnt

Для пользователей Debian: . В Debian 2.x версии используйте /dev/fd0u1440 вместо /dev/fd0H1440. В Debian версии 1.x, используйте /dev/fd0h1440, со строчной буквой h.

Для пользователей Debian:. В Debian версий 2.x, используйте superformat вместо fdformat. Вы можете не обращать внимания на ошибку mformat: command not found. В Debian версий 1.x, в случае если у вас нет команды fdformatвы можете пропустить ее, если диск уже отформатирован. Вы можете просто проверить дискету на наличие плохих блоков, добавив опцию -c к команде mkfs.ext2.

Для пользователей Slackware:. Используйте /dev/fd0u1440 вместо /dev/fd0H1440. В очень старых версиях попытайтесь использовать /dev/fd0h1440, со строчной буквой h.

Для пользователей SuSE:. Используйте /dev/fd0u1440 вместо /dev/fd0H1440.

Скопируйте все файлы из каталога /boot на дискету:
cp -dp /boot/* /mnt

Для пользователей Red Hat: . Если в каталоге /boot есть файлы vmlinux и vmlinuz (обратите внимание на различие в последних буквах), тогда вам надо скопировать только файл vmlinuz. Он ничем не отличается от файла vmlinux, просто он сжат для экономии места.)

Для пользователей Slackware:. Скопируйте также на дискету файл /vmlinuz, используйте команду cp /vmlinuz /mnt.

Создайте новый файл /mnt/lilo.conf в соответствии с тем, что написано ниже:
boot=/dev/fd0                 # Установить LILO на флоппи-диск.
        map=/mnt/map                  # Местонахождение файла карты ("map file").
        install=/mnt/boot.b           # Файл, который надо записать в
                                      # загрузочный сектор диска.
        prompt                        # LILO должно вывести приглашение
                                      # "LILO boot:"
        timeout=50                    # Загрузить систему по умолчанию после 5
                                      # секунд ожидания. (Значение задается в
                                      # десятых долях секунды.)
        image=/mnt/vmlinuz            # Местонахождение ядра Linux на дискете.
                                      # Настоящее имя может включать в себя номер
                                      # версии, например,
                                      # "vmlinuz-2.0.35".
            label=linux               # Название Linux-системы.
            root=/dev/hda1            # Местонахождение корневого раздела
                                      # нового жесткого диска. Исправьте
                                      # его в соответствии с новой системой.
                                      # Заметьте, что вы должны использовать
                                      # название будущего местоположения, на
                                      # момент физического отключения старого диска.
            read-only                 # Сначала подключаем разделы в режиме
                                      # "только для чтения", для запуска fsck.
Установите LILO на загрузочную дискету:
/sbin/lilo -C /mnt/lilo.conf

Опция -C указывает LILO на загрузочную дискету:

Отключите дискету:
umount /mnt

11. Уберите старый диск

Выключите систему и уберите старый диск. Не забудьте изменить настройки нового диска и информацию в BIOS.


12. Перезагрузите систему, исправьте файл конфигурации LILO

Перезагрузите систему. Если возникнут какие-нибудь проблемы, используйте загрузочную дискету, которую вы только что сделали. Чтобы загрузиться с нее, просто измените порядок загрузки системы в BIOS на A:, C:.

Вам также придется исправить /etc/lilo.conf на тот случай, если вы захотите еще раз запустить LILO. Ниже приведен пример:
boot=/dev/hda                 # Устанавливаем LILO на первый жесткий
                                      # диск.
        map=/boot/map                 # Местонахождение файла карты ("map file").
        install=/boot/boot.b          # Файл, которые надо записать в
                                      # загрузочный сектор жесткого диска.
        prompt                        # LILO должно вывести приглашение
                                      #  "LILO boot:".
        timeout=50                    # Загрузить систему по умолчанию после 5
                                      # секунд ожидания. (Значение задается в
                                      # десятых долях секунды.)
        image=/boot/vmlinuz           # Местонахождение ядра Linux. Настоящее
                                      # имя может включать в себя номер
                                      # версии, например,
                                      # "vmlinuz-2.0.35".
            label=linux               # Название Linux-системы.
            root=/dev/hda1            # Местонахождение корневого раздела
                                      # нового жесткого диска. Исправьте
                                      # его в соответствии с новой системой.
            read-only                 # Сначала подключаем разделы в режиме
                                      # "только для чтения", для запуска fsck.

Для пользователей Slackware: . Используйте image=/vmlinuz.


13. Благодарности:

Большое спасибо Scott Christensen, Frank Damgaard, Alexandre Fornieles, David Fullerton, Igor Furlan, Jerry Gaines, Chris Gillespie, Nicola Girardi, Per Gunnar Hansoe, Richard Hawes, Ralph Heimueller, Gerald Hermant, Andy Heynderickx, Paul Koning, Hannu Liljemark, Claes Maansson, Rick Masters, Jason Priebe, Josh Rabinowitz, Douglas Rhodes, Valentijn Sessink, Kragen Sitaker, Stephen Thomas, и Gerald Willman.

Этот документ можно переводить на любой язык. Если вы это сделаете, отправьте копию перевода Konrad Hinsen .


14. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу

Примечания

[1]

Интересно: а это относится к другим моделям Aptiva?