Переместите систему на новый SSD с помощью команды dd

Переместите систему на новый SSD с помощью команды dd

Вопрос довольно простой. Я искал ответ некоторое время, но не уверен, что получил правильный ответ. Поскольку ошибки могут легко уничтожить мой диск и данные, я действительно хочу, чтобы все было ясно.

Я использую Ubuntu на SSD объемом 250 ГБ ( /dev/sda), который имеет два раздела, каждый размером около 125 ГБ. Sda1 смонтирован на , /а sda2 смонтирован на /home. Теперь я хочу переместить все на новый SSD объемом 1 ТБ (допустим, это /dev/sdc) и расширить каждый диск до 500 ГБ. После некоторых исследований я предложил два подхода:

  1. Делать dd if=/dev/sda of=/dev/sdcклонирование всего диска. После этого я должен получить загрузочный диск с двумя разделами по 125 ГБ и некоторым нераспределенным пространством. Правильно? Затем мне нужно изменить размер sdc1 и sdc1 на 500 ГБ с помощью чего-то вроде gparted. Изменение размера может занять много времени, верно?

  2. Второй подход — сначала отформатировать новый диск, создать два раздела по 500 ГБ. Сделайте dd if=/dev/sda1 of=/dev/sdc1и , dd if=/dev/sda2 of=/dev/sdc2чтобы клонировать оба раздела. На этом этапе этот диск должен быть незагружаемым, верно? Чтобы сделать его загрузочным, мне нужно скопировать загрузчик на новый. Мне нужны только первые 446 байт. Так что я могу dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1. dd if=/tmp/mbrsda.bak of=/dev/sdc bs=446 count=1Сделав это, я сделал его загрузочным, а также сохранил таблицу разделов для 500 ГБ+500 ГБ. Этот подход избавит меня от изменения размера диска.

И для обоих подходов мне нужно изменить UUID в /etc/fstabфайле. Это можно сделать, сначала смонтировав новый диск после клонирования: sudo mount /dev/sdc1 /mnt/, а затем отредактировав /mnt/etc/fstabфайл.

Я прав насчет всего этого?
Есть ли потенциальный риск испортить мой старый привод?

решение1

Каждый раз, когда вы используете dd(он же disk destroyer), есть вероятность испортить ваши данные. ddне имеет никаких гарантий от случайной записи вашего нового диска поверх старого. Единственное, что поддерживает его правильную работу, это если вы ОЧЕНЬ осторожны с правильным вводом команд и не путаете источник и место назначения. if=и of=находитесь всего в одном небольшом неправильном нажатии клавиши друг от друга!

Другая проблема в том, что ddэто медленно и приводит к ненужному износу вашего целевого SSD. Большинство разделов обычно не загружены на 100%. Использование ddдля копирования раздела с большим количеством свободного места заканчивается копированием КАЖДОГО БАЙТА указанного раздела, даже байтов, которые на самом деле не содержат никаких выделенных данных!

