Часто бывает нужно уже настроенную операционную систему Linux перенести
на другой диск вместе со всеми рюшечками, бубенчиками и свистульками.
Перенести Linux с одного диска на другой довольно просто, но тут есть
несколько моментов, чему данная записка дебианщика и посвящена. Геометрия дисков источника и приёмника совпадает
Если геометрия жёсткого диска с Linux и нового диска одинаковая (новый
винчестер на компьютере точно такой же), то можно использовать наш любимый старый-добрый dd.
Для этого залогиниваемся как root (или используем sudo) и пишем в консоли:
# dd if=/dev/sda of=/dev/sdb
здесь
/dev/sda : диск-источник (с настроенной системой)
/dev/sdb: диск-приемник (на который копируем систему).
Для ускорения процесса можно задать копирование большими блоками вот так:
# dd if=/dev/sda of=/dev/sdbbs 1048576
По окончании копирования диск-приёмник готов к употреблению - разве что
можно создать на нём другого пользователя или отредактировать уже
имеющегося (о чём см. ниже). Кстати, если вместо /dev/sdb указать обычный файл вроде linux.img, то мы получим образ диска c Linux и можем использовать его для работы в виртуальных машинах.
Разная геометрия дисков источника и приёмника
Это приведёт к тому, что предыдущий вариант будет неэффективен и нам
срочно нужен инновационный прорыв. К счастью, это потребует лишь
несколько простых телодвижений, так что мы сейчас прорвёмся и отчаянно
ворвёмся в наше светлое линуксовое счастье.
Нажимаем на New, создать раздел. Выбираем Primary (основной), когда он создастся, нажимаем Bootable (если нужно, чтобы он был загружаемый). После этого надо отформатировать раздел (например, в надёжную и стабильную файловую систему EXT3):
sudo mkfs -t ext3 /dev/sdb1
Если же вам нужно перекроить разделы, скажем, для установки Windows и Linux на одной машине, лучше всего воспользоваться Live CD Gparted. Теперь можно начинать копировать файлы с одного диска на другой.
2. Перенос Linux на другой диск или раздел
Например, диск-источник, на котором хранятся все файлы, это
/media/debian - туда примонтирован IMG-образ системы, которую нужно
залить на свежий раздел. Теперь монтируем диск-приёмник куда-нибудь в
укромное место (чтобы данные рекурсивно не копировались), например в
пустующий в Debian каталог /srv
mount -t auto /dev/sdb1 /srv
Переходим в каталог /media/debian/ и, находясь в этом каталоге, вводим длинную команду в одну строчку:
Здесь серым выделены опциональные каталоги /home и
/tmp : скопировать их можно, если они вам нужны (например, можно
захотеть сделать нового пользователя в новой системе).
3. Досоздаем каталоги: /dev /proc /srv /sys /mnt /tmp Копировать эти каталоги НЕ НАДО, просто досоздаём пустые каталоги /dev /proc /srv /sys /mnt Это всё псевдо-файловые системы (кроме /mnt).
При создании каталога /tmp нужно стоит ему полные права:
# chmod 777 /tmp
Если этого не сделать, могут не стартовать иксы от простого
пользователя, или у login-screen не хватит прав на дальнейшую работу. Стоит поменять /srv/etc/fstab на предмет монтирования корневого каталога - если новый диск будет определён как /dev/sda1, а в файле /etc/fstab будет указан /dev/hda1, ядро этому не обрадуется и не загрузится (что не страшно при использовании загрузчика grub).
Вносим изменения в /srv/etc/fstab
новой системы на предмет подключения swap-разделов или файлов.
Например, если новый своп-раздел будет находиться на втором разделе
новой системы, пишем:
/dev/sdb2 swap swap defaults 0 0
После этого осталось только установить загрузчик Linux. 4. Установка загрузчика Linux
Это довольно просто сделать, загрузившись хотя бы с Knoppix. Например, при использовании загрузчика GRUB даём команду:
Здесь /dev/sdb это диск-приёмник (на который копируем систему). Так же можно установить загрузчик с помощью chroot:
chroot /srv grub-install /dev/sdb
Образцы конфигов, коими можно и нужно воспользоваться, должны быть на
диске-источнике. В общих чертах процесс закончен - можно попробовать
загрузиться с новой системы и навести финальный марафет - например,
добавить новых пользователей.
Добавляем, меняем и удаляем Linux-пользователей в новой системе
Для этого залогиниваемся root-ом и начинаем борьбу с пользователями.
Представляет интерес метод с LVM, привнесённый в процессе дискуссии ув.тов. Анонимусом:
1) Создать LVM раздел на новом винчестере (fdisk).
2) Включить его в vg группу (vgextend).
3) Переместить все PE со старого винчестера на новый (pvmove).
4) Удалить разделы на старом винчестере из vg группы (vgreduce).
Отказ от ответственности
Обращаю внимание горячих финских/эстонских/австралийских парней на
необходимость думать перед тем, как набирать команды от рута: в
частности, постарайтесь не перепутать при форматировании разделов
диск-источник и приёмник, т.к. автор сих строк за ваши угробленные
интерпрайзы и прочие продакшены не в ответе. Чтобы не получилось, как в
известных мемуарах, по образцу, но без мозгов.
Лучше переносить при помощи dump/restore (для ext-based fs) или
tar/cpio, нежели простого cp, уже не помню всякие чреватости (с
различными fifo, и прочими специальными файлами), но при таком переносе -
отгребал
Поддерживаю предыдущего оратора насчёт более удобного dump|restore на
ext. На остальных fs отлично зарекомендовал себя rsync, не требующий
описанных в статье танцев с бубном.
На мой взгляд проще всего либо через tar, либо, если есть возможность
примонтировать старую и новую фс одновременно, через rsync. После этого
нужно только установить и настроить загрузчик и поправить fstab по
необходимости. Причем, при таком переносе тип обеих фс не имеет значения, лишь бы линукс умел грузиться с них.
Ой как сложно все это. :)) С LVM переход на новый винчестер делается парой тройкой команда: 1) Создать LVM раздел на новом винчестере (fdisk). 2) Включить его в vg группу (vgextend). 3) Переместить все PE со старого винчестера на новый (pvmove). 4) Удалить разделы на старом винчестере из vg группы (vgreduce).
И все это на «живой системе», без перезагрузок и прозрачно для приложений. :)
А вот # dd if=/dev/sda of=/dev/sdb bs=$((1024*1024)) будет уже
существенно быстрее, т.к. по умолчанию dd берет блоки по 512 байт, что
очень не эффективно на современных жестких дисках. Здесь берем сразу
мегабайт.
Для
создания образа жесткого диск не обязательно использовать утилиты на
подобии Acronis True Image или Norton Ghost, достаточно простой утилиты
dd, которая входит в состав большинства Unix-подобных операционных
систем (Linux, FreeBSD, Solaris и т.д.) В статье рассмотрен простой
способ создания резервной копии образа жесткого диска при помощи dd.
Первым делом необходимо подготовиться к резервному копированию. В данной
статье введем следующие обозначения:
/dev/sda - диск, образ которого необходимо создать;
/dev/sdb - диск на который будет записан образ.
При необходимости нужно подставить собственные значения.
Подготовка к созданию образа жесткого диска
Первым
делом необходимо загрузиться с любого доступного Live-CD диска,
имеющего утилиту dd, и войти в командную строку в качестве
суперпользователя. Создаем точку монтирования для проведения резервного
копирования.
mkdir /mnt/backup
Монтируем жесткий диск на который необходимо сохранить образ.
После
чего при необходимости устанавливаем загрузку с данного жесткого диска.
При условии, что новый жесткий диск больше старого, на нем останется
неразмеченная область. Ее следует разметить и отформатировать согласно
имеющимся требованиям.
Статистика копирования в dd
Главный
минус в dd — это отсутствие наглядного представления статистики
выполнения процедуры копирования. Однако этот минус можно легко обойти.
Достаточно подключиться к другому терминалу.
Alt+Ctrl+F2
Определить номер процесса, под которым запущена dd.
pgrep -l '^dd$'
Периодически посылать данному процессу команду kill -USR1 номер_процесса_dd.
У меня назрел вопрос переноса работающей системы на другой имеющийся раздел диска.
Действия, как я понимаю, аналогичные резервному копированию.
Потребовался правильный инструментарий.
Потому как если что-то делаешь достаточно редко, то чем проще, тем проще.
Сначала я поискал подходящую программу.
Затем надо было скачать эту программу, установить ее на флешку, ну и
наверное какое-то небольшое время поразбираться с интерфейсом.
А потом приступить к выполнению задуманного.
И это мне показалось самым простым вариантом:
- интерфейс Midnight Commander ну очень простой (копирование - клавиша "F5") и мне достаточно знаком.
- устанавливать ничего не надо, так как в Runtu и большинстве других linux-систем есть и Midnight Commander и GParted.
- а копирование можно производить не только с LiveCD/USB, но и из другой
системы, уже установленной у меня на другом разделе этого же диска.
О затратах времени судите сами:
1. Копирование в MC файлов системы объемом 3,23 Гб заняло менее 11 минут.
2. Изменение UUID - заняло у меня аж 2 минуты 10 сек (уверен, можно гораздо быстрее).
3. Далее - обновление загрузочного меню и перезагрузка - еще 1 минута 47 сек.
Итого менее 15 минут (и это на нетбуке), и вот я уже пишу этот текст из перенесенной системы, ну или из ее копии.
Другие варианты я искать не стал.
Чтобы не забыть все нюансы (а может и еще кому пригодится) решил записать все что делал:
1. Резервное копирование, а также перенос рабочей системы
c помощью GParted и Midnight Commander.
Работаем из другой системы - LiveCD/USB или другой системы на HDD.
1.1. С помощью GParted создаем раздел на диске (если это нужно).
1.2. С помощью Midnight Commander копируем каталоги корневой системы. MC запускаем под root-ом.
1.3. Изменяем в файле /etc/fstab точки монтирования (UUID разделов).
Заменяем sda5 на sda7 и UUID раздела. UUID раздела смотрим в GParted: Раздел > Информация > UUID
Код (было):
Нужно помнить:
1. Все операции необходимо выполнять из другой системы (LiveCD/USB или другой системы на HDD),
или в крайнем случае исключать каталоги /proc /sys /srv - они содержат информацию о текущем сеансе.
2. Через графические файловые менеджеры копировать не рекомендуется,
т.к. нужно обязательно сохранять права доступа и владельцев файлов.
Если Файловый менеджер запущен от root, то файлы будут принадлежать ему и это может нарушить работу системы.
В случае с MC такого не произойдёт - по-умолчанию права и владелец файлов сохраняются.
3. Скорость копирования на съёмные носители (флешки) очень низкая, особенно если файлы имеют малый размер.
Если нужно перенести систему на флешке, то сначала лучше сделать архив
файловой системы на жёсткий диск, а уже потом одним файлом копировать
на флешку.
PS: Все рекомендации собраны с форума Runtu и опробованы на нетбуке и Runtu-12.04 xfce.
Лучше переносить при помощи dump/restore (для ext-based fs) или tar/cpio, нежели простого cp, уже не помню всякие чреватости (с различными fifo, и прочими специальными файлами), но при таком переносе - отгребал
Поддерживаю предыдущего оратора насчёт более удобного dump|restore на ext. На остальных fs отлично зарекомендовал себя rsync, не требующий описанных в статье танцев с бубном.
На мой взгляд проще всего либо через tar, либо, если есть возможность примонтировать старую и новую фс одновременно, через rsync. После этого нужно только установить и настроить загрузчик и поправить fstab по необходимости.
Причем, при таком переносе тип обеих фс не имеет значения, лишь бы линукс умел грузиться с них.
Ой как сложно все это. :)) С LVM переход на новый винчестер делается парой тройкой команда:
1) Создать LVM раздел на новом винчестере (fdisk).
2) Включить его в vg группу (vgextend).
3) Переместить все PE со старого винчестера на новый (pvmove).
4) Удалить разделы на старом винчестере из vg группы (vgreduce).
И все это на «живой системе», без перезагрузок и прозрачно для приложений. :)