Купил вчера новый хард на 1000Гб, в связи с этим возникла необходимость переноса системы на другой диск, т.к. текущий системный я собирался поставить на другой компьютер. Вот раскажу как я это реализовывал и с какими проблемами столкнулся.
Реализовать это можно двумя способами, один - с использованием утилиты dd, второй - "вручную". Здесь опишу процесс переноса "вручную".
Так вот, состоит этот процесс из 5 пунктов:
- Подключение диска
- Подготовка и форматирование нового диска
- Перенос информации со старого диска на новый
- Редактирование fstab
- Установка загрузчика на новый диск
Ну, давайте по порядку...
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
.
После выключения желательно отключить старый системный хард, чтобы наверняка загрузиться с нового
Скажите при переносе системы есть риск потерять все данные с жесткого диска?
Нет, ничего не потеряете. По крайней мере диск С которого система переносится используется только в режиме чтения а на том диске КУДА переносится в случае проблем можно скопировать все снова.
Но бекап в любом случае не повредит 🙂
StartUbuntu.Ru — Все что нужно начинающему пользователю Ubuntu Linux в одном месте: статьи, новости, инструкции, темы оформления и собственная сборка Ubuntu, включающая полную поддержку русского языка, аудио и видео форматов и огромный пакет программ.
[…] http://seriyps.ru/blog/2008/11/22/perenos-sistemy-na-drugoi-hdd/ […]
Интересно было бы почитать как переносить с помощью dd, а то вы в начале упомянули вскользь