Перейти к содержимому

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

  • автор:

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

Нужно перенести систему на другой физический диск. Я собрался просто установить на него ту же Ubuntu 22.04, затем перегрузится в лайв режиме и скопировать все файлы со старого диска в новый. Затем поправить UUID в /ect/fstab.

Ничего не упускаю?

Suntechnic ★★★★★
11.03.23 15:13:32 MSK

  • Ответить на это сообщение
  • Ссылка

Почему просто не скопировать раздел и поставить загрузчик?

GREAT-DNG ★★★
( 11.03.23 15:16:40 MSK )
Последнее исправление: GREAT-DNG 11.03.23 15:18:09 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка

Я просто делаю cp -ax и правлю fstab

alex1101 ☆
( 11.03.23 15:17:34 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

перед копированием обнови системы

Bad_ptr ★★★★★
( 11.03.23 15:23:40 MSK )

  • Ответить на это сообщение
  • Ссылка

Загрузчик. Ещё ты должен из chroot переставить загрузчик.

Vsevolod-linuxoid ★★★★★
( 11.03.23 16:16:10 MSK )

  • Ответить на это сообщение
  • Ссылка

Я просто делаю pvmove и устанавливаю grub(-install) на новый диск

futurama ★★★★★
( 11.03.23 16:17:12 MSK )

  • Ответить на это сообщение
  • Ссылка

Когда я менял hdd на ssd я сделал просто dd ))

symon2014 ★★
( 11.03.23 16:24:48 MSK )

  • Ответить на это сообщение
  • Ссылка

Про capabilities не забудь

targitaj ★★★★★
( 11.03.23 17:46:40 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Xe0N ★
( 11.03.23 17:57:14 MSK )

  • Ответить на это сообщение
  • Ссылка

Я делаю так: на исходной системе (из лайв-сиди):

  • tar -czf /mnt/full.tgz —numeric-owner —exclude=swapfile .
  • getfacl -R -s -n . > /mnt/file.acl
  • getfattr -R -d -m — . > /mnt/file.attr 2>/dev/null

На целевой системе (тоже из лайв-сиди):

  • tar -xf /mnt/full.tgz —numeric-owner
  • setfacl —restore=/mnt/file.acl
  • setfattr —restore /mnt/file.attr
  • rmdir lost+found
  • mklost+found
  • fallocate -l 4G swapfile
  • chmod 600 swapfile
  • mkswap swapfile

Если инсталлируете на EFI из BIOSa, нужно удостовериться, что на исходной системе инсталлирован grub-efi. Тогда, когда сделаете chroot , grub не будет ругаться. Ну и, конечно, /etc/fstab подправить.

forest22 ★
( 11.03.23 19:16:04 MSK )
Последнее исправление: forest22 11.03.23 19:17:29 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Раньше cp -ax и поправить загрузчик.

А сейчас у меня есть playbook, который за 10 минут развернёт мне обычную домашнюю систему

overmind88 ★★★★★
( 11.03.23 19:31:22 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от targitaj 11.03.23 17:46:40 MSK

Suntechnic ★★★★★
( 11.03.23 20:46:18 MSK ) автор топика

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от alex1101 11.03.23 15:17:34 MSK

Короче не сработало. Просто не грузится. Черный экран. И так как в ноуте третье место по диск оказалось под sata ssd, то не получается воткнуть три диска — переставлять приходится (((

Suntechnic ★★★★★
( 11.03.23 20:48:01 MSK ) автор топика

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Suntechnic 11.03.23 20:46:18 MSK

targitaj ★★★★★
( 11.03.23 20:48:27 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от Suntechnic 11.03.23 20:48:01 MSK

Перенос Ubuntu на SSD (комментарий) — вот тут я новичку реальный пример переноса делал.

Vsevolod-linuxoid ★★★★★
( 11.03.23 21:03:33 MSK )

  • Ответить на это сообщение
  • Ссылка

mkfs.ext4 … /dev/sdb2 mkdir -p /mnt/ mount /dev/sda1 /mnt/src mount /dev/sdb2 /mnt/dst rsync -avh /mnt/src/. /mnt/dst правим /etc/fstab …

uwuwuu
( 11.03.23 21:14:30 MSK )

  • Ответить на это сообщение
  • Ссылка

Я как-то пробывал стандартными метода перенесли систему с одного диска на другой с Debian 9, у меня тогда нерешаемые проблемы возникли с правами на доступ к файлам из-за pam.

nager ★
( 14.03.23 11:22:32 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

мне очень помогла документация из openwrt.

рекомендую сперва посмотреть какая структура файловой системы, сколько томов и куда подключены.

Начинай с рута /, а лучше если сделать

mkdir /oldroot mkdir /newroot mount -o bind / /oldroot mount /dev/(newdisk) /newroot 

это поможет дать доступ к корневому каталогу без остальных каталогов. ну и отсюда /oldroot в /newroot копируешь файлы, мне нравится rsync. но можно cp, tar и другие.

Затем действуешь также по остальным томам. и не забудь обновить /etc/fstab на новые uuid томов.

Nurmukh ★★★
( 14.03.23 18:07:30 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от forest22 11.03.23 19:16:04 MSK

getfacl -R -s -n . > /mnt/file.acl getfattr -R -d -m - . > /mnt/file.attr 2>/dev/null 

По-моему, вторая команда включает в себя первую, нет? Но всё равно спасибо, я раньше только одним tar или cp -a ограничивался, думал, он сохраняет все атрибуты.

Проблема в том что ctime сбрасывается.

Xenius ★★★★★
( 17.03.23 08:58:00 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от Xenius 17.03.23 08:58:00 MSK

Насчёт ctime не знаю.

Насчёт getfacl / getfattr сделайте просто из корня и посмотрите образовавшиеся текстовые файлы. У меня на небольшой системе они по прибл. 5 КБ.

forest22 ★
( 17.03.23 10:32:57 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от forest22 17.03.23 10:32:57 MSK

Там нет опции чтобы не прыгать на другие файловые системы. Почти все записи в /dev и /proc

Ещё в одном треде getcap упоминали.

Xenius ★★★★★
( 17.03.23 10:35:34 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Xenius 17.03.23 10:35:34 MSK

А вы попробуйте из лайв-сиди. У меня никуда не прыгает. Я делаю эту процедуру в двух случаях:

  • перенос системы (как у ТС)
  • бекап консистентного состояния системы. Файлы в /home я исключаю опцией —exclude в tar е. Дот-файлы включаю.

forest22 ★
( 17.03.23 10:46:54 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от forest22 17.03.23 10:46:54 MSK

Я не хочу перезагружать систему только из-за проверки этой штуки.

Xenius ★★★★★
( 17.03.23 10:51:26 MSK )

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от Xenius 17.03.23 08:58:00 MSK

Вообще, в tar е есть опции —xattrs , —acls , но я их не использую, потому что тар в последний раз с ними ругался, что он не может что-то там «create» в контексте ACL. Возможно, это связано с этим багом — https://savannah.gnu.org/bugs/?61934 . Стал делать как раньше — с getfacl / getfattr .

forest22 ★
( 17.03.23 10:56:03 MSK )
Последнее исправление: forest22 17.03.23 10:58:31 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от Xenius 17.03.23 10:51:26 MSK

forest22 ★
( 17.03.23 10:57:00 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от nager 14.03.23 11:22:32 MSK

Потому что cp и rsync по умолчанию не копируют владельца и права

uwuwuu
( 17.03.23 11:05:59 MSK )

  • Ответить на это сообщение
  • Ссылка

Я собрался просто установить на него ту же Ubuntu 22.04

Может лучше Linux Mint?

iZEN ★★★★★
( 17.03.23 11:08:06 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Xenius 17.03.23 10:51:26 MSK

Понадобится еще не раз:

rsync -av --exclude= / /mnt 

Звезды вроде не нужны. Я эту команжду лет 5 назад записал.

Я что-то запамятывал, что не все файлы нужно копировать, потому как есть куча виртуальных файлов и устройств. Всякие /tmp, /run, /proc даже создавать не надо, их вроде система сама создает, если не существует

Да-да, копировать файлы можно прямо на «живой» системе. Вероятность что что-то сломается есть, но я раньше всегда так делал… но УМВР это плохой аргумент все же. На сервере так лучше не делать, потому как если индекс каким-то корявым будет, то базу похеришь

uwuwuu
( 17.03.23 11:09:43 MSK )
Последнее исправление: uwuwuu 17.03.23 11:15:28 MSK (всего исправлений: 2)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Перенос Linux на другой диск на примере Debian/Ubuntu

В этой статье мы покажем, как склонировать/перенести установленную операционную систему Linux на другой (новый) диск на примере Debian и Ubuntu.

Установите утилиту parted с помощью пакетного менеджера:

$ sudo apt install parted -y

Проверьте какая таблица разделов используется на диске (MBR или GPT) с помощью fdisk:

$ sudo fdisk /dev/sda -l

Disk label type: gpt

fdisk проверить тип таблицы разделов в linux: gpt или mbr

Выключите компьютер (виртуальную машину) с Linux и подключите новый диск (/dev/sdb).

Создайте на новом диске таблицу разделов:

$ sudo parted /dev/sdb

Если на исходном диске была таблица разделов GPT (EFI), выполните команду:

Для таблицы разделов MBR (DOS BIOS):

Выйдите из parted:

Теперь с помощью команды DD склонируйте диск dev/sda в /dev/sdb:

$ sudo dd if=/dev/sda of=/dev/sdb bs=1M conv=noerror,sync

Выключите компьютер, отключите старый диск и загрузитесь с нового.

Если размер нового диска больше, чем размер старого, нужно расширить корневой раздел.

Установите утилиты growpart:

$ sudo apt install -y cloud-guest-utils

Расширьте раздел 3 на диске /dev/sda:

$ sudo growpart /dev/sda 3

Теперь нужно расширить физический том (physical volume):

$ sudo pvresize /dev/sda3

Проверьте путь и тип файловой системы:

$ df -hT | grep mapper

/dev/mapper/debian-root xfs 10G 2.5G 7.5G 25% /

Расширьте данный логический том (logical volume):

$ sudo lvextend -r -l +100%FREE /dev/mapper/debian-root

Теперь нужно расширить файловую систему (в нашем примере это XFS):

Если у вас EXT4, то для ее расширения, выполните:

$ sudo resize2fs /dev/mapper/debian-root

Как перенести всю систему Linux на другой диск? [дубликат]

У меня появился новый диск, но я не хочу по новой ставить систему. Есть ли способы полностью перенести всю систему Linux (Kali Linux), а так же все данные на другой диск?

Отслеживать
задан 6 янв 2019 в 10:51
user303264 user303264

абсолютно точно так же, как и любую другую систему: быстрее всего — переставить блочное устройство, дольше — скопировать файлы с одного блочного устройства на другое.

6 янв 2019 в 11:14

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Есть много подходов. Можно воспользоваться утилитой dd :

dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync 

Если переносится не весь диск, а только один раздел, то:

dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync 

А можно воспользоваться чем то типа https://clonezilla.org/, которые позволяют загрузиться с usb flash или dvd и копировать диски или разделы.

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

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

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

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

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

Table of Contents

  • Как перенести Linux на другой диск
    • 1. Подготовка к переносу
    • 2. Перенос Linux утилитой cp
    • 3. Перенос Linux утилитой tar
    • 4. Перенос с помощью rsync
    • 5. Правка /etc/fstab
    • 6. Установка загрузчика
    • 7. Перезагрузка

    Как перенести 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/
    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 окружение:

    sudo chroot /mnt

    Затем установите загрузчик на тот диск, на который вы переносили 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.

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

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