Блог - Linux, программирование, Я!

linux и системное администрированиеПеренос системы на другой жесткий диск

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

Реализовать это можно двумя способами, один – с использованием утилиты dd, второй – "вручную". Здесь опишу процесс переноса "вручную".

Так вот, состоит этот процесс из 5 пунктов:

1) Подключение диска

2) Подготовка и форматирование нового диска

3) Перенос информации со старого диска на новый

4) Редактирование fstab

5) Установка загрузчика на новый диск

Ну, давайте по порядку…

1) Подключение диска

Выключаем комп, подключаем диск)) У меня sata поэтому особо не напрягаемся над этим пунктом

проверить успешность установки проще всего, пожалуй, командой

ls /dev | grep sd

Это выведет список всех установленных в системе дисков и их разделов.

2) Подготовка и форматирование нового диска

Ну, кто-то одобрит, кто-то нет, но я использовал для разметки диска Gparted. Если у вас он не установлен, командуйте:

sudo apt-get install gparted


Запускаем его из меню Система-->Администрирование-->Редактор разделов, и делаем разметку в соответствии со своими потребностями. У меня это выглядит так (правда, уже после переноса системы.. до этого диск стоял 3-м и назывался sdc):

т.е. сперва создаем swap (у меня 2 харда, один 1000Гб, второй – 750Гб, на каждом под своп выделено по 1Гб), затем создаем раздел для корня (мне 8Гб вполне хватает) в ext3, потом создаем extended partition чтобы в нем можно было создавать еще разделы и внутри него делаем раздел для /home и раздел для остальных файлов. Сразу скажу, что старый системный диск был размечен точно так-же, но раздел для файла был меньше. Обратите внимание, что home расположен на разделе sda6, а файло лежит на sda5!!!

Еще выполните такую команду:

ls -l /dev/disk/by-uuid

Это позволяет узнать UUID разделов дисков. Пригодится при редактировании fstab и menu.lst GRUB-а. Сохраните где-нибудь результаты.

3) Перенос информации со старого диска на новый

Тут начинаются вещи поинтереснее. Просто скопировать файлы с корневого раздела не получится, т.к. они постоянно изменяются, поэтому нужно действовать из однопользовательского режима. Командуйте:

sudo init 1

При этом вся графика закроется, почти все демоны выключаются, остаетесь вы и консоль…

смотрим какие в системе имеются диски

ls /dev | grep sd

увидите что-то вроде

ptysd

sda

sda1

sda2

sda3

sda5

sda6

sdb

sdb1

sdb2

sdb3

sdb5

sdb6

ttysd

где sda – это ваш текущий диск с системой а sdb – свежеотформатированный. В режиме init 1 корневая ФС (sda2) остается подмонтированной, остальные разделы – нет. Все манипуляции идут от рута. Поэтому командуем:

#монтируем будущую корневую систему в /mnt

mount /dev/sdb2 /mnt

#копируем содержимое корневой системы в mnt (ключи -ax позволяют при копировании не переходить на другие подмонтированные разделы, игнорировать символич. ссылки и еше много чего… за подробностями  cp --help)

cp -ax /  /mnt

Ждем завершения процесса.

#Отмонтируем sdb2

umount /mnt

#создаем папки для монтирования старого и нового домашних разделов

mkdir /mnt/new

mkdir /mnt/old


#Монтируем будущую и текущую домашнии папки

mount /dev/sdb6 /mnt/new

mount /dev/sda6 /mnt/old

#Копируем

cp -ax /mnt/old /mnt/new

Ждем завершения процесса. Файло можно перенести позже

#отмонтируем эти разделы

umount /mnt/new

umount /mnt/old

4) Редактирование fstab

Этот пункт можно было провернуть во время выполнения пункта (3) сразу после окончания копирования содержимого корневой ФС. В общем, командуем:

#монтируем будущую корневую систему в /mnt

mount /dev/sdb2 /mnt

открываем fstab в nano

/usr/bin/nano /mnt/etc/fstab

и редактируем, заменяя uuid соответствующих разделов на UUID диска sdb, полученные в конце пункта 2

Как вариант – можно прописать в fstab непосредственно /dev/sda2 /dev/sda2 и т.п.). В таком случае, возможно, fstab даже не придется менять. У меня он выглядит так:

seriy@seriy-desktop:~$ cat /etc/fstab

# /etc/fstab: static file system information.

#

#<file system><mount point><type> <options>           <dump>  <pass>

proc         /proc         proc   defaults              0       0

/dev/sda1    none          swap   sw                    0       0

/dev/sda2    /             ext3   defaults,errors=remount-ro  0       1

/dev/sda6    /home         xfs    defaults              0       2

/dev/sda5    /media/sda5   xfs    defaults              0       2

/dev/scd0       /media/cdrom0 udf,iso9660 ro,noauto,user,exec 0       0

(точнее, это не совсем правда, но для нашего примера – самое то)

5) Установка загрузчика на новый диск

Самое геморное, пожалуй, мероприятие. находясь во все том-же однопользовательском режиме и с подмонтированной на /mnt будущей корневой системой командуем:

cat /mnt/boot/grub/device.map

получаем список хардов, которые знакомы GRUB-у. Должно быть

(hd0)    /dev/sda

(hd1)    /dev/sdb

Если нет – приведите к такому виду!

Далее командуем

/usr/sbin/grub

Загружается командная строка загрузчика grub. В ней командуем

root (hd1,1)

Т.е. задаем корневой раздел на диске hd1 (/dev/sdb) раздел 1 (/dev/sdb2) Да да, именно так! GRUB нумерует диски и разделы начиная с 0 а не с 1!

Потом устанавливаем загрузчик на sdb

setup (hd1)

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

quit

Чтобы удостовериться, что с загрузкой проблем не будет, командуем

cat /mnt/boot/grub/menu.lst

И сверяем UUID разделов, которые прописаны в блоках



title        Ubuntu 8.10, kernel 2.6.27-7-generic

uuid        bd4ff010-8bcc-486a-824e-3695262e09f9

kernel        /boot/vmlinuz-2.6.27-7-generic root=UUID=bd4ff010-8bcc-486a-824e-3695262e09f9 ro quiet splash

initrd        /boot/initrd.img-2.6.27-7-generic

quiet


с полученными для диска sdb на 2 этапе, либо заменяем UUID на /dev/sda2

На этом все. Для выключения командуем halt либо shutdown now .

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

  1. 2010-03-28 00:35:53 | #

    Скажите при переносе системы есть риск потерять все данные с жесткого диска?

    • 2010-03-31 09:01:26 | #

      Нет, ничего не потеряете. По крайней мере диск С которого система переносится используется только в режиме чтения а на том диске КУДА переносится в случае проблем можно скопировать все снова.

      Но бекап в любом случае не повредит :)