Как я переносил рабочую систему Ubuntu MATE 14.04 на новый SSD-диск

Как-то, работая, заметил, что мой личный ноутбук на i5-ом, с 8 гигабайтами ОЗУ на Linux уступает служебной, менее мощной, «лошадке».

Было решено сделать «ход конём»: вместо старого SATA HDD был приобретен новый SSD диск. Админы по сути своей существа ленивые, и я не стал исключением. Вспоминать все, что было сделано заново, выстраивая свою рабочую среду, не хотелось от слова совсем, и перенос операционной системы был наименее беспроблемным вариантом в моем случае. Итак, приступим.

В ноутбук, через переходник-контроллер в слот DVD-привода, был подключен вторым новый SSD-диск на 60 Гб, определившийся в системе как /dev/sdb.

На старом 320 Гб HDD-диске /dev/sda было три раздела: /dev/sda1 (swap — предварительно отключен), /dev/sda2 (/корневой раздел), /dev/sda3 (/home). Полный объем всех данных на всех разделах занимал около 50 Гб.

Загрузился в режим LiveUSB, на Ubuntu MATE 14.04 с usb-флешки. Gparted-ом создал раздел sdb1 на SSD-диске. Флаги не ставил. Входим в привилегированный режим root:

sudo -i

Проверяем есть ли поддержка TRIM:

hdparm -I /dev/sdb | grep -i trim

* Data Set Management TRIM supported (limit 1 block).

Вывод листинга означает, что поддержка TRIM есть и она активна.

Проверяем выравнивание разделов:

parted /dev/sdb align-check opt 1

Если 1 выровнено или 1 aligned, то все в порядке.

Создаем каталоги точек монтирования:

mkdir /mnt/{sda2,sda3,sdb1}

Монтируем нужные разделы:

mount /dev/sdb1 /mnt/sdb1
mount /dev/sda2 /mnt/sda2

Переносим, синхронизируя данные с корневого раздела:

