Такая задача возникает достаточно редко. Обычно, проще переустановить систему заново, чем переносить уже установленную версию на другой жёсткий диск или другой раздел. Но если у вас там есть важные программы, которые нежелательно удалять, или вы меняли настолько много настроек в системе, что её установка заново займёт намного больше времени, чем её перенос, то перенос будет предпочтительнее.
В этой статье мы рассмотрим, как перенести 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. Первая опция включает сохранение исходных прав и метаданных файла, вторая - рекурсивный обход файловой системы, а третья ограничивает рекурсию только текущей файловой системой:
sudo cp -rxa / /mnt/
Поскольку будут копироваться только файлы из текущей файловой системы, то если ваши каталоги /boot и /home находятся на других разделах, то их нужно скопировать отдельно:
sudo mkdir /mnt/{boot,home}
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 выполните:
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*"} / /mnt/
Эта команда работает аналогично команде tar, копирует всё что есть в новое расположение. Опции -aAX включают сохранение всех метаданных файла, символических ссылок, владельцев, групп, и так далее.
5. Правка /etc/fstab
Далее будем работать только с новой системой. Первым делом нужно исправить файл /etc/fstab, чтобы там был указан правильный UUID корневого раздела. Узнать UUID нужного раздела можно командой blkid:
blkid /dev/sdb1
Теперь замените полученным 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 окружение:
sudo chroot /mnt
Затем установите загрузчик на тот диск, на который вы переносили Linux, в моём случае это /dev/sdb:
sudo grub-install /dev/sdb
И осталось только создать конфигурационный файл для загрузчика:
sudo update-grub2
В дистрибутивах, не основанных на Ubuntu, вместо update-grub2 можно использовать команду:
sudo grub2-mkconfig -o /boot/grub/grub.cfg
7. Перезагрузка
Выйдите из chroot-окружения командой:
exit
Затем размотрируйте системные каталоги и ваш раздел:
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev
sudo umount /mnt
И перезагрузите компьютер. В BIOS вашего компьютера нужно выбрать диск, на который вы переносили Linux, в качестве первого источника для загрузки. После загрузки вы будете уже в новой операционной системе и всегда сможете вернуться в старую.
Выводы
В этой статье мы разобрали, как перенести Linux на другой жёсткий диск с помощью утилит tar, cp или rsync. Как видите, это достаточно просто и быстро. Ещё мы могли бы использовать утилиту dd, однако она копирует весь диск побайтово, поэтому будет работать дольше и её архивы будут занимать больше места на диске. Ещё можно воспользоваться инструментом Clonezilla.
Спасибо за отличную статью
Еще Клонезилла по моему умееет переносить.
Умеет, добавил ссылку в статью.
Программой Timeshift основанной на упомянутой в статье rsync, я переносил бекап и запускал на внешнем жестком диске, тоже как вариант вообще в три клика мышкой.
Ну, что с Виндоус так не получится - не совсем правда 🙂
Во времена 98 мастдая я именно простым копированием переносил вообще всё на новые диски. Запускаешь систему, делаешь fdisk, format, а потом запускаешь far manager и просто выделяешь все файлы на диске C: (естественно и скрытые) и F5 - на диск E:.
Не понимаю до сих пор, как оно копировало загрузочный сектор, но по окончании процесса я вынимал старый диск и система запускалась и работала с нового!
Проверено неоднократно. Ещё и по работе приходилось так же делать "бэкапы", и все заводилось всегда. К тому же 98 прекрасно заводилась на любом новом (другом, то есть) железе. Как правило, на том же диске С был и дистрибутив, с которого она изначально устанавливалась, и при замене компа она просто "находила новое оборудование" и ставила дрова из дистра. Но потом пришла ХП, и счастье прошло.
Как с uefi такое сделать? Только ssd переставил на другой пк. Он его не видет. А через легаси замирает через 15 секунд со включенными иксами.
Вранье. У 98 не было никакого оборудования, она ничего не умела находить, для всего надо было скачать драйвера и установить!!!
Скажите, а сейчас Windows, можно перенести на другой компьютер, как в Linux?
Как в linux не получиться. Используйте Acronis или ghost. Если переносить систему на том же компе, на другой
Диск, то всё ок. Если копия будет заводится на другом железе, новое железо, не должно иметь более трех аппаратных отличий, проц,чип мамки и т.д
Здравствуйте, большое спасибо за приведенные способы.
А можно ли таким образом на vps подменить систему? Например, сжать диск, выделить раздел, восстановить в него архив . gz, подредактировать grub, чтобы нулевым пунктом была эта система, и иметь таким образом какой нибудь linux mint, а не debian, который они предлагают?
На VPS используется виртуализация, KVM, XEN, OpenVZ и так далее, поэтому дистрибутивы там специальные, модифицированные, лучше попросить техподдержку установить тот дистрибутив, который вам нужен. Если с KVM теоретически может получиться, то с OpenVZ вообще не выйдет.
21-й век на дворе, а линуксы до сих пор без консоли, как без титьки. Любые глюкала напрограммили, а как перенос системы - флешбеки к зелеными монохромами мерещятся.
Мальчик, ты бредишь. Просто не понимаешь матчасть. Кнопочки и окошечки - это монструозная присртойка к программе, которая набирается одной командой в одну строку. Так то..
спасибо.
acronis без всяких заморочек копию делает всех разделов
А fstab c grub'ом acronis тоже правит?
Есть еще довольно простой способ!
Не получилось запустить на другом компе. Вернее на этом же. Просто устанавливал и переносил на виртуальной машине, а включил на физической.
Выручила опция “fallback initramfs” в меню “Advanced options” в меню загрузки GRUB. Из wiki.archlinux узнаем что:
По умолчанию mkinitcpio генерирует два образа после установки или обновления ядра: /boot/initramfs-linux.img and /boot/initramfs-linux-fallback.img. fallback образ создается с точно таким же конфигурационным файлом за исключением хука autodetect, что позволяет включить в него все модули. Хук autodetect обнаруживает нужные модули необходимые для оборудования и включает их в initramfs.
В итоге войдя в систему в режиме “fallback initramfs” и пересоздав загрузочные образы командой
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# mkinitcpio -p linux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
проблема была устранена.
Важное замечание!
Если вы запустились с LiveCD и cмонтировали два раздела, куда копировать и откуда, и копируете при помощи cp, то команда копирования будет иметь вид:
> sudo cp -rxa /mnt/source/. /mnt/destanation
Nочка в конце пути источника предотвратит создание в корне приёмника копии папки surce. Это особенность команды cp.
В остальном, отличный рабочий рецепт. Спасибо.
Здравствуйте.
Спасибо за отличную статью!
Но у меня есть проблема.
Я использовал эти команды:
1. с помощью команды cp осуществил копирование всего харда на такой же по объёму винт(т.е. примонтировал свой новый хард и далее ср).
2. на новом харде поправил sudo vi /mnt/etc/fstab и записал туда UUID от старого харда - верно?
3. далее всё по вашей инструкции(установка загрузчика и т.п.).
Но после отключения старого харда-источника мой новый хард доходит до ввода консольного логина/пароля(т.е. их ввести можно), но вот иксов(графического меню) не появляется.
Что я сделал не так?
надеюсь на ответ - очень надо!
Рука-лицо!!! У тебя там, в (/mnt/etc/fstab) записаны все устройства, которые монтируются в систему при загрузке, а ты добавил новый диск и переносишь на него систему. Нужно заменить в строке, где упоминается старый диск на имя, а лучше UUID нового диска. Тогда всё будет загружаться...
root@andy/$ sudo grub-install /dev/sda
Выполняется установка для платформы i386-pc.
Установка завершена. Ошибок нет.
root@andy/$ sudo update-grub2
Генерируется файл настройки grub …
Предупреждение: Назначение GRUB_TIMEOUT ненулевого значения при заданной GRUB_HIDDEN_TIMEOUT больше не поддерживается.
Найден образ linux: /boot/vmlinuz-4.15.0-20-generic
Найден образ initrd: /boot/initrd.img-4.15.0-20-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Найден Linux Mint 19 Tara (19) на /dev/sdb1
завершено
Всё верно?
ну уж если пишешь для новичков, можно было б во 2-м пункте добавить точку при использовании cp
а то ведь невозможно скопировать командой cp -r dir1 dir2
надо cp -r dir1/. dir2
ссылка с форума
https://ru.stackoverflow.com/questions/749384/%D0%9A%D0%B0%D0%BA-%D1%81%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5-%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0-%D0%B2-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3
Сделал всё по инструкции, но к сожалению у меня не получается запустить ubuntu с моего ssd
В boot меню два пункта(ubuntu и ubuntu) и оба запускаются с винчестера, хотя один из них по идее лежит на ssd после проделанных шагов.
Из особенностей - Я не совсем понял как перенести раздел с /boot/efi, сделал аналогично основному алгоритму
Смонтировал /mnt/boot/efi
Скопировал /boot/efi в /mnt/boot/efi
Отмонтировал
Перезапустил комп
Ну и вообщем-то пока не понимаю как запустить с SSD, буду очень благодарен за ответ!
А что не так без точки? У меня всё скопировалось)
Вариант получше
mount --bind /dev/ /mnt/dev
LANG=ru_RU.UTF-8 chroot /mnt/ /bin/bash
mount -t proc none /proc
mount -t sysfs none /sys
Ещё не забыть в /etc/initramfs-tools/conf.d/resume UUID устройства поправить и сделать update-initramfs -u, иначе система зависнет на Gave up waiting for suspend/resume device. Да и вообще, неплохо было бы в статью добавить про разбивку диска под BIOS/UEFI. Рута то мы перенесли, а загружаться система как будет?
grub-install: error: cannot find EFI directory.
Я так понял подразумевается что я должен знать как так разбить диск чтобы метод с cp работал.
Статья не рабочая.
Просто автор забыл добавить, что это инструкция без учета разбивки дисков, вида биоса, что для разделов gpt с UEFI этот метод не полный и нужно в /boot/EFI еще монтировать раздел EFI, а уже потом устанавливать загрузчик grub2, а также опции при установке загрузчика которые могут понадобится. В общем статья не полная и может новичка ввести в заблуждение.
нее читал дальше после вас но в статье упоминалось что надо править фстаб. стартует с нового диска а потом монтирует старые разделы. пока не поправите не будет счастья. blkid >> /etc/fstab, После открываете фстаб и все необходимое там есть. пысы не забудьте сделать пустых две строки после последней строчки с данными.
купил новый ноут. Диски м2. полность все несовместимое в плане подстановки. скорее придется через акронис и флешку или домашний сервер. ну а потом допиливать. как вспомню траходром с паролями и гуглей, сразу отказываюсь от идеи новой системы. Хак бы поставил, но пока никто на 1135Г хак не ставил. или молчат как жлобы.
Спасибо получилось, возникла необходимость переноса изза нехватки места на диске
На настоящий момент статья не актуальна.
Подойдёт только при переносе MBR -> MBR
При переносе таким методом MBR -> UEFI или UEFI -> UEFI система даже не загрузится
Флаги -r и -a нельзя использовать вместе.
Цитата из книги "Linux книга рецептов":
используйте параметр -r, когда не применяется параметр -a, который гарантирует сохранность атрибутов, а -r нет.