Как-то, работая, заметил, что мой личный ноутбук на 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
Монтируем раздел с каталогом пользователя и также переносим с него данные:
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 не забываем выбрать и установить загрузку с нового устройства.
Автор: umart