L  i  n  u  x    P  a  r  k
при поддержке ВебКлуба

Обновление жесткого диска

Автор Georg I.Andreev ([email protected])
Опубликовано 17 Апреля 2000, 13:19

Оригинал этой статьи находится на сервере "LinuxNews.Ru".

Обновление жесткого диска
Авторы Yves Bellefeuille <[email protected]>,
и Konrad Hinsen <[email protected]>
Перевод на русский язык Georg I.Andreev, март 2000 г.
Версия 2.1, 20 октября 1999 г.

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

1. Установка обеих дисков в Вашу систему
2. Размонтирование не-Linux разделов и сетевых дисков
3. Разбиение нового диска на разделы
4. Форматирование нового диска
5. Монтирование нового диска
6. Копирование файлов со старого диска на новый
7. Mодификация /new-disk/etc/fstab как требуется
8. Подготовка LILO для загрузки с нового диска
9. Подготовка загрузочной дискеты (необязательно)
10. Удаление старого диска
11. Перезагрузка системы, модификация файла конфигурации LILO

Этот документ описывает как переместить, или мигрировать, всю Linux-систему, включая
LILO, с одного жесткого диска на другой.
В последующем описании, "/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; мы указываем на некоторые различия на случай если
Вы используете эти дистрибутивы.
Если команды не работают должным образом в Вашей системе, пожалуйста дайте нам
знать, с указанием какой дистрибутив Вы используете.

1. Установка обеих дисков в Вашу систему
Современные системы поддерживают 4 "EIDE" устройства на контроллере жестких
дисков, таким образом не должно быть никаких проблем установить оба диска
одновременно в Вашу систему, даже если вы используете другие EIDE устройства.
Жесткие диски и CD-ROM-драйвы является типичными EIDE устройствами. Флоппи-
дисководы и ленточные накопители обычно подключаются к контроллеру дисководов,
отличному от контроллера жестких дисков.
SCSI адаптеры являются более гибкими и могут поддерживать до 7 дисков. Если Вы
достаточно удачливы (и богаты) чтобы иметь SCSI адаптер, Вы скорее всего уже знаете
это, и скорее всего Вы знаете какие из Ваших устройств являются SCSI-устройствами!
Для получения дополнительной информации, смотрите SCSI How-To.
Даже самые старые системы могут поддерживать два устройства на контроллере жестких
дисков, таким образом Вы можете установить оба диска одновременно. Однако, если вы
уже имеете другое устройство, подключенное в дополнение к Вашему жесткому диску
(например, если Вы имеете жесткий диск и CD-ROM драйв), Вы должны удалить другое
устройство, чтобы иметь возможность установить одновременно старый и новый жесткие
диски.
Вы должны сконфигурировать диски как "master" или "slave" путем соответствующей
установки перемычек на дисках. Часто Вы можете найти конфигурационную информацию
на самх дисках; если нет, обратитесь к документации или к прроизводителю дисков.
Вы также должны проинформировать BIOS о существовании дисков и об их "геометрии".
Как правило, Вы входите в программу настройки BIOS путем нажатия на клавишу во
время старта системы. Здесь приводится информация о том что нужно делать в некоторых
системах:
Ноутбуки Acer: нажать клавишу F2 во время Power-On Self-Test (POST)
American Megatrends (AMI): клавиша Del во время Power-On Self-Test
Award: Del, или Ctrl-Alt-Esc
Compaq: клавиша F10 после того как в правом верхнем углу экрана
появится квадрат во время старта
Dell: Ctrl-Alt-Enter
DTK: клавиша Esc во время Power-On Self-Test
IBM Aptiva 535: клавиша F1 пока в верхнем правом углу экрана во время
старта системы виден квадрат с волнистыми чертами [применимо ли это к
другим моделям Aptiva?]
IBM PS/2: Ctrl-Alt-Del, затем Ctrl-Alt-Ins когда в верхнем правом углу виден
курсор
Mr. BIOS: Ctrl-Alt-S во время Power-On Self-Test
Packard Bell: Для некоторых моделей, клавиши F1 или F2 key во время
Power-On Self-Test
Phoenix: Ctrl-Alt-Esc, или Ctrl-Alt-S, или Ctrl-Alt-Enter
Многие старые системы требуют Installation или Reference Disk
(Мы заинтересованы в получении информации о других BIOS для добавления в этот
список)
Перезагрузите систему и зарегистрируйтесь как root. Если вы используете команду "su"
для регистрации как root, используйте "su –", с опцией тире..

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

