Меню Рубрики

Linux перенос системы на другое железо

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

Такая задача возникает достаточно редко. Обычно, проще переустановить систему заново, чем переносить уже установленную версию на другой жёсткий диск или другой раздел. Но если у вас там есть важные программы, которые нежелательно удалять, или вы меняли настолько много настроек в системе, что её установка заново займёт намного больше времени, чем её перенос, то перенос будет предпочтительнее.

В этой статье мы рассмотрим, как перенести Linux на другой диск с помощью утилиты cp или архива tar. Второй способ интересен ещё тем, что вы можете создать резервную копию всей системы, а затем просто восстановить её при возникновении проблем.

Как перенести Linux на другой диск

Поскольку все данные, настройки и объекты операционной системы Linux — это файлы, то вы можете перенести свою операционную систему куда нужно, просто скопировав все нужные файлы. В Windows так де просто не получится, так, как там более сложная файловая система со сложными зависимостями.

1. Подготовка к переносу

Сначала рассмотрим, как использовать утилиту cp для переноса файлов операционной системы. В папку /mnt примонтируйте раздел, на котором будет располагаться новый Linux. Например, это /dev/sdb1:

sudo mount /dev/sdb1 /mnt

Теперь нужно рекурсивно скопировать все файлы из текущего корня в нашу папку /mnt. Лучше всего это делать, загрузившись с LiveCD диска, тогда точно все нужные данные будут сохранены. Но это не обязательно, вы можете делать перенос и работающей системы, только перед этим остановите все запущенные базы данных и сервисы по максимуму, чтобы они сохранили свои настройки и вы ничего не потеряли в новой версии системы. Например, если у вас запущена база данных MariaDB или MySQL, то её нужно остановить:

sudo systemctl stop mariadb

Аналогично сделайте со всеми другими не важными для операционной системы сервисами. Также очистите корзину, кэш пакетного менеджера и другие ненужные файлы, чтобы они не занимали место в архиве или новой системе.

2. Перенос Linux утилитой cp

Далее можно запускать сам перенос Linux на другой диск. Для этого запустите утилиту cp с опциями -a, -r и —x. Первая опция включает сохранение исходных прав и метаданных файла, вторая — рекурсивный обход файловой системы, а третья ограничивает рекурсию только текущей файловой системой:

Поскольку будут копироваться только файлы из текущей файловой системы, то если ваши каталоги /boot и /home находятся на других разделах, то их нужно скопировать отдельно:

sudo mkdir /mnt/
sudo cp -rxa /boot /mnt/boot/
sudo cp -rxa /home /mnt/home/

Если вам не нужна домашняя папка, то вы можете её не копировать.

3. Перенос Linux утилитой tar

Это альтернативный вариант переноса, если вы не хотите использовать cp, то можете применить tar. Чтобы сразу перенести файлы в другое расположение, нужно создать туннель, на одном конце которого данные будут запаковываться, а на другом — распаковываться:

sudo tar -cpv —one-file-system / | sudo tar -x -C /mnt

Опция -p — заставляет утилиту сохранять метаданные файлов при переносе. Опция —one-file-system указывает, что утилита будет брать файлы только из корневой файловой системы, поэтому все примонтированые файловые системы, как и в предыдущем варианте, будут пропущены. Поэтому каталоги /boot и /home вам придётся копировать аналогичной командой. Или же можно не использовать эту опцию и передавать всё, кроме ненужного:

sudo tar -cpv —exclude /mnt —exclude /dev —exclude /sys —exclude /proc —exclude /tmp —exclude /run / | sudo tar -x -C /mnt/

Также вы можете создать архив, а потом его куда-нибудь скопировать, чтобы иметь резервную копию системы:

sudo tar -cvpzf system.tar.gz —exclude system.tar.gz —one-file-system /

Вместо опции —one-file-system можно использовать опции —exclude, чтобы исключить ненужные каталоги, как в предыдущей команде. А для распаковки используйте команду:

sudo tar xvzf system.tar.gz -C /mnt

Здесь, /mnt — это каталог, в который нужно извлечь файлы архива.

4. Перенос с помощью rsync

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

Эта команда работает аналогично команде tar, копирует всё что есть в новое расположение. Опции -aAX включают сохранение всех метаданных файла, символических ссылок, владельцев, групп, и так далее.

5. Правка /etc/fstab

Далее будем работать только с новой системой. Первым делом нужно исправить файл /etc/fstab, чтобы там был указан правильный UUID корневого раздела. Узнать UUID нужного раздела можно командой blkid:

Теперь замените полученным UUID, значение этого параметра корневого раздела в /mnt/etc/fstab:

sudo vi /mnt/etc/fstab

6. Установка загрузчика

Далее нужно установить загрузчик Grub в новом Linux. Сначала примонтируйте в него папки /sys, /proc и /dev:

sudo mount —bind /sys /mnt/sys
sudo mount —bind /proc /mnt/proc
sudo mount —bind /dev /mnt/dev

Затем войдите в chroot окружение:

Затем установите загрузчик на тот диск, на который вы переносили Linux, в моём случае это /dev/sdb:

sudo grub-install /dev/sdb

И осталось только создать конфигурационный файл для загрузчика:

В дистрибутивах, не основанных на Ubuntu, вместо update-grub2 можно использовать команду:

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

7. Перезагрузка

Выйдите из chroot-окружения командой:

Затем размотрируйте системные каталоги и ваш раздел:

sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev
sudo umount /mnt

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

Выводы

