Перенос Linux на другой диск


http://mydebianblog.blogspot.ru/2010/11/linux.html

Часто бывает нужно уже настроенную операционную систему Linux перенести на другой диск вместе со всеми рюшечками, бубенчиками и свистульками. Перенести Linux с одного диска на другой довольно просто, но тут есть несколько моментов, чему данная записка дебианщика и посвящена.

Геометрия дисков источника и приёмника совпадает
Если геометрия жёсткого диска с Linux и нового диска одинаковая (новый винчестер на компьютере точно такой же), то можно использовать наш любимый старый-добрый dd.
Для этого залогиниваемся как root (или используем sudo) и пишем в консоли:

# dd if=/dev/sda of=/dev/sdb
здесь
Для ускорения процесса можно задать копирование большими блоками вот так:
# dd if=/dev/sda of=/dev/sdb bs 1048576
По окончании копирования диск-приёмник готов к употреблению - разве что можно создать на нём другого пользователя или отредактировать уже имеющегося (о чём см. ниже). Кстати, если вместо /dev/sdb указать обычный файл вроде linux.img, то мы получим образ диска c Linux и можем использовать его для работы в виртуальных машинах.


Разная геометрия дисков источника и приёмника
Это приведёт к тому, что предыдущий вариант будет неэффективен и нам срочно нужен инновационный прорыв. К счастью, это потребует лишь несколько простых телодвижений, так что мы сейчас прорвёмся и отчаянно ворвёмся в наше светлое линуксовое счастье.

1. Разметка винчестера и создание файловой системы
Для создания таблицы разделов в Linux используем команду cfdisk (есть подробное описание по разметке дисков в Linux):
cfdisk /dev/sdb
Нажимаем на 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/ и, находясь в этом каталоге, вводим длинную команду в одну строчку:

cp -a bin/ boot/ etc/ home/ lib/ opt/ root/ sbin/ tmp/ usr/ var/ /srv
Здесь серым выделены опциональные каталоги /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 даём команду:
/sbin/grub-install --root-directory=/srv --recheck /dev/sdb
Здесь /dev/sdb это диск-приёмник (на который копируем систему). Так же можно установить загрузчик с помощью chroot:

chroot /srv grub-install /dev/sdb
Образцы конфигов, коими можно и нужно воспользоваться, должны быть на диске-источнике. В общих чертах процесс закончен - можно попробовать загрузиться с новой системы и навести финальный марафет - например, добавить новых пользователей.

Добавляем, меняем и удаляем Linux-пользователей в новой системе
Для этого залогиниваемся root-ом и начинаем борьбу с пользователями.

useradd добавить нового пользователя
Пример - добавить пользователя roger:
Опции:

userdel - удалить
пользователя
Опции:

usermod - модифицировать данные о пользователе
Опции:

passwd - модифицировать пароль
пользователя
Опции:
Весь процесс переноса системы занимает от получаса до часа включая перекуры.

Внеклассное чтение
Пища для размышлений и медитаций в разных интернетах вкусна и обильна: о клонировании установленной системы, а также о некоторых способах копирования Linux.

Представляет интерес метод с LVM, привнесённый в процессе дискуссии ув.тов. Анонимусом:

1) Создать LVM раздел на новом винчестере (fdisk).
2) Включить его в vg группу (vgextend).
3) Переместить все PE со старого винчестера на новый (pvmove).
4) Удалить разделы на старом винчестере из vg группы (vgreduce).


Отказ от ответственности
Обращаю внимание горячих финских/эстонских/австралийских парней на необходимость думать перед тем, как набирать команды от рута: в частности, постарайтесь не перепутать при форматировании разделов диск-источник и приёмник, т.к. автор сих строк за ваши угробленные интерпрайзы и прочие продакшены не в ответе. Чтобы не получилось, как в известных мемуарах, по образцу, но без мозгов.





Лучше переносить при помощи dump/restore (для ext-based fs) или tar/cpio, нежели простого cp, уже не помню всякие чреватости (с различными fifo, и прочими специальными файлами), но при таком переносе - отгребал

Warderer комментирует...

Поддерживаю предыдущего оратора насчёт более удобного dump|restore на ext. На остальных fs отлично зарекомендовал себя rsync, не требующий описанных в статье танцев с бубном.

Анонимный комментирует...

На мой взгляд проще всего либо через tar, либо, если есть возможность примонтировать старую и новую фс одновременно, через rsync. После этого нужно только установить и настроить загрузчик и поправить fstab по необходимости.
Причем, при таком переносе тип обеих фс не имеет значения, лишь бы линукс умел грузиться с них.

Анонимный комментирует...

Ой как сложно все это. :)) С LVM переход на новый винчестер делается парой тройкой команда:
1) Создать LVM раздел на новом винчестере (fdisk).
2) Включить его в vg группу (vgextend).
3) Переместить все PE со старого винчестера на новый (pvmove).
4) Удалить разделы на старом винчестере из vg группы (vgreduce).

И все это на «живой системе», без перезагрузок и прозрачно для приложений. :)

. . .
AccessD комментирует...

ИМХО, для процесса копирования самое надёжное rsync -auvH --numeric-ids

. . .
sash-kan комментирует...