3. Разбиение нового диска на разделы
Используйте следующую команду для разбиения нового диска:
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. Аналогично, разделы на этих дисках могут быть от 1 до 6 и также
находятся в каталоге /dev. Например, /dev/sda/3 указывает на третий раздел на SCSI-
диске (первый SCSI-диск).
Для Linux-разделов с файловой системой ext2, используйте системный ID 83. Для swap-
разделов, используйте системный ID 82.
Для получения дополнительной информации о разбиении дисков, смотрите Installation
How-To и Partition Mini How-To.
Если Ваш новый диск имеет более чем 1024 цилиндра, смотрите Large Disk Mini How-To.
Говоря кратко, Вы должны установить все файлы, требуемы для загрузки Linux в
пределах первых 1024 цилиндров. Один из путей добиться этого заключается в создании
небольшого раздела (5 Мегабайт или около того) только для каталога /boot в начале
диска. (Только для Slackware: Ядро /vmlinuz отличается от /boot/vmlinuz, таким
образом вы должны поместить оба каталога / и /boot в этом разделе.).
Разделы для других систем должны создаваться их собственным fdisk или
эквивалентной, а не командой Linux fdisk..

4. Форматирование нового диска
Используйте следующую команду для форматирования Linux-разделов с использованием
ext2fs на новом диске:
mkfs.ext2 /dev/hdb1
Для проверки диска на наличие сбойных блоков (физических дефектов), добавьте опцию -
c перед "/dev/hdb1".
Если новый диск имеет больше чем один Linux-раздел, форматируйте другие разделы с
помощью "mkfs.ext2 /dev/hdb2", "mkfs.ext2 /dev/hdb3", и так далее. Добавьте опцию
-c если требуется.
(На заметку: В старых дистрибутивах, команда "mkfs -t ext2 -c /dev/hdb1" не
проверяет на сбойные блоки под любыми RedHat, Debian или Slackware, хотя man
указывает на обратное. Сейчас это исправлено.)
Для форматирования swap-раздела, используйте команду:
mkswap /dev/hdb1
И снова, вы можете добавить опцию -c перед "/dev/hdb1" для проверки на сбойные
блоки.

5. Монтирование нового диска
Создайте каталог в котором Вы будете монтировать новый диск, например /new-disk, и
смонтируйте его:
mkdir /new-disk
mount -t ext2 /dev/hdb1 /new-disk
Если новый диск содержит более чем один Linux-раздел, смонтируйте их всех в /new-
disk в таком же виде, в каком они будут в будущем.
Пример: новый диск имеет четыре раздела:
/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 [Первый
уровень]
mount -t ext2 /dev/hdb1 /new-disk

mkdir /new-disk/home [Второй
уровень]
mount -t ext2 /dev/hdb2 /new-disk/home

mkdir /new-disk/var [Также
второй уровень]
mount -t ext2 /dev/hdb3 /new-disk/var

mkdir /new-disk/var/spool [Третий
уровень]
mount -t ext2 /dev/hdb4 /new-disk/var/spool
Если вы создали точку монтирования /new-disk/tmp, Вам потребуется изменить права
доступа таким образом, чтобы предоставить всем пользователям доступ туда:
chmod 1777 /new-disk/tmp