В этой статье мы разобрали, как перенести Linux на другой жёсткий диск с помощью утилит tar, cp или rsync. Как видите, это достаточно просто и быстро. Ещё мы могли бы использовать утилиту dd, однако она копирует весь диск побайтово, поэтому будет работать дольше и её архивы будут занимать больше места на диске. Ещё можно воспользоваться инструментом Clonezilla.

Источник

перенос системы на другое железо при помощи dd

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

Пробовал использовать Acronis True Image и Norton Ghost, которые благополучно ничем мне не помогли. Решил попробовать заюзать dd. Делал так:

1. Воткнул 16 ГБ флешку в машину, систему с которой надо перенести (флешка пустая, ФС — FAT32)

3. По окончании выполнения дампа вытащил флешку и на целевой машине выполнил

4. По окончании копирования ребут и пробую запуститься с sda — фейл

Что я забыл сделать? Скопировать MBR? Установить на sda1 флажок загрузочного?

Установить на sda1 флажок загрузочного?

На этот флаг уже никто не обращает внимания.

Сударь, позвольте, но зачем вам dd? Воспользуйтесь tar cp, на мой взгляд это проще.

И типа всё, у нас работающая система. Размеры, расположение разделов уже не важны, лишь бы распакованная система влезла.

А почему ты не сделал сразу dd if=/dev/sdb of=/dev/sdc? Тогда и mbr не надо копировать.

Попробуй cp -r /etc и не муди более

Не занимайся онанизмом, юзай Clonezilla. Оно тебе и MBR, и BIOS boot partition для GPT скопирует, и разделы отресайзит, если размер целевого устройства отличается. Только опции правильно выбери.

dd — слишком долго. Делай rsync или cp -R , а потом просто загрузчик восстанови.

Блин, ты еще с флешкой! Это ж вообще задница! Они ж тормозные как незнамо что!

потому что диски находятся в разных машинах =)

я имел ввиду sdc вместо sdc1

На этот флаг уже никто не обращает внимания.

Отнюдь. Я встречался с ситуацией, когда обращает внимание BIOS материнки, хотя вот ему-то должно быть по барабану: его дело тупо MBR загрузить. У Intel (да, именно их боксовые продукты) свои тараканы в голове.

Ну, еще починить fstab нужно, как минимум.

Это если там UUID вместо /dev/sda1? Просто я выпиливаю всегда эти идентификаторы и заменяю файлами устройств, поэтому редко когда руками приходится трогать после такой перезаливки.

Ты скопировал раздел с системой, теперь тебе нужно на новой системе установить загрузчик (grub). Делается это при помощи grub-install /dev/sda из какой-нибудь live-cd убунты или любого другого линукса. После этого уже можно будет поднять систему.

Потом не помешает при помощи fdisk поменять тип раздела /dev/sda1 на 83 (Linux) и пометить его как загрузочный (не обязательно, но лучше сделать); обновить fstab; обновить настройки grub (в ubuntu/debian это делается командой update-grub2 ).

Ну и конечно не забыть e2fsck -f /dev/sda1 && resize2fs /dev/sda1 в конце, чтобы растянуть фс на весь раздел (это если раздел на новом диске больше раздела на старом).

А можно поподробнее, в чем это выражется? И как BIOS реагирует на неразмеченные диски или GPT?

Если там было UUID, то как раз ничего трогать не нужно. Это идентификатор ФС, который скопировался вместе с ней. А вот если там раньше было /dev/sdb1, то придется вручную менять на /dev/sda1.

я выпиливаю всегда эти идентификаторы и заменяю файлами устройств

В современных дистрах никто не гарантирует, что при следующей загрузке порядок устройств сохранится. В частности, usb-устройства, подключенные во время загрузки, могут влезть между устройствами sata. Очень весело получается, когда система не поднимается из-за вставленной в usb флешки (а казалось бы, те времена, когда комп не поднимался из-за забытой в дисководе дискеты, канули в лету вместе с дисководами).

Это был ответ на копирование через tar. В этом случае, UUID менять нужно, т.к. нам в любом случае придется создавать новую ФС.

А можно поподробнее, в чем это выражется ?

В том, что если ни на одном разделе нет флага, hdd не считается загрузочным, то есть, вообще. Если хоть где-то есть, грузится mbr, а не br раздела с флагом. Флаг используется просто в принципе. Матерился я сильно, когда на это наступил однажды.

Удивительное рядом! Какому, интересно, гению пришло в голову добавить такую проверку и, главное, зачем?!

а) ну так там диск терабайтный, а у меня флешка на 16 ГБ

перенос системы на другое железо при помощи dd

ну так там диск терабайтный, а у меня флешка на 16 ГБ

tar + scp/rsync + livecd и чуть-чуть подумать головой 🙂

dd — это еще куда ни шло когда 2 одинаковых винта, просто новый веник вторым воткнул в систему и склонил на локалхосте. Это я еще могу понять . но если 2 разных машины, разные обьемы винтов и есть сеть, то нафик нужен этот dd.

На этот флаг уже никто не обращает внимания.

Расскажи об этом например syslinux-у

> sudo dd if=/dev/sdb1 of=/dev/sdc1 bs=4096

> sudo dd if=/dev/sdc1 of=/dev/sda1 bs=4096

> 4. По окончании копирования ребут и пробую запуститься с sda — фейл

> а) ну так там диск терабайтный, а у меня флешка на 16 ГБ

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как записать на dvd на mac os
  • Как записать видео с экрана компьютера со звуком mac os
  • Как записать windows на диск на mac os
  • Как записать mac os образ на флешку через ultraiso
  • Как записать mac os на флешку через windows