Я серьезно использую Linux всего пару месяцев; Я не могу найти простого решения для копирования ОС на другой диск, несмотря на сотни статей на эту тему.

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

Используя свое элементарное понимание, я попробовал следующее:

  1. Получите новый SSD, подключите
  2. введите lsblk
  3. см. диск называется sdb (например)
  4. введите sudo mkfs.ext4 /dev/sdb
  5. создайте раздел с помощью fdisk (например, sdb1)
  6. поместите GPT на раздел (sdb1) с помощью fdisk
  7. скопировать содержимое: sudo rsync -WavxHAX / --exclude={"/media/*"} /media/Rob/3a9142f5-8916-406e-87b0-4ec87d7a3d12/

(при условии, что диск смонтирован на носителе) Возможно, я также пропустил шаг монтирования, например:

sudo mount /dev/sdb1 /mnt

Это было написано по памяти, шаги, вероятно, были опробованы не по порядку, например, создать GPT, а затем отформатировать раздел в ext4; но я так и не понял. В любом случае, основная концепция изложена выше; никаких дополнительных загруженных программ или живых USB-накопителей не требуется.

Может ли кто-нибудь пролить свет на то, как я могу это сделать?

0
user1794469 31 Май 2020 в 06:12
Почему нельзя использовать живой USB? Как правило, вы не можете получить хорошую копию системы во время ее работы. Вам действительно нужно размонтировать диск, который вы хотите создать.
 – 
user1794469
31 Май 2020 в 06:14
Привет, user1794469, ну, я слышал, что это делается, хотя странно, что это кажется таким неясным, поэтому я надеюсь на обратное. Я вижу множество проблем в том, чтобы использовать USB и иметь его под рукой, помимо хлопот. Разве мне не нужна была бы та же ОС на загрузочном носителе, что и ОС, с которой я перемещался?
 – 
1toneboy
31 Май 2020 в 14:13
Обратите внимание на все хлопоты, которые у вас есть. Новая установка на предварительно разбитый на разделы GPT SSD занимает около 10 минут или меньше. Затем вы восстанавливаете свои данные и настройки из /home из резервной копии и переустанавливаете экспортированный список установленных приложений из резервной копии. Это подтверждает, что ваш процесс резервного копирования включает все, пока у вас все еще есть старый диск, на случай, если резервное копирование не будет завершено.
 – 
oldfred
31 Май 2020 в 18:23

2 ответа

Предполагая, что ваша система находится на sda, а ваш новый диск sdb имеет достаточную емкость, Я бы посоветовал вам рассмотреть возможность использования dd для получения функционально идентичной копии вашей ОС:

dd if=/dev/sda of=/dev/sdb bs=128M

Вы можете настроить параметр bs (размер блока) в зависимости от размера/предпочтений вашего диска. Только будьте осторожны, чтобы не перепутать: if для источника of для назначения

Как только копирование завершено, диск sdb можно использовать сразу же после того, как вы измените настройки BIOS/EFI для загрузки с sdb — сначала вам нужно будет идентифицировать его там.

0
Tagwint 4 Июн 2020 в 19:43
Привет, Tagwint, я использовал dd, и это сработало! Очень простой способ, спасибо, мне понравилось. Где я могу узнать, что такое подходящий 'bs=...'?
 – 
1toneboy
8 Июн 2020 в 14:59
Правильная ссылка на меня man dd, но, учитывая, что вы новичок в этом, вы можете начать с других ответов, например: stackoverflow.com /a/27772496/439650
 – 
Tagwint
8 Июн 2020 в 15:38
1
Если sda больше, чем sdb и содержит gpt, у вас не будет рабочей копии! если sda меньше, чем sdb, размер sdb будет таким же, как размер sda, и скроет оставшееся свободное пространство! Клонирование dd идеально подходит для дисков одинакового размера, иначе потребуются дополнительные обходные пути.
 – 
Yunus
8 Июн 2020 в 15:55
Привет Jonah/Tagwint, так что Tagwint, нет лучшего значения по умолчанию, но вы рекомендовали 128 МБ, но эмпирическое правило, которое дал тот человек, было 64 КБ? Это большая разница, это компромисс между скоростью и эффективностью использования дискового пространства? Джона, значит, вы рекомендуете использовать dd только в том случае, если два SSD имеют одинаковый размер? Если sdb больше, то можете ли вы вообще не получить доступ к оставшемуся скрытому пространству?
 – 
1toneboy
9 Июн 2020 в 05:36
@1toneboy, я думаю, теперь пришло время для вас провести небольшое исследование и показать свои усилия, есть способы вернуть скрытое пространство или заранее ограничить объем копирования dd. Я думаю, это еще один вопрос, мы не должны превращать эту цепочку комментариев в учебник, не так ли? :) Вот некоторая отправная точка для вас, чтобы начать свой путь: unix.stackexchange.com/questions/475177/…
 – 
Tagwint
9 Июн 2020 в 11:40

Вы не можете копировать ОС во время работы из-за смонтированного внутри /dev /proc /sys ,

Но ext4 позволяет нам монтировать раздел в разные точки монтирования,

