Главная >> Инструкции >> Перенос 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. Первая опция включает сохранение исходных прав и метаданных файла, вторая - рекурсивный обход файловой системы, а третья ограничивает рекурсию только текущей файловой системой:

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.

Оцените статью

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (19 оценок, среднее: 4,53 из 5)
Загрузка...
Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

33 комментария к “Перенос Linux на другой диск”

  1. Программой Timeshift основанной на упомянутой в статье rsync, я переносил бекап и запускал на внешнем жестком диске, тоже как вариант вообще в три клика мышкой.

    Ответить
  2. Ну, что с Виндоус так не получится - не совсем правда 🙂
    Во времена 98 мастдая я именно простым копированием переносил вообще всё на новые диски. Запускаешь систему, делаешь fdisk, format, а потом запускаешь far manager и просто выделяешь все файлы на диске C: (естественно и скрытые) и F5 - на диск E:.
    Не понимаю до сих пор, как оно копировало загрузочный сектор, но по окончании процесса я вынимал старый диск и система запускалась и работала с нового!
    Проверено неоднократно. Ещё и по работе приходилось так же делать "бэкапы", и все заводилось всегда. К тому же 98 прекрасно заводилась на любом новом (другом, то есть) железе. Как правило, на том же диске С был и дистрибутив, с которого она изначально устанавливалась, и при замене компа она просто "находила новое оборудование" и ставила дрова из дистра. Но потом пришла ХП, и счастье прошло.

    Ответить
  3. Как с uefi такое сделать? Только ssd переставил на другой пк. Он его не видет. А через легаси замирает через 15 секунд со включенными иксами.

    Ответить
  4. Вранье. У 98 не было никакого оборудования, она ничего не умела находить, для всего надо было скачать драйвера и установить!!!

    Ответить
      • Как в linux не получиться. Используйте Acronis или ghost. Если переносить систему на том же компе, на другой
        Диск, то всё ок. Если копия будет заводится на другом железе, новое железо, не должно иметь более трех аппаратных отличий, проц,чип мамки и т.д

        Ответить
  5. Здравствуйте, большое спасибо за приведенные способы.
    А можно ли таким образом на vps подменить систему? Например, сжать диск, выделить раздел, восстановить в него архив . gz, подредактировать grub, чтобы нулевым пунктом была эта система, и иметь таким образом какой нибудь linux mint, а не debian, который они предлагают?

    Ответить
    • На VPS используется виртуализация, KVM, XEN, OpenVZ и так далее, поэтому дистрибутивы там специальные, модифицированные, лучше попросить техподдержку установить тот дистрибутив, который вам нужен. Если с KVM теоретически может получиться, то с OpenVZ вообще не выйдет.

      Ответить
  6. 21-й век на дворе, а линуксы до сих пор без консоли, как без титьки. Любые глюкала напрограммили, а как перенос системы - флешбеки к зелеными монохромами мерещятся.

    Ответить
    • Мальчик, ты бредишь. Просто не понимаешь матчасть. Кнопочки и окошечки - это монструозная присртойка к программе, которая набирается одной командой в одну строку. Так то..

      Ответить
  7. Не получилось запустить на другом компе. Вернее на этом же. Просто устанавливал и переносил на виртуальной машине, а включил на физической.
    Выручила опция “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
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    проблема была устранена.

    Ответить
  8. Важное замечание!
    Если вы запустились с LiveCD и cмонтировали два раздела, куда копировать и откуда, и копируете при помощи cp, то команда копирования будет иметь вид:
    > sudo cp -rxa /mnt/source/. /mnt/destanation
    Nочка в конце пути источника предотвратит создание в корне приёмника копии папки surce. Это особенность команды cp.
    В остальном, отличный рабочий рецепт. Спасибо.

    Ответить
  9. Здравствуйте.
    Спасибо за отличную статью!
    Но у меня есть проблема.
    Я использовал эти команды:
    1. с помощью команды cp осуществил копирование всего харда на такой же по объёму винт(т.е. примонтировал свой новый хард и далее ср).
    2. на новом харде поправил sudo vi /mnt/etc/fstab и записал туда UUID от старого харда - верно?
    3. далее всё по вашей инструкции(установка загрузчика и т.п.).
    Но после отключения старого харда-источника мой новый хард доходит до ввода консольного логина/пароля(т.е. их ввести можно), но вот иксов(графического меню) не появляется.
    Что я сделал не так?
    надеюсь на ответ - очень надо!

    Ответить
  10. 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
    завершено

    Всё верно?

    Ответить
  11. ну уж если пишешь для новичков, можно было б во 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

    Ответить
  12. Сделал всё по инструкции, но к сожалению у меня не получается запустить ubuntu с моего ssd
    В boot меню два пункта(ubuntu и ubuntu) и оба запускаются с винчестера, хотя один из них по идее лежит на ssd после проделанных шагов.
    Из особенностей - Я не совсем понял как перенести раздел с /boot/efi, сделал аналогично основному алгоритму
    Смонтировал /mnt/boot/efi
    Скопировал /boot/efi в /mnt/boot/efi
    Отмонтировал
    Перезапустил комп
    Ну и вообщем-то пока не понимаю как запустить с SSD, буду очень благодарен за ответ!

    Ответить
  13. Ещё не забыть в /etc/initramfs-tools/conf.d/resume UUID устройства поправить и сделать update-initramfs -u, иначе система зависнет на Gave up waiting for suspend/resume device. Да и вообще, неплохо было бы в статью добавить про разбивку диска под BIOS/UEFI. Рута то мы перенесли, а загружаться система как будет?

    Ответить
  14. grub-install: error: cannot find EFI directory.
    Я так понял подразумевается что я должен знать как так разбить диск чтобы метод с cp работал.
    Статья не рабочая.

    Ответить
  15. Просто автор забыл добавить, что это инструкция без учета разбивки дисков, вида биоса, что для разделов gpt с UEFI этот метод не полный и нужно в /boot/EFI еще монтировать раздел EFI, а уже потом устанавливать загрузчик grub2, а также опции при установке загрузчика которые могут понадобится. В общем статья не полная и может новичка ввести в заблуждение.

    Ответить
  16. нее читал дальше после вас но в статье упоминалось что надо править фстаб. стартует с нового диска а потом монтирует старые разделы. пока не поправите не будет счастья. blkid >> /etc/fstab, После открываете фстаб и все необходимое там есть. пысы не забудьте сделать пустых две строки после последней строчки с данными.

    Ответить
  17. купил новый ноут. Диски м2. полность все несовместимое в плане подстановки. скорее придется через акронис и флешку или домашний сервер. ну а потом допиливать. как вспомню траходром с паролями и гуглей, сразу отказываюсь от идеи новой системы. Хак бы поставил, но пока никто на 1135Г хак не ставил. или молчат как жлобы.

    Ответить
  18. На настоящий момент статья не актуальна.
    Подойдёт только при переносе MBR -> MBR
    При переносе таким методом MBR -> UEFI или UEFI -> UEFI система даже не загрузится

    Ответить
  19. Флаги -r и -a нельзя использовать вместе.
    Цитата из книги "Linux книга рецептов":
    используйте параметр -r, когда не применяется параметр -a, который гарантирует сохранность атрибутов, а -r нет.

    Ответить

Оставьте комментарий