Вот что бы я сделал, если бы это была моя система:

  1. Сделайте снимок экрана таблицы разделов вашего старого SSD-накопителя, чтобы использовать его позже, когда мы будем настраивать таблицу разделов вашего нового SSD-накопителя.
  2. Подключите новый SSD к компьютеру и отключите старый SSD. Отключение старого SSD делает невозможным уничтожение наших ценных данных, пока мы выполняем потенциально разрушительную работу.
  3. Загрузитесь с установочного USB-накопителя Ubuntu в режиме Linux Live. Убедитесь, что BIOS всегда загружает флэш-накопитель в режиме legacy/MBR, а не в режиме UEFI, поскольку похоже, что ваша старая система использует MBR. Если мое предположение неверно, убедитесь, что BIOS загружает флэш-накопитель в режиме UEFI. Смешение вещей значительно усложнит правильную установку grub в дальнейшем.
  4. Используйте gpartedдля настройки нового SSD с желаемой таблицей разделов и форматирования файловых систем. Постарайтесь сохранить все то же самое, что и в таблице разделов старого SSD (кроме размеров разделов и UUID). Не забудьте пометить /корневую файловую систему как active/ bootable, как и на старом SSD.
  5. Теперь, когда все опасные операции по редактированию разделов выполнены, вы можете безопасно выключить компьютер и подключить к нему старый SSD-накопитель.
  6. Загрузите Linux Live USB флэш-накопитель снова, на этот раз подключив оба диска. Не загружайтесь со старого SSD (нам нужно держать эту систему неактивной, чтобы сделать хорошую чистую копию).
  7. После загрузки откройте терминал и начните работать с этими командами, чтобы скопировать данные со старого SSD на новый SSD. В отличие от использования dd, эта cpкоманда гораздо более защищена от ошибок, поскольку вы не можете ничего уничтожить, копируя пустую файловую систему поверх старой файловой системы — в этом случае ничего не копируется! Кроме того, мы можем смонтировать старый SSD в режиме «только для чтения», чтобы исключить любую возможность изменения старого SSD.

    mkdir oldroot newroot oldhome newhome
    sudo mount -o ro /dev/sda1 oldroot
    sudo mount -o ro /dev/sda2 oldhome
    ls oldroot
    ls oldhome
    

    Убедитесь, что вы видите свои старые данные. Если вы видите только пустую файловую систему, возможно, у вас неправильное устройство "/dev/sdXX"...

    sudo mount -o noatime /dev/sdc1 newroot
    sudo mount -o noatime /dev/sdc2 newhome
    ls newroot
    ls newhome
    

    Убедитесь, что все, что вы видите, это пустая файловая система в качестве места назначения. Если все хорошо, выполните следующие команды, чтобы скопировать все ваши файлы, сохранив все разрешения/владение/настройки контекста SELinux:

    sudo cp -Rfax oldroot/* newroot/
    sudo cp -Rfax oldhome/* newhome/
    

    После этого размонтируйте все и синхронизируйте кэшированные записи с постоянным хранилищем:

    sudo umount oldroot
    sudo umount oldhome
    sudo umount newroot
    sudo umount newhome
    sync
    
  8. Теперь вы можете безопасно выключить и отсоединить старый SSD, чтобы мы не смогли ничего на нем уничтожить, пока работаем над тем, чтобы сделать новый SSD загрузочным.

  9. Загрузите компьютер с помощью USB-флешки в режиме Linux Live, подключив только новый SSD. Откройте терминал и начните работать с этими командами:

    mkdir newroot
    sudo mount -o noatime /dev/sda1 newroot
    sudo chroot newroot /bin/bash
    mount -t devtmpfs udev /dev
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    nano -w /etc/fstab
    

    Теперь вам нужно изменить файл fstab, чтобы сопоставить номера UUID с теми, что есть на вашем новом SSD. Вы можете открыть его, gpartedчтобы посмотреть на таблицу разделов и выяснить, какие новые UUID. Когда закончите, нажмите CTRL-X и сохраните изменения fstab на диск.

    update-grub
    grub-install /dev/sda
    

    Если все работает правильно, это должно настроить grub и установить его в MBR вашего нового SSD. После установки grub вам нужно размонтировать все, что мы ранее смонтировали из среды chroot, перед выходом. В противном случае Ubuntu будет трудно размонтировать раздел Linux чисто, когда вы выключитесь.

    umount /sys
    umount /proc
    umount /dev
    exit
    sudo umount newroot
    sync
    

Вот и все! Надеюсь, ваш новый SSD-диск загрузочный и теперь все хорошо.

решение2

Я только что использовалgpartedдля переноса моего ubuntu 18.04 с одного SATA на другой. Gparted предоставляет простой в использовании графический интерфейс с опциями копирования и вставки, и даже UUID те же самые, поэтому мне не пришлось обновлять /etc/fstabили устанавливать grub на новый диск. Это было очень гладко, поэтому я еще не проверил, что произошло внутри, но во время процесса копирования и вставки,e2image(8)на самом деле был вызван. Опять же, все это основано на моем собственном опыте, пожалуйста, поправьте меня и спасибо вам, ребята.

решение3

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


Я начал с системы с двойной загрузкой на SSD-накопителе емкостью 512 ГБ, которая содержала несколько разделов: EFI, что-то зарезервированное Microsoft, системный раздел Windows, системный раздел Linux, домашний раздел Linux и что-то для восстановления.

Моей целью было перенести все на SSD-накопитель объемом 2 ТБ.


Я загрузил компьютер с Ubuntu Live-USB и клонировал весь SSD на новый SSD с помощью dd. Я приобрел себе небольшой корпус для NVMe SSD, который можно подключить через USB.

Новый SSD использовался совершенно нетронутым: без форматирования, без разделов, без чего-либо.

После клонирования ddя заменил SSD-накопители, т. е. извлек маленький SSD-накопитель из компьютера и установил новый.

Linux загрузился без проблем, а вот Windows провела диагностику/исправление, которые ни к чему не привели.

Затем я снова загрузил систему с Ubuntu Live-USB и запустил gparted.

gpartedсообщил о какой-то ошибке в таблице GPT, которую он предложил исправить. Я выбрал вариант исправления и приступил к изменению размера и перемещению существующих разделов. После того, как все это было сделано, к моему удивлению, Windows также загрузилась без ошибок.


Я приятно удивлен, что вся эта история с клонированием прошла так гладко.


На этой неделе я снова это сделал, снова на машине с двойной загрузкой.

  • Запустите компьютер с установленным небольшим SSD-диском с помощью Live-USB.
  • Установите новый SSD-накопитель в корпус и подключите его.
  • Скопируйте диски с помощьюdd
  • После ddзавершения запустите gpartedвосстановление таблицы GPT, измените размер и переместите разделы.
  • Выключите компьютер и замените SSD-накопители.
  • Обе ОС загрузились нормально.

Некоторые примечания:

  • Убедитесь, что BitLocker полностью и полностью отключен, если старый SSD содержит раздел Windows.
  • Если вы забыли запустить ddс какими-либо параметрами, отображающими ход выполнения, см.этот ответ. Вы можете послать ddсигнал, заставив его отображать информацию о ходе выполнения, не нарушая его работу.

решение4

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

Самый простой способ сделать это — загрузиться сSystemRescueCDи делать все из этой среды. Вы можете создать загрузочный USB-накопитель, так что вам не понадобится настоящий CD.

Связанный контент