6. Копирование файлов со старого диска на новый
Вы можете захотеть перейти в single-user mode перед копированием диска, для остановки
системных демонов и сохранения состояния log-файлов, и предотвращения входа
пользователей в систему:
/sbin/telinit 1
Когда копируете диск, Вам нужно скопировать все каталоги и все файлы, включая ссылки.
Однако, Вам не нужно копировать каталог /new-disk, потому что при этом Вы
скопируете диск в самого себя!
Более того, Вам нужно создать каталог /proc на новом диске, но Вам не нужно
копировать его содержимое: /proc является "виртуальной" файловой системой и не
содержит в действительности файлов, а содержит информацию о процессах запущенных в
системе.
Есть четыре различных способоа скопировать старый диск на новый. Это может занять
значительное время, особенно если Вы имеете большой диск или мало памяти. Вы можете
рассчитывать на копирование 10 Мегабайт в минуту,возможно больше.
Вы можете следить за процессом копирования, используя команду "df" с другого
терминала. Попробуйте "watch df" или "watch ls -l /new-disk" чтобы видеть отчет
обновляемый каждые две секунды; нажмите Ctrl-C чтобы остановить вывод. Помните
что запуск программы "watch" сам по себе замедляет процесс копирования.
i. cp -ax / /new-disk
Это простейший способ, но он работает только если Ваша исходная
Linux-система размещеная на одном разделе диска.
Опция -a сохраняет исходную систему, как только возможно. Опция
-x ограничивает cp в одной файловой системе; это необходимо для
того чтобы избежать копирования каталогов /new-disk и /proc .
(Только для SuSE: Только при использовании этого способа, Вы
также должны создать каталог /dev/pts на новом диске.
Используйте команду "mkdir /new-disk/dev/pts".)
(На заметку: когда используется опция -x, последние версии cp
создают каталоги /new-disk/new-disk и /new-disk/proc, хотя
каталоги будут пустыми. Если эти каталоги созданы, вы должны
удалить /new-disk/new-disk, и оставить /new-disk/proc.)
ii. cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-
disk | sh
(все пишется в одну строку)
Происходит переход в корневой каталог, затем копируются все
файлы и каталоги, за исключением /new-disk и /proc в /new-disk.
Заметьте что первая опция после ls является цифрой 1, а не буквой
L!
Эта команда должна работать в любом случае.
iii. (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd /new-disk
&& tar xpf -)
(все пишется в одну строку)
Происходит переход в корневой каталог, "затаривание" всего за
исключением /new-disk и /proc, переход в /new-disk and
"растаривание" всего туда. Заметьте что не должно быть косой черты
(слэша) до и после названий каталогов в опциях –-exclude.
(На заметку: Опция -l здесь не будет работать, потому что tar будет
заново создавать каталоги /new-disk и /proc хотя он не копирует их
содержимое. Таким образом, опция tar-а -l не имеет такого же
смысла как опция -x в старых версиях cp.)
Это способ немного медленнее чем другие.
iv. cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp
/usr /var /new-disk
(все пишется в одну строку)
Последний каталог, /new-disk, является получателем для команды
cp. Все остальные каталоги являются источниками. Таким образом,
мы копируем все перечисленные нами каталоги в /new-disk.
При использовании этого способа, Вы просто перечисляете сами
каталоги, которые Вам нужно скопировать. Здесь перечислены все
каталоги за исключением /proc и /new-disk. Если Вы по какой-либо
причине не можете использовать другие способы, Вы всегда можете
использовать эту команду чтобы вручную указать какие каталоги
Вам нужно скопировать.
Только при использовании этого способа, если в корневом каталоге
имеются каеие-либо файлы, Вам нужна другая команда чтобы их
скопировать. В частности, это требуется с Debian и Slackware,
поскольку эти дистрибутивы помещают файлы в корневой каталог.
cp -dp /* /.* /new-disk
После использования любого из этих способов, Вы должны также создать каталог /proc
на новом диске, если его там еще нет.
mkdir /new-disk/proc
В этот момент, Вы можете проверить структуру нового диска, если хотите
umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk
Если новый диск имеет более чем один раздел, Вы должны размонтировать "снизу вверх"
перед запуском fsck.ext2: в вышеприведенном примере, Вы должны сперва
размонтировать разделы третьего уровня, затем разделы второго уровня, и затем раздел
первого уровня.
Вы также можете сравнить два диска, чтобы удостовериться что файлы были
скопированы правильно:
find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -
exec cmp {} /new-disk{} \;
(пишется в одну строку)
(Только для Slackware: Основные иснталляции Slackware (только серия "A") не включает
в себя команду "cmp", поэтому Вы не можете запустить эту команду если вы установили
только основые файлы. Команда "cmp" есть в серии "AP1".)
Сравниваются только обычные файлы, не символьные или специальные блочные файлы (в
каталоге /dev), сокеты, итд, поскольку "cmp" не работает с ними правильно. Мы будем
рады предложениям как можно проверять эти "специальные" файлы.

7. Mодификация /new-disk/etc/fstab как требуется
Если Ваш новый диск имеет не такие же разделы или организован не как старый диск,
модифицируйте файл /new-disk/etc/fstab на новом диске как нужно.
Удостоверьтесь что разделы диска (первая колонка) соответствуют структуре Вашего
нового диска,
Make sure that the disk partitions (first column) correspond to the organization you'll have with
the new disk, once the old disk has been removed, and that you're only mounting one partition at
"/" as shown in the second column.
Для получения дополнительной информации о формате файла /etc/fstab, см. Linux
System Administrator's Guide, раздел 4, пункт "Mounting and unmounting".
Для swap-разделов, используйте строку, подобную этой:
/dev/hda1 swap swap defaults 0 0

8. Подготовка LILO для загрузки с нового диска
(Спасибо Rick Masters за помощь).
Мы предполагаем что LILO установлен в Главную Загрузочную Запись (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 # Файл для копирования в
boot-
# сектор диска.
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 какой конфигурационный файл нужно использовать.

9. Подготовка загрузочной дискеты (необязательно)
Если Вы хотите, вы можете подготовить загрузочную дискету, на случай проблем с
загрузкой с нового диска.
Вставьте чистую дискету, отформатируйте, создайте файловую систему и смонтируйте:
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 # Файл для копирования в
boot-
# сектор дискеты.
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

10. Удаление старого диска
Выключите систему и удалите старый диск. Не забудьте поменять положение перемычек
и настройки BIOS для отражения изменений..

11. Перезагрузка системы, модификация файла
конфигурации LILO
Перезагрузите систему. Если возникнут проблемы, Вы можете использовать только что
созданную загрузочную дискету. Чтобы сделать это, Вам может понадобиться изменить в
BIOS порядок загрузки на "A:, C:".
Вы должны изменить файл /etc/lilo.conf на случай того что Вы будете позднее
запускать LILO.. Здесь приводится пример как файл должен выглядеть:
disk=/dev/hda # Установить LILO на первый
диск
map=/new-disk/boot/map # Расположение"map file".
install=/new-disk/boot/boot.b # Файл для копирования в
boot-
# сектор диска.
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=/vmlinuz".)

Благодарности:
Выражаем благодарность Scott Christensen, Frank Damgaard, Alexandre Fornieles, David
Fullerton, Jerry Gaines, Chris Gillespie, Nicola Girardi, Per Gunnar Hanso, Richard Hawes,
Ralph Heimueller, Gerald Hermant, Andy Heynderickx, Paul Koning, Hannu Liljemark, Claes
Mansson, Rick Masters, Jason Priebe, Josh Rabinowitz, Douglas Rhodes, Valentijn Sessink,
Kragen Sitaker, Stephen Thomas, и Gerald Willman.
Этот документ может быть переведен на любой язык. Если Вы сделали это, пожалуйста
отправьте копию перевода Konrad Hinsen <[email protected]>.


Copyright 1999 SW Interactive
www.swinteractive.com