А также вы можете привязать уже смонтированную папку.

# create mbr table on new SSD printf '%s\n' o w |sudo fdisk /dev/sdb;

# create partition on it printf '%s\n' n p 1 '' '' y w |sudo fdisk /dev/sdb;

# write ext4 fs on new partition sudo mkfs.ext4 /dev/sdb1;

# create folder where to bind / (root) sudo mkdir my_os; # mount new partition sudo mount /dev/sdb1 /mnt/; # mount|bind actual system to /mnt sudo mount --bind / my_os/; # like it will clone / to my_os but excluding sub mountpoints /dev /proc /sys # copy the system sudo cp -arxpf my_os/* /mnt/;

# unmount my_os sudo umount my_os;

# remove created folder my_os sudo rm -r my_os;

# change partition UUID inside new system oldUUID="6e92d1d9-ca30-42d9-9e14-c749d0f349b5"; newUUID="$(eval $(sudo blkid /dev/sdb1|awk '{print $2}') ; echo $UUID)";

# loop over files that contains old UUID replace oldUUID by newUUID sudo grep -rl "${oldUUID}" /mnt/{etc,boot} | while read f;do sudo sed -i --follow-symlinks "s/${oldUUID}/${newUUID}/g" "${f}" done

Теперь, если вы хотите использовать это как двойную загрузку, вам просто нужно обновить grub

sudo update-grub;

Если вы хотите использовать на другом компьютере, вам нужно установить grub для этого жесткого диска, чтобы иметь возможность загружаться, поэтому у вас есть два способа:

  • первый

Установив curent grub на новый жесткий диск (немного рискованно)

sudo grub-install /dev/sdb;
sudo update-grub;
# unplug new SSD
sudo grub-install /dev/sda;
sudo update-grub;
  • второй

Через chroot на SSD и установите его grub, обновите его оттуда!

# mount SSD in not mounted to /mnt
sudo mount /dev/sdb1 /mnt/; 
# prepare chroot envirement
sudo mount -t proc /proc /mnt/proc;
sudo mount -t sysfs /sys /mnt/sys;
sudo mount --rbind /dev /mnt/dev;
sudo cp -f /etc/hosts /mnt/etc/;
sudo cp -f /etc/resolv.conf /mnt/etc/resolv.conf;
sudo chroot /mnt rm /etc/mtab 2> /dev/null ;
sudo chroot /mnt ln -s /proc/mounts /etc/mtab ;
# get SSD path by UUID , probably it's /dev/sdb 
grub_install_target="$(sudo chroot /mnt blkid |grep "${newUUID}"|awk -F: '{print $1}')";
grub_install_target="${grub_install_target:0:8}";
((${#grub_install_target})) || echo you cannot continue;
# install grub and update it
sudo chroot /mnt grub-install "${grub_install_target}";
sudo chroot /mnt update-grub;
# unmount SSD before unluging it 
sudo umount -fl /mnt;

При загрузке новой копии гуглите про добавление файла подкачки (необязательно)

Но, как вам сказали, новая установка выполняется очень быстро и хорошо, если вы просто не можете использовать usb, подумайте о grub-imageboot или grml-rescueboot, вы можете загрузить iso с вашего жесткого диска и установить его на новый SSD.

Удачи

0
Yunus 8 Июн 2020 в 15:27
Привет Джона, спасибо
 – 
1toneboy
31 Май 2020 в 13:41
Привет, Джона, спасибо за ответ. Я чувствую, что он будет очень полезен для меня, однако, несмотря на то, что я провел некоторые исследования, я все еще чувствую, что понимаю только половину этого и слишком напуган, чтобы попытаться реализовать это. Не могли бы вы добавить немного подробностей к рассуждениям и разъяснить шаги? У меня есть только очень общее представление о том, что такое GRUB или chroot. Является ли mount --bind root /somewhere/ просто произвольным, а /elsewhere/ новым диском? Если да, то зачем нужно? Вымышленный пример был бы великолепен. Большое спасибо
 – 
1toneboy
31 Май 2020 в 13:54
PS содержимое моего файла fstab: # Подключаемые устройства обрабатываются uDev, в fstab их нет по умолчанию 0 0 Влияет ли это на цикл while-do?
 – 
1toneboy
31 Май 2020 в 14:27
Да, я обновлю ответ более подробно, но будет лучше, если вы скажете, как вы хотите использовать новую копию: вы хотите заменить свой настоящий жесткий диск? вы хотите сохранить оба на одной машине с мультизагрузкой? вызывать разные пути для каждого случая!
 – 
Yunus
31 Май 2020 в 16:31
Привет Джона, я действительно впечатлен вашим ответом, спасибо. Я не очень разбираюсь в файловых системах, но почему мы создали MBR вместо GPT? А зачем было делать слепое монтирование рута в /mnt? Правда, я не делал mkdir sdb1, я просто смонтировал /dev/sdb1 прямо в /media. Но это не должно иметь значения, не так ли? Во всяком случае, я не думаю, что UUID действительно работал. Вот что он говорит:
 – 
1toneboy
1 Июн 2020 в 15:26