rsync -qaHEAXh /mnt/sda2/* /mnt/sdb1

где:
-q — уменьшить уровень подробностей
-a — архивный режим
-H — сохранять жесткие ссылки
-E — сохранить исполняемость файлов
-A — сохранить списки ACL
-X — сохранить расширенные атрибуты
-h — выходные числа в легко воспринимаемом формате

Монтируем раздел с каталогом пользователя и также переносим с него данные:

mount /dev/sda3 /mnt/sda3
rsync -qaHEAXh /mnt/sda3/* /mnt/sdb1/home

Для большей сохранности от случайных ошибок отмонтируем разделы исходного HDD-диска:

umount /mnt/sda2
umount /mnt/sda3

Монтируем файловые системы нативной ОС, в которую перенесли данные:

mount --bind /proc /mnt/sdb1/proc
mount --bind /dev /mnt/sdb1/dev
mount --bind /sys /mnt/sdb1/sys

Операцией chroot изменяем рабочий корневой каталог на тот, в который переносим данные:

chroot /mnt/sdb1

Бекапим один из конфигурационных файлов со сведениями о файловых системах:

cp /etc/fstab{,.bak}

Добавляем актуальную метку UUID раздела sdb1 в fstab:

ls -l /dev/disk/by-uuid |grep sdb >> /etc/fstab

Редактируем fstab:

nano /etc/fstab

И приводим его к примерному виду:

# / was on /dev/sdb1 during installation
UUID=c45939b4-3a58-4873-aa6e-247746hgftb5 / ext4 errors=remount-ro 0 1

где UUID=значение sdb1

Обновляем конфигурационный файл загрузчика Linux:

update-grub

Проверяем, правильно ли выставлены значения UUID раздела в конфигурационном файле grub.cfg:

cat /boot/grub/grub.cfg | grep «uuid sda2»

где вместо «uuid sda2» подставляйте свое значение uuid-раздела. У меня остались старые значения, поэтому:

Выходим из chroot:

exit

Отмонтируем файловые системы:

umount /mnt/sdb1/sys
umount /mnt/sdb1/dev
umount /mnt/sdb1/proc

Меняем в grub.cfg все старые значения uuid раздела sda2, на новые значения uuid раздела sdb1. Мне проще было сделать так. Вы можете сделать это по своему.

Ставим сервер mysql, в котором есть утилита replace (пароль любой, одинаковый — не пригодится):

apt-get install mysql-server-5.5

Меняем UUID-ы:

replace 'old_uuid' 'new_uuid' -- /mnt/sdb1/boot/grub/grub.cfg

где old_uuid и new_uuid, старое и новое значения соответственно.

Проверяем поменялись ли значения в grub.cfg:

cat /mnt/sdb1/boot/grub/grub.cfg | grep «uuid sdb1»

Заново монтируем файловые системы и chroot-имся:

mount --bind /proc /mnt/sdb1/proc
mount --bind /dev /mnt/sdb1/dev
mount --bind /sys /mnt/sdb1/sys
chroot /mnt/sdb1

Устанавливаем сам загрузчик на sdb:

grub-install /dev/sdb

Выходим из chroot:

exit

Размонтируем всё смонтированное:

umount /mnt/sdb1/sys
umount /mnt/sdb1/dev
umount /mnt/sdb1/proc
umount /mnt/sdb1

Выходим из привилегированного режима root-а:

exit

Перегружаемся в новую систему. При перезагрузке в BIOS не забываем выбрать и установить загрузку с нового устройства.
Share post

Similar posts

Comments 35

    +28
    Ставить mysql сервер чтобы сделать замену всех вхождений слова это очень сурово. Чем же Вам sed не угодил?
      +6
      Да тут можно вообще чем угодно сделать, вплоть до всяких говно скриптов. Но вот с mysql, я вообще вижу впервые решения.
      Мне вообще такая дикая мысль не могла прийти в голову, так что за оригинальность можно поставить автору + .
        +1
        Я бы не стал горячиться, учитывая, что во-первых mysql ставится для replace, а во-вторых, менять uuid'ы местами вообще не надо, поскольку из chroot обновлятор граба сам запишет правильные в новый конфиг.
          +6
          Да тут всю статью можно разложить и подавать на лекциях, как не надо делать. Но некоторые места действительно оригинальные.
          поэтому тут все как в Шурике

        0
        Сказано же:
        Админы по сути своей существа ленивые

          –7
          К счастью или к сожалению, но вплотную не приходилось с ним сталкиваться. Ваш намек, хороший повод познакомиться с этой командой поближе.
            +1
            В сети stackexchange полно ответов на похожие вопросы. Вот примеры по поводу замены слова. А вот примеры по поводу миграции 1 2 3. Многие используют grub-install вместо финта с replace. Я советую Вам поправить свой гайд, потому на что русском языке материала нет. По возможности протестируйте всё в виртуалке.
              0
              Спасибо за подсказки. На выходных постараюсь проанализировать и переделать статью.
          –2
          Не проще ли акронисом скопировать разделы целиком? Делается "мышкой" условно говоря за 10 кликов.
          Перенос 50 Гигов — это минута кликанья + минут 20 ожидания.
            0
            Описанный способ более универсальный, например, если хочется клонировать только систему (без /home), или поменять по дороге файловую систему, или переехать с большего на меньший раздел. Просто там много лишнего, чего я обычно не делаю.
              +2
              акронисом

              Зачем нужна проприетарная поделка, когда есть штатное открытое решение, которое ничем не хуже?
                –1
                скажем так: эта поделка позволяет выполнить переезд на ssd максимально быстро. + доступна обычному пользователю.
                  +1
                  Все то же самое позволяет выполнить и disk dump.
              +14
              Когда вы зашли chroot'ом на новый диск, просто выполните

              grub-install /dev/sdX
              update-grub

              и не надо для этого ставить mysql.
                +3
                1. Если для доведения системы до пригодного состояния требуется много времени — вы пользуетесь не тем продуктом.

                2. Если настройки по умолчанию совершенно не подходят, то опять же либо не тот продукт, либо стоит пересмотреть свои привычки, либо реализовать быстрое развёртывание "вашего" окружения.

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

                4. Если ноутбук, то обязательно требуется шифрование диска, которое уже давно интегрировано в систему установки Debian и Ubuntu.

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

                P.S. Вроде не заметил уточнений какие файловые системы выбраны и какие настройки были допилены для дружбы с SDD. Подскажу минимум: noatime, nodiratime, discard, noop/deadline scheduler, /tmp & /run -> tmpfs, commit(ext4) и т.д.
                  +2
                  Вне зависимости от системы, LVM крайне желателен.
                  ну с btrfs он уже становится мало актуальным.
                    0
                    Это всё же частный случай, как и ZFS, где подобная функция срослась с файловой системой.
                    Пока что LVM самое надёжное и наиболее интегрированное решение. Да и не стоит забывать, что /home на десктопе лучше всегда держать обособлено.
                      +1
                      LVM — да. А вот /boot на lvm до сих пор, кажется, кое-где подглючивает.
                        +2
                        поэтому пару сотен мегабайт в классическом разделе + остальное в боольшой lvm pv
                  0
                  Было такое дело как-то. Решил проблему тупым копированием всех данных с одного диска на другой, кроме папок dev, tmp и т.д., после чего прошёлся по инструкции восстановления работы grub2. Всё работало)

                  Вопрос к автору — что значит этот магический набор параметров в rcync: -qaHEAXh? Может для простых смертных было бы лучше использовать полные аналоги этих аргументов, а не их сокращённые варианты? Чтобы люди понимали, что делают.
                    –5
                    Путем гугления нашел один из примеров синхронизации с параметрами. Надо было конечно перед использованием проверить на что они влияют, но именно в этом случае у меня не было особого желания и времени для уточнения. Согласен, для новичков это было бы удобнее. Но ничего не мешает тем кому интересно вбить в bash:
                    имя команды --help

                      0
                      То есть Вы нашли в интернете какую-то команду с параметрами, не разобрались, что она делает, и теперь тупо её распространяете? Я ничего не перепутал?
                        0
                        Внёс дополнения с разбором используемых параметров rsync в статью.
                          +4
                          Копировать диски и читать мануалы я умею и сам, спасибо. Мне просто неуютно видеть упоминание себя в качестве «админа» и фразу «надо было конечно перед использованием проверить на что они влияют» от одного и того же человека.
                    +22
                    Статья о том, как простое сделать сложным.
                      –5
                      Согласен, что написал много и возможно сложно. Но обычно, в Инернете бывает сложно найти статью новичку, где доступно расписано, что и на каком шаге выполняется. А углубляться в предмет можно порой до бесконечности.
                        0
                        Просто, если что то не гуглится, задается вопрос на соответствующем ресурсе, после чего это начинает гуглиться.
                        В любом случае от вашей статьи есть польза за счет возможности оставлять к ней комментарии.
                      +7
                      Что-то с каждым днем на хабре статьи одна "лучше" другой стали появляться. Такими темпами будем в необозримом будущем читать статьи про установку ubuntu.
                        0
                        Ну, про описание нормального решения, аналогичное MS WDS сервису, для развертывания аппаратных серверов под той же ubuntu/centos, я бы и сам с удовольствием почитал, а то сейчас обхожусь IP KVM + netinstall + apt-get install wget && wget my_install_script.sh && bash ./my_install_script.sh, но диски надо разбивать ручками и всё такое. а хорошее готовое решение, которое я когда-то использовал во времена выхода KDE4, к сожалению, заброшено, что уже даже название забыл
                        0
                        А чего бы просто не использовать dd?
                          –2
                          У dd другая логика работы с дисками. Мне же важны были размеры дисков и гибкость в настройке.
                            0
                            Как раз недавно менял диск на нашем скромном файлопомоечном сервере. Вариант с «dd if=… of=...» показался самым простым. Запустил команду, выключил — переткнул — включил, всё :-)
                            +1
                            Я могу сильно заблуждаться, или просто не понять всей глубины мыслей, но:
                            parted (fdisk)
                            dd
                            resize2fs (для ленивых)
                            vi /etc/fstab (если там разделы монтировались по uuid)

                            вполне себе достаточный набор.
                            0
                            А я просто загрузил Clonezilla с флешки и через полчаса имел рабочую систему в первозданном виде.

                            Only users with full accounts can post comments. Log in, please.