команда
# dd if=/dev/sda of=/dev/sdb
эквивалентна команде
# cp /dev/sda /dev/sdb
но работает медленнее. и предназначена совсем для других целей.

. . .
Анонимный комментирует...

А вот
# dd if=/dev/sda of=/dev/sdb bs=$((1024*1024))
будет уже существенно быстрее, т.к. по умолчанию dd берет блоки по 512 байт, что очень не эффективно на современных жестких дисках. Здесь берем сразу мегабайт.

. . .

+

(c)mydebianblog.blogspot.com
__________________
Главный принцип UNIX:
Вы можете сконфигурировать всё!
И вы, б...ь, будете конфигурировать всё!









---------------------------------------------------------------


qt4-fsarchiver умеет напрямую клонировать жёсткий диск ....



----------------------------------------------------------------------------------------------------------------------------

Создание образа жесткого диска при помощи утилиты dd в Unix

dd Linux Unix

Для создания образа жесткого диск не обязательно использовать утилиты на подобии Acronis True Image или Norton Ghost, достаточно простой утилиты dd, которая входит в состав большинства Unix-подобных операционных систем (Linux, FreeBSD, Solaris и т.д.) В статье рассмотрен простой способ создания резервной копии образа жесткого диска при помощи dd. Первым делом необходимо подготовиться к резервному копированию. В данной статье введем следующие обозначения:

При необходимости нужно подставить собственные значения.

Подготовка к созданию образа жесткого диска

Первым делом необходимо загрузиться с любого доступного Live-CD диска, имеющего утилиту dd, и войти в командную строку в качестве суперпользователя. Создаем точку монтирования для проведения резервного копирования.

mkdir /mnt/backup

Монтируем жесткий диск на который необходимо сохранить образ.

mount /dev/sdb1

Создание образа жесткого диска

dd if=/dev/sda of=/mnt/backup/sda.img bs=8M conv=sync,noerror

Для сокращения размера образа жесткого диска его можно сжать любым архиватором.

dd if=/dev/sda bs=8M conv=sync,noerror | gzip -c > /mnt/backup/sda.img

Восстановление образа жесткого диска

Для восстановления образа жесткого диска необходимо проделать процедуру обратную процедуре создания этого образа.

dd if=/mnt/backup/sda.img of=/dev/sda bs=8M conv=sync,noerror

При использовании сжатия параллельно необходимо разархивировать образ.

gunzip -c /mnt/backup/sda.img | dd of=/dev/sda conv=sync,noerror bs=8M

Миграция системы на другой жесткий диск

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

dd if=/dev/sda of=/dev/sdb bs=8M conv=sync,noerror

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

Статистика копирования в dd

Главный минус в dd — это отсутствие наглядного представления статистики выполнения процедуры копирования. Однако этот минус можно легко обойти. Достаточно подключиться к другому терминалу.

Alt+Ctrl+F2

Определить номер процесса, под которым запущена dd.

pgrep -l '^dd$'

Периодически посылать данному процессу команду kill -USR1 номер_процесса_dd.

watch -n 5 kill -USR1 номер_процесса_dd

Резервное копирование, а также перенос рабочей системы

Александр Д. пн, 13/07/2015 - 23:25

У меня назрел вопрос переноса работающей системы на другой имеющийся раздел диска.
Действия, как я понимаю, аналогичные резервному копированию.
Потребовался правильный инструментарий.
Потому как если что-то делаешь достаточно редко, то чем проще, тем проще.

Сначала я поискал подходящую программу.
Затем надо было скачать эту программу, установить ее на флешку, ну и наверное какое-то небольшое время поразбираться с интерфейсом.
А потом приступить к выполнению задуманного.

Но... тут на форуме в топике о инструментарии резервного копирования я вовремя прочитал ответ HsH:
Лично я пользовался GParted и MC - первым создал разделы на новом диске, вторым скопировал каталоги корневой системы и поправил в /etc/fstab точки монтирования (UUID разделов)

И это мне показалось самым простым вариантом:
- интерфейс 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
Код (было):

# / was on /dev/sda5 during installation

UUID=54f88882-b42c-4c3b-8ac3-89298888ff3c / ext4 errors=remount-ro 0 1

Код (стало):

# / was on /dev/sda7 during installation

UUID=24f88882-b67c-4c8b-8ac7-89299998ff7a / ext4 errors=remount-ro 0 1

Нужно помнить:
1. Все операции необходимо выполнять из другой системы (LiveCD/USB или другой системы на HDD),
или в крайнем случае исключать каталоги /proc /sys /srv - они содержат информацию о текущем сеансе.

2. Через графические файловые менеджеры копировать не рекомендуется, т.к. нужно обязательно сохранять права доступа и владельцев файлов.
Если Файловый менеджер запущен от root, то файлы будут принадлежать ему и это может нарушить работу системы.
В случае с MC такого не произойдёт - по-умолчанию права и владелец файлов сохраняются.

3. Скорость копирования на съёмные носители (флешки) очень низкая, особенно если файлы имеют малый размер.
Если нужно перенести систему на флешке, то сначала лучше сделать архив файловой системы на жёсткий диск, а уже потом одним файлом копировать на флешку.

PS: Все рекомендации собраны с форума Runtu и опробованы на нетбуке и Runtu-12.04 xfce.