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

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

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

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

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

  1. Подключение диска
  2. Подготовка и форматирование нового диска
  3. Перенос информации со старого диска на новый
  4. Редактирование fstab
  5. Установка загрузчика на новый диск

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

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

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

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

              ls /dev | grep sd
            

Это выведет список всех установленных в системе дисков и их разделов. Команда fdisk -l выдаст больше полезной информации.

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 - свежеотформатированный. Для более подробного вывода могу посоветовать команду fdisk -l.
В режиме 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) Установка загрузчика на новый диск

UPD (2014.02.13): Этот раздел устарел, обновлённая версия ниже

Самое геморное, пожалуй, мероприятие. находясь во все том-же однопользовательском режиме и с подмонтированной на /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

У нас всё ещё должна быть примонтирована новая корневая файловая система в /mnt. Проще всего установить загрузчик на новый диск из chroot. Для этого предварительно монтируем служебные директории в новую корневую ФС

              mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
            

И делаем chroot

              chroot /mnt
            

генерируем новый конфиг grub

              grub-mkconfig -o /boot/grub/grub.cfg
            

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

              grub-install /dev/sdb
            

выходим из chroot

              exit
            

На этом все. Для выключения командуем halt либо shutdown now .
После выключения желательно отключить старый системный хард, чтобы наверняка загрузиться с нового

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

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

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

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

  2. 2010-08-07 19:29:51 | #

    StartUbuntu.Ru — Все что нужно начинающему пользователю Ubuntu Linux в одном месте: статьи, новости, инструкции, темы оформления и собственная сборка Ubuntu, включающая полную поддержку русского языка, аудио и видео форматов и огромный пакет программ.

  3. Satosan
    2019-03-20 12:53:49 | #

    Интересно было бы почитать как переносить с помощью dd, а то вы в начале упомянули вскользь