перенести систему на новый 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.

Прав ли я во всем этом? Есть ли потенциальный риск испортить мой старый диск здесь? Большое спасибо!

4
задан 19 June 2019 в 03:56

3 ответа

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

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

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

  1. Сделайте скриншот таблицы разделов вашего старого SSD для справки позже, когда мы настроим таблицу разделов вашего нового SSD.
  2. Подключите новый SSD к компьютеру и отсоедините старый SSD. Если старый SSD отключен, мы не сможем уничтожить наши ценные данные, пока мы выполняем потенциально разрушительную работу.
  3. Загрузитесь с установочного USB-флешки Ubuntu в режиме реального времени Linux. Убедитесь, что ваш BIOS всегда загружает флэш-накопитель в устаревшем режиме / режиме MBR, а не в режиме UEFI, так как похоже, что ваша старая система использует MBR. Если мое предположение неверно, убедитесь, что ваш BIOS загружает флэш-накопитель в режиме UEFI. Смешение вещей усложнит установку правильной установки grub позже.
  4. Используйте gparted, чтобы настроить новый SSD с нужной таблицей разделов и отформатировать файловые системы. Попытайтесь сохранить все то же самое, что и таблица разделов вашего старого SSD (кроме размеров разделов и UUID). Не забудьте пометить корневую файловую систему / как active / boottable , как ваш старый SSD.
  5. Теперь, когда все опасное редактирование разделов завершено, вы можете безопасно завершить работу и добавить старый SSD, подключенный к компьютеру.
  6. Снова загрузите USB-флеш-накопитель Linux live, подключив оба диска. Не загружайтесь со старого 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
    

    Убедитесь, что все, что вы видите, это пустая файловая система в качестве пункта назначения. Если все хорошо, выполните следующие команды, чтобы скопировать все ваши файлы, сохранив все настройки контекста permissions / owner / 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, подключив только новый 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 загрузочный, и теперь все хорошо.

4
ответ дан 19 June 2019 в 03:56

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

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

0
ответ дан 19 June 2019 в 03:56

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

2
ответ дан 23 September 2020 в 10:46

Другие вопросы по тегам:

Похожие вопросы: