2010-07-10

Клонирование системы с обычного HDD на SSD

Дано /dev/sda:

---------------------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---------------------------------------------------------------


Склонировать надо на новый диск /dev/sdb, на котором создать ту же таблицу разделов, но размер каталогов может быть другим, в данном случае раздел /dev/sdb7 был меньше.

---------------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---------------------------------------------------------


Берем привычный инструмент и клонируем:

dd if=/dev/sda of=/dev/sdb bs=1M


После этого практически все программы работы с разделами (sfdisk, cfdisk, parted(gparted)) отказались работать с /dev/sdb, ссылаясь на неправильную таблицу разделов, показывающую верхнюю границу разделов выше физического размера целевого винта /dev/sdb. Остался только верный и надежный fdisk, честно показавший все данные по разделам, даже некорректные:

# fdisk -l /dev/sdb


Справиться с проблемой помогло удаление целиком расширенного раздела /dev/sda4, сохранение таблицы на диск (w), и последующее создание тех же самых разделов (n) указанием начального и конечного цилиндров:

# fdisk /dev/sdb
> n

Номера цилиндров вводить те же самые, что и на исходном диске:

# fdisk /dev/sda
> p


Теперь gparted показывал диск. Мало того, после просмотра оказалось, что вся инфа, переписанная с исходного диска командой dd в самом начале, находится на месте и после удаления расширенного раздела никуда не делась. Цветом явно выделялись области с данными. Осталось только грохнуть недо-раздел /dev/sdb7 и заново создать его в новых границах. А после банальным копированием с сохранением прав перенести данные с /dev/sda7 на /dev/sdb7:

# cp -r -p /* /


Раздел монтировался по label, который забыли указать при создании раздела. Но не беда:

# tune2fs -L label /dev/sdb7


Кстати, желательно после каждой работы с разделами и винтами перечитывать их командой:

# partprobe


Также необходимо в /etc/fstab в опциях монтирования разделов вместо relatime указать noatime для уменьшения износа SSD-дисков.