Клонировать жесткий диск на диск меньшего размера
Клонирование жестких дисков в программе Clonezilla live — способ простого переноса системы на SSD
Причина популярности SSD понятна – эффективность апгрейда компьютера заменой механического диска на твердотельный чрезвычайно высока. Можно даже сказать, что после такой перестановки получается, как бы, новый, на порядок более быстрый, компьютер.
В силу того, что отнюдь не все счастливые обладатели SSD хотят или имеют возможность сделать свежую установку операционной системы, тема клонирования дисков, или отдельных дисковых разделов, является сегодня весьма актуальной.
Вопросы, связанные с установкой SSD в компьютер, рассматривались на страницах блога достаточно подробно в цикле статей с общим названием “Перенос Windows 7 на твердотельный диск небольшого объема”. На текущий момент времени эти статьи являются одними из наиболее популярных.
Они были написаны “по горячим следам” с сильным акцентом на маленький объем SSD. В них освещены практически все важные моменты, такие, как уменьшение занятого операционной системой места на жестком диске (часть 1), перенос профилей пользователей Windows на второй диск (часть 2, часть 3) и, наконец, настройка и оптимизация системы на твердотельном накопителе (часть 4).
А вот сам процесс клонирования жесткого диска в процессе переноса операционной системы на новый hdd или ssd, как таковой, оказался в тени. Это совершенно не оправдано и сегодня мы постараемся восполнить этот пробел с помощью программы, вернее, Live CD Clonezilla live.
Слово “простой” в заголовке имеет следующий смысл:
– клонирование дисков или разделов не будет сопровождаться никакими предварительными переносами каталогов и файлов, будь то профили пользователей или системные папки, на несвойственные им места, и прочими ухищрениями с целью освободить место на системном носителе;
— “простой” в смысле несложный в реализации и не затратный.
Настоятельно рекомендую прочитать предыдущую статью в которой описывается порядок создания резервных копий носителей с помощью Clonezilla live. В ней подробно разбираются особенности и интерфейс программы.
Нам понадобится загрузочное устройство с Clonezilla live. Как сделать загрузочную флешку описано, опять же, в предыдущей статье или можно посмотреть здесь.
Если перенос осуществляется с большего HDD на меньший, то очень желательно, но не обязательно, иметь еще одно устройство, на которое можно сделать бекап исходного диска.
Разберем следующие возможные варианты клонирования:
- на целевой диск такого же или большего размера;
- на целевой диск с объемом меньше исходного.
Если Вы прочитали предыдущую статью, то уже знаете, что Clonezilla не умеет разворачивать свои образы дисков на целевые диски меньшего объема. Прямое клонирование диска на диск меньшего размера также не поддерживается. Но это, как мы увидим, не такая уж серьезная проблема.
Внутри этих двух вариантов:
- клонирование накопителя целиком;
- клонирование отдельных разделов.
Для простоты изложения предположим, что исходный HDD имеет объем 250 ГБ, целевые, соответственно, 250ГБ, 350ГБ и, например, 120ГБ (будем условно считать, что это SSD).
Примем такую, достаточно типовую для “компьютера из магазинная” конфигурацию разделов на исходном накопителе с Windows:
- Системный раздел — “Зарезервировано системой”, NTFS, 100МБ (Windows 7) – 350МБ (Windows 8);
- Загрузочный раздел С:\ – основные файлы операционной системы + профили пользователей, NTFS, 125 ГБ;
- Дополнительный раздел (буква любая) – раздел в оставшейся части диска, 125 ГБ.
Конфигурация разделов на компьютере с Linux может быть, например, такой:
- Системный раздел, смонтированный в корень Linux “/”, Ext4, 15…35ГБ;
- Раздел под домашний каталог “/HOME”, Ext4, 205ГБ;
- Раздел подкачки “SWAP”, 10ГБ.
Клонирование дисков с Linux все же не так актуально, как Windows, в силу того, что он проще устанавливается, а пользовательские данные со всеми настройками программ переносятся вообще на раз и два.
Если соберетесь устанавливать Linux до того, как я наконец опубликую запланированную на эту тему статью, обязательно выделите под “/HOME” отдельный раздел.
В этой статье разберемся с клонированием всего содержимого накопителя, то есть без выделения дисковых разделов, а в следующей займемся клонированием отдельных разделов.
4. Перенос Volume Groups в LVM
Оказывается, где-то в формате LVM жёстко прописывается размер сектора. Поэтому вместо клонирования пришлось добавить новые разделы в Volume Group. Перенести информацию с помощью pvmove. Удалить старые разделы из Volume Group.
Но перед этих в настройках /etc/lvm/lvm.conf нужно раскомментировать возможность нахождения в одной VG дисков с разным размером сектора.
Объявляем раздел на новом физическом диске частью LVM-инфраструктуры:
Расширяем им Volume Group:
Переносим данные со старого диска на новый:
Удаляем старый диск из Volume Group:
▍ 1.1. Отмонтируем смонтированные файловые системы
Список смонтированных файловых систем проще всего посмотреть командой df .
Отмонтируем (по имени раздела или конечной папки):
Этап 1. Подготовка
Вот список того, что нам потребуется для переноса:
Клонирование диска на диск равного размера
Такой вариант может иметь место, если винчестер начал подавать первые признаки умирания, если есть несколько одинаковых компьютеров и надо быстро установить на них систему, наконец, если объем SSD совпал с объемом исходного HDD (сомнительно, конечно, что последнее может произойти).
Монтируем целевой диск в компьютер (его в этом случае специально подготавливать не нужно), устанавливаем загрузочное устройство с Clonezilla live и загружаем компьютер с него.
С вашего позволения я не буду повторять сделанных в прошлый раз описаний всех шагов загрузки. За исключением второго экрана — “Choice language”, на котором нужно выбрать предпочтительный язык интерфейса, все остальные проходятся простым нажатием на клавишу “Enter”.
1 – 4.
5. На пятом шаге нужно сделать выбор в пользу работы непосредственно с устройства на устройство:
Выбираем “device-device работать непосредственно с диска на диск или с раздела на раздел”;
6. Соглашаемся с уровнем “Beginner” (как мы уже выяснили в прошлый раз, ничего обидного в этом определении нет);
7.
В соответствии с поставленной в данном случае задачей, выбираем “disk_to_local_disk клонировать локальный диск на локальный диск”;
8. На этом шаге выбираем исходный диск. С их обозначением в операционной системе Linux мы разобрались в прошлый раз;
9. Выбираем целевой диск.
Хорошо бы тут ничего не перепутать.
Помнится, когда-то очень давно, я поздним вечером в одной из организаций закончил инсталляцию одного нового компьютера, а к утру их, как обычно, должно было работать уже несколько.
Оставалось выполнить клонирование готового жесткого диска на диски других компьютеров партии и … я бодро катанул чистый винчестер на только что подготовленный. Устал уже к этому моменту сильно. Обидно было… Нет слов. До сих пор помню.
Больше я себе такого не позволял никогда. И это точно была не Clonezilla – ее тогда еще и в помине не было.
10 . Проверку целостности исходного диска пропускаем. Убеждаемся еще раз, что все было выбрано правильно и два раза изъявляем желание начать операцию клонирования нажатием “y”.
Утвердительно отвечаем на вопрос нужно ли клонировать загрузчик на новый диск — в противном случае без дополнительных манипуляций система с клонированного накопителя не загрузится.
Еще раз подтверждаем серьезности намерений и если с исходным и целевым дисками все в порядке процесс начинается. Остается дождаться его завершения, выключить компьютер и удалить из него исходный накопитель.
Вот так все просто.
▍ 3.3. Windows 10 и Windows 7
Windows 10 после коррекции NTFS заработала отлично.
А вот Windows 7 мне не удалось заставить работать. Совсем. Видимо при установке куда-то в неё записывается размер сектора диска и она выдаёт самые разнообразные ошибки, но не хочет работать, если он изменился.
Для корректного перенесения Windows 7 я попробовал использовать xcopy и robocopy с ключами для копирования всех прав. Но это не помогло. Windows 7 так и не смогла запуститься.
Этап 2. Миграция
Глотнём кофе и приступим к процессу переноса с запуска системы с подготовленного Live CD дистрибутива. Затем откройте терминал и перейдите в режим суперпользователя при помощи команды su -
Далее в данном руководстве предполагается, что все команды выполняются от имени суперпользователя ( root )
▍ 1.5. А что насчёт TRIM?
Можно попробовать увеличить скорость клонирования, если перед клонированием сделать TRIM целого диска-приёмника.
Или одного раздела.
После клонирования (простыми программами типа dd , pv , cat ) можно тримнуть склонированную файловую систему. Но делать это нужно лишь после того, как диск-источник удалён, а склонированная ФС подмонтирована.
Если вы дата-параноик, то не делайте этого, так как потом не сможете с диска восстановить удалённые файлы.
Естественно, ваш диск должен поддерживать TRIM. Многие корпоративные накопители его не поддерживают, так как для у них достаточно резервного пространства и не нужны непредсказуемые задержки от TRIM.
Рейд-массивы тоже, как правило, TRIM не поддерживают, так как содержание ячеек после TRIM по стандартам не определено, а рейд-массиву нужно считать контрольные суммы.
Манипуляции с TRIM перед/после клонирования вряд ли дадут какой-то существенный выигрыш, но хуже точно не будет.
Клонирование диска на целевой диск большего размера
Клонирование целого диска на целевой диск большего размера по технологии совершенно ничем не отличается. В результате такого клонирования на целевом носителе будут созданы разделы в полном соответствии с исходными, а в конце появится незанятое место.
Так если исходный накопитель был объемом 250 ГБ, то на целевом объемом 350 ГБ появится “лишние” 100 ГБ. Как с ними поступить зависит от конечной цели – можно создать новый раздел, или увеличить размер последнего.
Увеличить размер раздела за счет нераспределенного места на жестком диске можно так.
В Windows проще всего для этих целей воспользоваться графическим интерфейсом программы “Расширенное управление дисками” (“Управление компьютером” –> “Управление дисками”).
Так как иллюстрации делались в гостевой машине Windows 7 VirtualBox, размеры дисков уменьшены в 10 раз, по сравнению с условными соглашениями в начале статьи (за исключением первого раздела 100 МБ).
Все операции можно осуществлять в клонированной системе. В данном случае исходный “Диск 0” оставлен для наглядности.
Предположим, что мы хотим за счет незанятой части накопителя увеличить раздел DATA (H:). Через меню “Действие” или из контекстного меню (по правой кнопке мыши на DATA (H:)) выбираем “Расширить том”. Запустится “Мастер расширения тома” в котором все достаточно очевидно – надо лишь выбрать на сколько увеличить раздел. Увеличиваем на весь объем “Не распределен”.
Так будут выглядеть разделы целевого «Диск 1» после завершения работы мастера.
Для работы с разделами в среде Linux существует довольно продвинутая программа GParted.
Те, кто не имеют установленной системы Linux, могут, тем не менее, воспользоваться GParted с Live CD Parted Magic, о котором я упоминал в прошлый раз.
Эта программа может оказаться незаменимой если, например, нужно задать правильное смещение для уже существующего раздела Windows.
Работу с разделами в GParted нужно начать с выбора нужного накопителя (если их несколько, как в нашем примере).
Выбираем раздел, размер которого предполагается изменить за счет свободного места (/dev/sdb3), нажимаем “Resize/Move”, устанавливаем максимально возможное значение “New size (MiB)”, соответственно, значение “Free space following (MiB)” должно стать равным нулю. Нажимаем “Resize/Move” в этом окне и затем “Apply” в основном.
Через некоторое время процесс будет завершен и из программы можно выйти.
Шаг 5. Последний штрих
На данном этапе все данные уже должны быть перенесены и новый диск должен стать загрузочным. Нужно только перезапуститься, вынуть Live CD из привода, и выбрать новый диск в BIOS для загрузки:
Если что-то пошло не так и система не загружается, вы всегда можете "откатиться" на старый диск, просто запустившись с Live CD повторно и переименовав LVM-группы обратно, выполнив vgrename -v main и vgrename -v main , и затем снова перезапуститься.
На этом обязательная часть программы окончена и мы успешно перенесли работающую систему на новый диск. Старый диск можно извлекать из компьютера.
1. Клонирование
Клонирование исходного диска на целевой диск
▍ 1.3. Клонирование стандартными утилитами
Вначале я просто склонировал один диск на другой.
Классический способ это:
Хотя, лично я предпочитаю вот такой:
Программа pv показывает полосу копирования, текущую скорость, ожидаемое время и использует/подбирает размер блока для более быстрого копирования.
Если на системе нет ни pv , ни dd то можно использовать cat :
В этом случае тоже будет всё скопировано быстро, то без всяких плюшек типа полосы копирования. Некоторые админы шаманского типа считают, что cat — самая оптимизированная прога для копирования потоков данных и поэтому делают так:
Сочетают оптимизированность cat и плюшки pv . По моим прикидкам достаточно pv . Я не смог увидеть какого-то существенного выигрыша.
Также можно клонировать разделы по отдельности. В конечном итоге мне так и пришлось сделать, так как всплыло несколько проблем (о них ниже).
Вышеперечисленные способы клонирование, естественно, работают когда источник (source) по размеру меньше или равен назначению (target).
Вообще во многих случаях клонировать удобно используя флэшку с Clonezilla. Но, как выяснилось, она не может корректно отработать случай с клонированием с 512B диска на 4КiB-диск. Хотя в остальном Clonezilla хороша. Она умеет клонировать только занятые сектора, что существенно экономит время.
5. Клонирование раздела c BTRFS
Прошло отлично. Никаких коррекций загрузочных секторов не потребовалось.
Шаг 2. Разбивка диска на разделы
Вы можете использовать вашу любимую утилиту для этого. Например, в Gnome есть предустановленная утилита для управления дисками. Также в интернетах хвалят gparted , однако я намеренно использовал fdisk , т.к, например, gparted просто не распознавал мой NVMe SSD-диск.
Диск следует разбить по образу и подобию прежнего диска. Я не маньяк партиционирования, поэтому моя схема партиционирования была стандартной:
- /boot — стандартный раздел размером 1GB;
- swap раздел размером 4G;
- / — корневой раздел, LVM volume group с наименованием "main", занимающий оставшееся пространство на диске.
Итак, приступим к разбивке нового диска:
Раздел /boot должен быть стандартным линукс-разделом, поэтому сразу создаём файловую систему на нём:
И теперь нам необходимо создать LVM-структуру для второго раздела на диске. Назовём новую LVM-группу newmain (впоследствии переименуем):
Теперь мы готовы к созданию файловой системы на новых логических разделах:
Клонирование разделов
- Запускаем утилиту и переходим на вкладку «Инструменты».
- Нажимаем «Клонировать диск».
- Выбираем ручной перенос разделов.
- Указываем исходный диск — с него будут переноситься данные.
- Указываем конечный диск — новый накопитель, на котором мы только что создали простой том.
- Выбираем клонирование разделов без изменений. Это нужно, если мы переносим диск с Windows и хотим, чтобы система затем запускалась с нового накопителя.
UPDATE 02.04.2018
Так как мы производили перенос системы на SSD, то, как советуют в комментариях, хорошо бы уже после переноса в работающей системе включить периодическое исполнение команды trim (сборщик мусора для SSD-дисков, который позволяет не терять в производительности через время). Для этого необходимо выполнить команду:
Это включит на новой системе исполнение trim раз в неделю на любой systemd системе. В случае, если вы или ваша система не используете systemd , есть исчерпывающее руководство от DigitalOcean на почти любой случай.
Пожалуйста, оставляйте ваши комментарии, если нашли ошибку или знаете способ лучше как выполнить те или иные действия. Надеюсь, данная инструкция окажется вам полезной!
Для современного компьютера диск с 4К сектором выглядит предпочтительнее, чем с олдскульным 512B. Так как почти все современные ФС имеют размер кластера по-умолчанию 4KiB или больше. Поэтому использование 512B сектора несколько снижает производительность, а также увеличивает коэффициент умножения записи (Write Amplication) у SSD, что уменьшает ресурс.
Более того, сложно найти современные диски более 4ТБ с сектором 512N. Если диск и рапортует сектор в 512 байт, то, как правило, это 512E — эмулируемый, который используется в основном для совместимости со старыми контроллерами. А в реальности на физическом уровне используется 4К или даже больше (больше в основном у SSD).
Поэтому при покупке нового диска я выбрал диск с сектором 4КiB. И передо мной встала задача клонирования старого диска с 512B сектором (GPT) на новый c сектором 4KiB. Я хотел сохранить установленные Linux, Windows 10, Windows 7 и тома LVM, чтобы не заниматься переустановками ОС. В процессе чего всплыло несколько подводных камней.
Начну с того, что всем советую загрузочные диски (как и прочие, которые >= 2ТБ) делать в разметке GPT. Ибо это очень удобно.
Для GPT-дисков уже не нужна магия хитрых загрузчиков, которые записываются в MBR и многоступенчатым образом загружают вначале себя, а потом и операционную систему.
Достаточно записать загрузчик в специальный EFI-раздел, указать в биосе, что мы хотим загружать именно этот загрузчик и всё. Если биос неудобный или с усеченным функционалом, то я использую программу Hasleo EasyUEFI.
Итак, вернёмся к моей задаче. У меня на диске стоят в мультизагрузке :
- Calculate Linux (btrfs)
- Windows 10 LTSC (ntfs)
- Windows 7 (ntfs)
Клонирование целого накопителя на целевой накопитель меньшего размера
Как вы наверное уже догадались, клонировать целый исходный диск в таком варианте на диск меньшего размера не получится. Clonezilla не умеет на ходу менять размеры разделов.
Это совершенно не трагедия, “Нельзя” относится именно к такому способу клонирования, но никто не мешает достичь заданной цели клонирую отдельные разделы. Клонированию жестких дисков на диски меньшего объема, что характерно для твердотельных накопителей SSD, в программе Clonezilla посвящена следующая статья.
▍ 1.4. Таблица разделов
Из-за того, что 4К-сектор больше в 8 раз, чем 512B потребуется после клонирования ещё изменить таблицу разделов. Так как разделы задаются в секторах. Это можно сделать вручную по раздельно с помощью gdisk , а можно использовать sfdisk .
В таблице которую показывает gdisk (внутренняя команда p ) можно увидеть что-то подобное:
Мы видим размер логического и физического секторов, а также в таблице есть начальные и конечные сектора. Стартовый сектор нам достаточно разделить на 8, чтобы получить номер сектора для 4К-диска, а вот конечный сектор считает по чуть более сложной формуле. Мы прибавляем 1, делим на 8, и вычитаем 1. В консоли выполнить вычисления можно так:
Или примерно так:
Можно отредактировать все разделы оптом. Мы записываем таблицу разделов в файл, а потом редактируем его.
И заливаем заново на диск:
После любого изменения таблицы дисков желательно дать ядру знать об этом командой:
6. Заключение
Как мы видим сложности возникают при клонировании EFI-раздела, NTFS-файловых систем, а также Volume Groups от LVM. Но они решаемые.
Благодарности
— За изображение спасибо TripletConcept. Его лучше смотреть в полном размере в отдельном окне.
▍ 3.1. Пересоздаём загрузочный сектор NTFS c помощью программы TestDisk
Прекрасная программа, которая есть как под Windows, так и в большинстве репозиториев Linux. В данном случае опция «Rebuild BS» выручает, но и она не всегда корректно работает.
Проблема в том, что эта функция работает исходя из битовой карты и $MFT. Для целей восстановления данных — это хороший подход, но для клонирования лучше просто пересчитать NTFS boot sector. Чтобы не делать это руками, я написал скрипт, о котором ниже.
2. Клонирование EFI-раздела.
Вот тут и подстерёг меня первый подводный камень. На дисках с сектором 512 байт размер EFI раздела составляет около 100М. Но мы не можем просто склонировать этот раздел на конечный диск. Потому как для EFI-раздела есть требование, что число секторов в нём должно быть не менее 65527.
Для расширенного формата дисков объемом в машинном формате (4 КБ на сектор) минимальный размер составляет 260 Мб из-за ограничения формата файла FAT32. Минимальный размер раздела для дисков FAT32 вычисляется как размер сектора (4 КБ) x 65527 = 256 МБ.
Это ограничение не затрагивает диски расширенного формата 512e, так как их размер эмулированного сектора составляет 512 байт. 512 байт x 65527 = 32 МБ, что меньше, чем минимальный размер в 100 МБ для этой секции. Документация Microsoft.
У меня раздел на старом диске был как раз около 100МБ. Поэтому мне пришлось вначале создать структуру разделов с увеличенным EFI-разделом на диске-приёмнике, а потом клонировать каждый раздел в отдельности.
Соответственно, на диске-приёмнике я создал EFI-раздел размером 270МБ. Отформатировал его, а потом скопировал все файлы со старого раздела на новый.
Создание FAT32 на разделе 4К-диска:
Монтируем старый и новый EFI-разделы:
Копирование файлов загрузчиков со старого EFI-раздела на новый:
Клонирование диска по сети на удаленный компьютер
В заключении необходимо коротко упомянуть о том, что Clonezilla позволяет выполнять клонирование накопителей по сети.
Не могу с ходу сообразить, кому это может понадобиться, но в практике всякое бывает. Например, есть быстрая сеть, и нужно клонировать накопитель на сильно удаленный компьютер.
Для этого нужно загрузить исходный компьютер с Live CD Clonezilla и на соответствующем шаге выбрать вариант:
«disk_to_remote_disk клонировать локальный диск на удаленный диск«.
Далее последует выбор исходного (клонируемого) накопителя и переход в ожидание сетевого соединения.
Целевой компьютер также нужно загрузить с носителя Clonezilla live, но не запускать на нем программу, а сразу перейти к командный режим.
Далее на целевом компьютере нужно выполнить команды, представленные на экране исходного компьютера.
В случае успешного сетевого соединения можно запустить процесс удаленного клонирования. Времени на такое клонирование потребуется больше, чем в случае операций с локальными носителями. Оно будет целиком зависеть от скорости сетевого соединения. Но, возможно, в ряде случаев это окажется вполне оправданным.
В следующий раз мы рассмотрим клонирование отдельных разделов жесткого диска, в том числе, с уменьшением их размеров, при необходимости. Этот вариант в большей степени подойдет для переноса операционной системы на твердотельный накопитель, так как емкость целевого SSD, как правило, меньше емкости исходного механического HDD.
Всем привет. Никогда не мигрировал с UEFI. Поставил миграцию через Paragon Migration OS/ Вроде запустилась миграция, после завершения подключаю в основной sata ssd с мигрированой OS но система ругается и максимум позволяет только загрузить встроенное в uefi ПО.
Подробности HDD на 1Тб с системой в GPT разметке(занято 45Гб), хочу перенести на ssd 128Гб.
Или может поставить систему на ssd и далее перекопировать раздел винды с старого жёсткого?:
- Вопрос задан более года назад
- 4893 просмотра
Средний 1 комментарий
Те совместить с прошлым советом? Уменьшаю системный далее стандартной утилитой? резервирование если память не подводит не позволяет делать на тот же хард. у меня в распоряжении два носителя вышеуказаных в моноблоке те на тот что пытаюсь перенести поодрублен через сазалку в порт дисковода. на старом да UEFI был, если стоялобы MBR давно бы решил тк опыта много а uefi не знаю как
Воспользуйтесь стандартной утилитой создания образа винды. (Резервное копирование и восстановление). Сделайте копию и восстановите её на ссд.
- Сжать системный том чтобы он поместился на SSD.
- После чего клонировать его любой утилитой.
если нет специфического долгонастраиваемого софта - проще всего поставить заново (затраченое время в пределах полутора часов), ось может "задуматься" и не заметить переход на ссд - работающая дефрагментация, prefetch и многие другие радости hdd унесут в мир иной сей твердотельник достаточно быстро.
Сперва на диске очистить место на С, чтоб было по размеру SSD. Лучше не менее 70% от емкости SSD.
Затем взять AdminPE, сделать флешку с ним с помощью Rufus.
Загрузиться с флешки.
С помощью MiniTool PartitionWizard сжать до минимума раздел С + 5 гб, с помощью Image For Windows клонировать.
Выключить комп. Отключить HDD.
Если нужно HDD оставить - учтите - при загрузке винды, если есть одновременно оба клона - могут начаться непередаваемые и впоследствии неустранимые спецэффекты, поэтому убедившись, что все прошло удачно - грохните копированные разделы на HDD тем же MiniTool или Fdisk.
ЗЫ. Обязательно - объясните системе, что теперь не HDD, не надо делать дефрагментацию и надо использовать TRIM. Это просто - в командной строке: winsat disk
После клонирования - разверните размер тома С на весь SSD в диспетчере дисков.
С переносом данных на аналогичный HDD или накопитель большего объёма всё понятно. А вот у клонирования на меньший диск есть несколько нюансов, на которые нужно обратить внимание. Посмотрим, как это делается с помощью программы Acronis True Image.
Распределение пространства
- Кликаем правой кнопкой по разделу G, который нам не нужен. Выбираем опцию «Удалить том».
- Кликаем правой кнопкой по системному диску и выбираем опцию «Расширить том».
- В мастере расширения указываем увеличенный объём. После удаления тома G доступно 1,9 Гб. Выберем полный объём нераспределённого пространства.
- Нажимаем «Готово» для применения конфигурации.
Привет, Хабр! Представляю вашему вниманию русскоязычную версию статьи "Migrating CentOS system from HDD to smaller SSD on XFS filesystem" автора Denis Savenko.
Данная статья является русскоязычной версией ранее мной же опубликованной статьи на английском языке с небольшими корректировками на аудиторию. Сразу оговорюсь — я не являюсь маньяком линукса или даже профессиональным системным администратором, поэтому вполне вероятно, что порой я мог использовать необычные, или даже глупые решения. Я буду очень благодарен вам, если вы укажете мне на них в комментариях, чтобы я мог улучшить данное руководство вместо того, чтобы просто заминусовать статью. Заранее вас за это благодарю.
Я думаю я не один, кто в какой-то момент решил преобрести себе SSD-диск для работающей системы. В моём случае это была работающая система на CentOS 7 на моём крошечном домашнем сервере. Далее я хотел перенести её "как есть" на новый диск. Но, как оказалось, это не так то просто сделать, учитывая следующее:
- Новый SSD диск был гораздо меньшего объёма, чем уже установленный HDD (серьёзно, SSD всё ещё весьма дорог по сравнению с дисковыми накопителями).
- Разделы на прежнем диске были отформатированы в файловой системе xfs . Это и не удивительно, учитывая тот факт, что CentOS, начиная с 7-ой версии предлагает эту файловую систему "по умолчанию" (наряду и с другими системами на основе RHEL, такими как, собственно, Red Hat Enterprise Linux 7, Oracle Linux 7 или Scientific Linux 7).
- Работающая система должна остаться без изменений, включая конфигурацию, установленное ПО, права доступа и прочие атрибуты файловой системы.
Позвольте мне пояснить, почему описанные мной выше вещи являются серьёзными усложнениями поставленной перед нами задачи.
Затем, если бы использовалась файловая система, отличная от xfs , например, достаточно популярная ext4 , можно было бы "сжать" старый раздел диска до размеров нового диска. Затем выполняются какие либо действия из описанных выше и вы в дамках. Однако, изменение размера разделов в сторону уменьшения на xfs невозможно в силу её реализации — вы можете только увеличить разделы при её использовании.
И последнее, но ничуть не менее важное, если бы перед нами не стояло задачи перенести работающую сконфигурированную систему с сохранением всех метаданных, было бы проще просто установить систему с нуля на новый диск, заранее сохранив пару важных файлов. Это не подходило мне по двум причинам — во-первых волосы становились дыбом при мысли, что мне придётся повторить все те же действия, которые я выполнял на протяжении нескольких дней кряду, а во-вторых — это просто не спортивно. Я был уверен, что при должном понимании технических особенностей, перенос работающей системы на другой диск не должен был быть невыполнимой задачей.
Тем не менее, я выработал и оттестировал как минимум на двух различных окружениях подробный пошаговый план переноса работающей системы, берущий во внимание все вышеописанные ограничения.
▍ 3.4. Скрытые разделы Windows
Если посмотреть вывод gdisk , то мы увидим кроме основного раздела Windows ещё 2 скрытых раздела с кодами 2700 и 0C01, размерами примерно 500MiB и 16MiB.
Код 2700 соответствует разделу со средой восстановления. Этот раздел отформатирован в NTFS. Поэтому с ним поступаем как и было объяснено выше.
Посмотрим размер сектора, который зашит с помощью ntfsinfo и скорректируем, если нужно.
А вот с разделом с кодом 0C01 (обозначение «Microsoft reserved» в gdisk ) оказалась какая-то странность. На всех компьютерах, где я его смотрел, он не имел никакой файловой системы и был заполнен нулями. Поэтому я просто склонировал его dd .
▍ 1.2. Отключаем активные Volume Groups в LVM
Иначе это может привести к непредсказуемым последствиям, так как ядро может запутаться — будет две одинаковые Volume Groups и на какую-то из них ему нужно писать данные.
Классические способы ( dd , cat , pv ) прекрасно подходят для клонирования LVM-разделов, если диски имеют одинаковый размер сектора. Но в моём случае после клонирования ими LVM-раздел не запустился. Оказалось, что в него всё-таки жёстко вшит размер сектора. Ниже я расскажу, как это обошёл. vgchange делать не пришлось.
3. Клонируем разделы с NTFS
Поскольку по умолчанию размер кластера у NTFS равен 4К, то я думал никаких проблем не возникнет. Как же я ошибался!
NTFS спроектирована неидеально. Она выходит за пределы своего уровня абстракции, совершает access violation, о которых говорил Эдуард Шишкин (разработчик ReiserFS 4) в своём интервью. А именно непонятно, зачем в первый сектор NTFS записан размер сектора физического диска, размер NTFS в секторах, число скрытых секторов.
Посмотреть информацию об NTFS под Linux:
Из-за того, что в NTFS жёстко зашит размер сектора, разделы в Windows, в диспетчере дисков, отображаются как «RAW». И недоступны для чтения.
Что интересно, размер сектора диска совершенно безразличен Linux-драйверу ntfs-3g . Разделы NTFS под Linux прекрасно видны даже после клонирования 512B -> 4KiB.
Решать проблему «RAW» можно несколькими способами.
На текущий момент ни одна утилита для клонирования не умеет корректно клонировать NTFS-разделы между дисками с разным размером сектора, в том числе Clonezilla. Единственная программа, которая анонсирует эту функцию — это HdClone. Но она это делает топорно и не совсем верно, что лучше использовать мою самописную утилиту.
Вдохновившись анонсированной функций клонирования с 512 на 4К я решил попробовать эту прогу. Но в бесплатной версии не было функции клонирования отдельных разделов. Мне было жалко платить 20 евро и решил найти хакнутую программу. Нашёл. Проверил 10 антивирусами. Всё ОК. Запустил. И на всех моих дисках была испорчена $MFT. Я пока ещё не разобрался были ли они зашифрованы или просто испорчены, так как никакого требования не было оставлено.
Если вы хорошо владеете отладчиком и сможете разобраться с тем, что именно произошло, жду вас в личке для взаимовыгодного сотрудничества.
Потом я уже ради чистоты эксперимента я использовал официальную версию. И что? Она склонировала NTFS-раздел некорректно. Не заполнила NTFS backup boot-сектор. И, насколько я помню, chkdsk увидел ошибки на NTFS-разделе после клонирования.
Шаг 4. Делаем новый диск загрузочным
Первое, что нужно сделать, это узнать UUID для старого и нового загрузочных разделов ( /boot ) при помощи команды blkid :
Предполагая, что sda1 — прежний раздел \boot , и nvme0n1p1 — новый, производим замену UUID в конфигурационных файлах на новой точке монтирования:
Эти две команды подготовят ваши системные файлы конфигурации к новому диску.
Теперь самое время переименовать LVM-группы и отмонтировать диски:
Единственное, что осталось сделать, это переустановить загрузчик. Это необходимо делать с использованием chroot :
Подготовка диска
- На Windows 10 кликаем правой кнопкой по меню «Пуск» и переходим в раздел «Управление дисками». На предыдущих версиях Windows нужно пройти путь «Панель управления» — «Администрирование» — «Управление компьютером» — «Управление дисками».
- Находим внизу подключенный диск. На нём должно быть нераспределённое пространство. Кликаем по нему правой кнопкой мыши и выбираем создание простого тома.
- В мастере создания указываем объём нового раздела. Сделаем его на весь диск.
- Назначаем букву. Выбираем литеру, которая не присвоена другим разделам.
- Указываем файловую систему NTFS. Оставляем режим быстрого форматирования.
- Проверяем конфигурацию и нажимаем «Готово» для создания простого тома.
Шаг 3. Активная фаза
Прежде чем мы начнём, сделаем обе LVM-группы активными (т.к. мы работаем из под Live CD):
Создадим директории для точек монтирования, и примонтируем к системе старые и новые разделы наших дисков:
Убедимся, что всё в порядке при помощи команды lsblk :
Если вы видите что-то наподобие этого, вы всё сделали верно. И здесь начинается настоящая магия — мы собираемся использовать xfsdump для миграции наших данных. Эта утилита достаточно умная и знает о внутреннем устройстве файловой системы xfs , что позволяет ей копировать только занятые данными блоки, что, в свою очередь, во-первых позволяет нам копировать данные на диск меньшего размера, а во-вторых сильно ускоряет процесс переноса. Итак, давайте сделаем дамп данных при помощи этой утилиты, и на лету развернём эти данные на новом месте:
Пару слов об использованных флагах:
- -J уменьшает размер фидбека;
- - сообщает xfsdump и xfsrestore использовать стандартные потоки stdout и stdin соответственно вместо файлов.
Эта процедура может занять некоторое время (зависит от объёма ваших данных). Поэтому здесь вам пригодится приготовленная заранее чашка кофе, которую самое время выпить, а то остынет.
Шаг 1. Разрешение удалённого доступа (опционально)
Для меня удобнее иметь удалённый доступ к машине, на которой я буду производить перенос, т.к. я имею возможность просто копипастить заранее подготовленные команды в свой PuTTY терминал. Если вы загрузили это руководство в браузере на целевой машине, смело переходите к следующему шагу — всё, здесь описанное, вам не понадобится.
Для того, чтобы разрешить удалённый доступ, необходимо задать пароль для пользователя root и запустить SSH демон:
Теперь можно подключиться к целевой машине вашим SSH клиентом (например, PuTTY).
Использование старого HDD в качестве медиа-хранилища
Если вы, как и я, после переноса системы, хотите использовать ваш прежний диск как медиа-хранилище, это делается также легко.
Во-первых, переразбейте прежний диск
Мы не станем создавать файловую систему на диске напрямую. Вместо этого мы создадим новую LVM-группу, в которую добавим этот диск. Это позволит нам в будущем легко добавлять новые диски в эту группу без лишней мороки (логический диск при этом останется прежний):
Для того, чтобы сохранить изменения после перезагрузки системы, следует также добавить запись о точке монтирования в /etc/fstab :
Готово!
Теперь можно утверждать, что мы успешно перенесли работающую на xfs систему на новый диск меньшего размера. Как бонус, мы начали использовать прежний диск в качестве медиа-хранилища.
▍ 3.2. Моя утилита ntfs_512_to_4k
Вооружившись описанием формата NTFS boot-сектора, я написал свою утилитку для его модификации после клонирования.
Естественно, я полностью отказываюсь от любой ответственности, если вы будете её использовать. Однако мне она помогла. Вот репозиторий на GitHub.
Примеры использования:
Показать информацию из загрузочного сектора NTFS и его копии.
Переделать информацию в загрузочных секторах NTFS из 512 в 4К-секторы (после клонирования)
Откатить изменения в загрузочных секторах с 4К на 512B-сектора
Но есть одна тонкость. Backup NTFS boot сектор хранится в последнем секторе раздела. А точнее в первых 512 байтах последнего сектора. Что даёт его разное положение в зависимости от размера сектора. Поскольку я не был уверен, что в последних 8 секторах нет никакой важной информации, то перед использованием своей проги я немного уменьшил размер NTFS-фс, применил свой скрипт, а потом опять её увеличил. Вот так это выглядело:
Читайте также: