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

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

  • автор:

Аникин

Связаться со мной:

Перенос linux на другой диск на примере debian/ubuntu

Навеяно статьей про перенос freebsd на другой диск. Будем делать тоже самое но на linux. В linux все несколько сложнее.

Для начала нужно подсоединить новый диск и загрузится. В системе должны присутствовать 2 диска, первый с нашей системой, а второй пустой. Второй мы можем разметить по своему усмотрению или же скопировать разметку с первого диска(если второй диск идентичен первому). Как скопировать разметку можно прочесть здесь. Как разметить вручную думаю разберётесь сами, благо мануалов в интернете полно. После создания разметки разделы надо отформатировать примерно так.

# mkfs.ext4 /dev/sdb1

Затем примонтируем его в /mnt

# mount /dev/sdb1 /mnt

Теперь нам нужно создать дампы разделов, в данном случае нужно создать только дамп sda1. Установим утилиты dump/restore.

# apt-get install dump

И создаем дамп раздела в файл /mnt/root.img

# dump -0f /mnt/root.img /

Создание дампа в /mnt/root.img возможно когда на разделе используется менее 50% от /dev/sdb1. Иначе на разматывание дампа места не хватит. В остальных случаях нужно создавать дамп в другом месте, но не в разделе корня, чтобы дамп не мотал сам себя. Можно использовать раздел другой тачки примонтированный по sshfs, я проверял это прекрасно работает.
Переходим в /mnt и разматываем дамп.

# cd /mnt # restore -rf /mnt/root.img

Как видим раздел перенесся на /dev/sdb1. Если у нас /boot на отдельном разделе, то переносим его аналогично.

Теперь нам нужно установить загрузчик.

# grub-install --root-directory=/mnt /dev/sdb

Затем если требуется правим /mnt/etc/fstab и меню grub в /mnt/boot/grub/grub.cfg.

# nano /mnt/etc/fstab # nano /mnt/boot/grub/grub.cfg

Тут немного поясню зачем проверять и править эти файлы. У меня например в этих файлах были прописаны uuid разделов, и если мы уберем старый диск то ОС соответственно не загрузится, т.к у новых разделов у нас другие uuid. Я вместо uuid прописал реальные устройства корня и свопа /dev/sda1 и /dev/sda3. Все устройства sdb, станут у нас sda после извлечение первого диска.

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

P.S. Утилиты dump и restore не ограничиваются переносом ОС с одного диска на другой. Таким образом можно переносить linux вообще на другую тачку с другим железом и дисками. Процедура почти такая же за небольшими изменениями.

  1. На первой тачке создаем дамп ОС;
  2. Загружаем вторую тачку с livecd;
  3. Размечаем и форматируем диски;
  4. Копируем туда дамп c первой тачки(по scp, например);
  5. Разворачиваем дамп с помощью restore;
  6. Устанавливаем загрузчик;
  7. Загружаемся.

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

Нужно перенести систему на другой физический диск. Я собрался просто установить на него ту же 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 на другой диск? [дубликат]

У меня появился новый диск, но я не хочу по новой ставить систему. Есть ли способы полностью перенести всю систему 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 — это файлы, то чтобы перенести операционную систему на другой диск нужно скопировать определенные файлы и папки, сохраняя структуру и разрешения файлов.
Получим права суперпользователя:
sudo -i

Определим какие диски подключены в операционной системе:
fdisk -l

Произведем разметку нужного диска (например, /dev/sdb) аналогично установленному (например, /dev/sda):
fdisk -d /dev/sda | sfdisk —force /dev/sdb

Отформатируем вновь созданные разделы:
Для основного раздела Linux:
mkfs.ext4 /dev/sdb1
и для swap
mkswap /dev/sdb3

Создаем директорию и смонтируем в нее системный раздел нужного диска:
mkdir /mnt/hdd
mount /dev/sdb1 /mnt/hdd

Скопируем в папку /mnt/hdd всю информацию со старого системного раздела. Для этого запускаем утилиту cp с опциями -a, -r и -x. Первая опция включает сохранение исходных прав и метаданных файла, вторая — рекурсивный обход файловой системы, а третья ограничивает рекурсию только текущей файловой системой:
cp -rxa /bin/ /boot/ /etc/ /home/ /lib/ /lib64/ /opt/ /root/ /sbin/ /tmp/ /usr/ /var/ /initrd.img vmlinuz /mnt/hdd
или
sudo cp -rxa / /mnt/hdd
и
cd /mnt/hdd
mkdir /dev /proc /srv /sys /mnt
chmod 777 /tmp

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

Далее будем работать только с новой системой. Первым делом нужно исправить файл /etc/fstab, чтобы там был указан правильный UUID корневого раздела. Определяем UUID нужного раздела командой:
lsblk -o NAME,UUID
или
blkid /dev/sdb1

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

Далее нужно установить загрузчик Grub в новом Linux. Примонтируем в него папки /sys, /proc и /dev:
mount —bind /sys /mnt/hdd/sys
mount —bind /proc /mnt/hdd/proc
mount —bind /dev /mnt/hdd/dev

Войдем в chroot окружение:
chroot /mnt/hdd

Устанавливаем загрузчик на тот диск, на который перенесли Linux /dev/sdb:
grub-install /dev/sdb

Создадим конфигурационный файл для загрузчика:
update-grub2

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

Размонтируем системные каталоги и системный раздел:
umount /mnt/hdd/sys
umount /mnt/hdd/proc
umount /mnt/hdd/dev
umount /mnt/hdd

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

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

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

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar