Было решено сделать «ход конём»: вместо старого 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 не забываем выбрать и установить загрузку с нового устройства.
Комментарии (35)
leschenko
18.02.2016 22:34-2Не проще ли акронисом скопировать разделы целиком? Делается "мышкой" условно говоря за 10 кликов.
Перенос 50 Гигов — это минута кликанья + минут 20 ожидания.badfiles
18.02.2016 22:48Описанный способ более универсальный, например, если хочется клонировать только систему (без /home), или поменять по дороге файловую систему, или переехать с большего на меньший раздел. Просто там много лишнего, чего я обычно не делаю.
d7s2di
19.02.2016 11:05+2акронисом
Зачем нужна проприетарная поделка, когда есть штатное открытое решение, которое ничем не хуже?
badfiles
18.02.2016 22:40+14Когда вы зашли chroot'ом на новый диск, просто выполните
grub-install /dev/sdX update-grub
и не надо для этого ставить mysql.
andvgal
18.02.2016 22:44+3- Если для доведения системы до пригодного состояния требуется много времени — вы пользуетесь не тем продуктом.
- Если настройки по умолчанию совершенно не подходят, то опять же либо не тот продукт, либо стоит пересмотреть свои привычки, либо реализовать быстрое развёртывание "вашего" окружения.
- Практически любая система, поставленная по свежему намного лучше, чем перетягивание старой. По этой причине вместо апгрейда лучше ставить свежую систему и перетягивать лишь домашнюю папку, и то не всю. С точки зрения безопасности, это также полезная процедура по очищению.
- Если ноутбук, то обязательно требуется шифрование диска, которое уже давно интегрировано в систему установки Debian и Ubuntu.
- Вне зависимости от системы, LVM крайне желателен. В данном случае можно было бы подключить новый диск как физический раздел для LVM и перенести на него критичные логические разделы вообще без изменений системы.
P.S. Вроде не заметил уточнений какие файловые системы выбраны и какие настройки были допилены для дружбы с SDD. Подскажу минимум: noatime, nodiratime, discard, noop/deadline scheduler, /tmp & /run -> tmpfs, commit(ext4) и т.д.icCE
19.02.2016 00:17+2Вне зависимости от системы, LVM крайне желателен.
ну с btrfs он уже становится мало актуальным.andvgal
19.02.2016 00:39Это всё же частный случай, как и ZFS, где подобная функция срослась с файловой системой.
Пока что LVM самое надёжное и наиболее интегрированное решение. Да и не стоит забывать, что /home на десктопе лучше всегда держать обособлено.mickvav
19.02.2016 00:50+1LVM — да. А вот /boot на lvm до сих пор, кажется, кое-где подглючивает.
foxmuldercp
19.02.2016 11:46+2поэтому пару сотен мегабайт в классическом разделе + остальное в боольшой lvm pv
- Если для доведения системы до пригодного состояния требуется много времени — вы пользуетесь не тем продуктом.
saggid
18.02.2016 22:46Было такое дело как-то. Решил проблему тупым копированием всех данных с одного диска на другой, кроме папок dev, tmp и т.д., после чего прошёлся по инструкции восстановления работы grub2. Всё работало)
Вопрос к автору — что значит этот магический набор параметров в rcync: -qaHEAXh? Может для простых смертных было бы лучше использовать полные аналоги этих аргументов, а не их сокращённые варианты? Чтобы люди понимали, что делают.umart
19.02.2016 10:09-5Путем гугления нашел один из примеров синхронизации с параметрами. Надо было конечно перед использованием проверить на что они влияют, но именно в этом случае у меня не было особого желания и времени для уточнения. Согласен, для новичков это было бы удобнее. Но ничего не мешает тем кому интересно вбить в bash:
имя команды --help
torkve
19.02.2016 12:49То есть Вы нашли в интернете какую-то команду с параметрами, не разобрались, что она делает, и теперь тупо её распространяете? Я ничего не перепутал?
umart
19.02.2016 14:58Внёс дополнения с разбором используемых параметров rsync в статью.
torkve
19.02.2016 15:08+4Копировать диски и читать мануалы я умею и сам, спасибо. Мне просто неуютно видеть упоминание себя в качестве «админа» и фразу «надо было конечно перед использованием проверить на что они влияют» от одного и того же человека.
Wedmer
18.02.2016 22:59+22Статья о том, как простое сделать сложным.
umart
19.02.2016 10:37-5Согласен, что написал много и возможно сложно. Но обычно, в Инернете бывает сложно найти статью новичку, где доступно расписано, что и на каком шаге выполняется. А углубляться в предмет можно порой до бесконечности.
Wedmer
19.02.2016 15:27Просто, если что то не гуглится, задается вопрос на соответствующем ресурсе, после чего это начинает гуглиться.
В любом случае от вашей статьи есть польза за счет возможности оставлять к ней комментарии.
PinGniX
19.02.2016 07:55+7Что-то с каждым днем на хабре статьи одна "лучше" другой стали появляться. Такими темпами будем в необозримом будущем читать статьи про установку ubuntu.
foxmuldercp
19.02.2016 11:50Ну, про описание нормального решения, аналогичное MS WDS сервису, для развертывания аппаратных серверов под той же ubuntu/centos, я бы и сам с удовольствием почитал, а то сейчас обхожусь IP KVM + netinstall + apt-get install wget && wget my_install_script.sh && bash ./my_install_script.sh, но диски надо разбивать ручками и всё такое. а хорошее готовое решение, которое я когда-то использовал во времена выхода KDE4, к сожалению, заброшено, что уже даже название забыл
d7s2di
19.02.2016 11:01А чего бы просто не использовать dd?
umart
19.02.2016 11:05-2У dd другая логика работы с дисками. Мне же важны были размеры дисков и гибкость в настройке.
dmial
23.02.2016 18:39Как раз недавно менял диск на нашем скромном файлопомоечном сервере. Вариант с «dd if=… of=...» показался самым простым. Запустил команду, выключил — переткнул — включил, всё :-)
begemot_nn
20.02.2016 10:37+1Я могу сильно заблуждаться, или просто не понять всей глубины мыслей, но:
parted (fdisk)
dd
resize2fs (для ленивых)
vi /etc/fstab (если там разделы монтировались по uuid)
вполне себе достаточный набор.
Anonym
20.02.2016 11:14А я просто загрузил Clonezilla с флешки и через полчаса имел рабочую систему в первозданном виде.
c0rp
Ставить mysql сервер чтобы сделать замену всех вхождений слова это очень сурово. Чем же Вам sed не угодил?
icCE
Да тут можно вообще чем угодно сделать, вплоть до всяких говно скриптов. Но вот с mysql, я вообще вижу впервые решения.
Мне вообще такая дикая мысль не могла прийти в голову, так что за оригинальность можно поставить автору + .
badfiles
Я бы не стал горячиться, учитывая, что во-первых mysql ставится для replace, а во-вторых, менять uuid'ы местами вообще не надо, поскольку из chroot обновлятор граба сам запишет правильные в новый конфиг.
icCE
Да тут всю статью можно разложить и подавать на лекциях, как не надо делать. Но некоторые места действительно оригинальные.
поэтому тут все как в Шурике
ComodoHacker
Сказано же:
umart
К счастью или к сожалению, но вплотную не приходилось с ним сталкиваться. Ваш намек, хороший повод познакомиться с этой командой поближе.
c0rp
В сети stackexchange полно ответов на похожие вопросы. Вот примеры по поводу замены слова. А вот примеры по поводу миграции 1 2 3. Многие используют grub-install вместо финта с replace. Я советую Вам поправить свой гайд, потому на что русском языке материала нет. По возможности протестируйте всё в виртуалке.
umart
Спасибо за подсказки. На выходных постараюсь проанализировать и переделать статью.