2020-04-26

Robocopy: Копирование ОС Windows на другой диск

Перенос операционной системы Linux с одного жесткого диска на другой, можно выполнить встроенными средствами, по сути, обычным копированием файлов. Можно ли провернуть подобный трюк с операционной системой Windows? Давайте проверим.



Содержание




Перенос Windows Копированием


Устанавливая любую операционную систему на диск, в действительности, происходит копирование ее файлов в указанный раздел. Установленные файлы, соответственно, могут иметь свои права доступа, и дополнительные права, в зависимости от нужд самой операционной системы и политик ее безопасности.

Запуск установленной операционной системы осуществляется загрузчиком. Загрузчик считывает с раздела, на котором установлена операционная система, ее ядро, и выполняет его запуск. Запущенное ядро операционной системы, выполняет дальнейшее считывание и использование файлов с текущего раздела (т. е. своих файлов), осуществляя тем самым, полную загрузку операционной системы.

Учитывая все вышесказанное сказанное, очевидно, что любая операционная система, представлена файлами. И для осуществления переноса операционной системы, достаточно корректно перенести все ее файлы на другой диск, а точнее его раздел, и соответствующим образом настроить на нем загрузчик.

Под словом "корректно", понимается полное копирование прав доступа, и дополнительных атрибутов безопасности, характерных используемой файловой системы.


Необходимый Софт


Для осуществления выше задуманного, потребуется лишь установочный диск Windows 10. Получить свежий образ Windows 10, или сразу же создать установочную флешку, можно с помощью официальной программы MediaCreationTool.


Скачать ее можно по ссылке  https://www.microsoft.com/ru-ru/software-download/windows10.


Весь список доступных дистрибутивов расположен по ссылке https://www.microsoft.com/ru-ru/software-download.




Копирование Файлов Windows


Все основное действие, для наглядности, будет проходить в VirtualBox. И все что описано ниже, полностью работает на реальных машинах соответственно.

Итак, у нас есть виртуальная машина с корректно установленной (с установочного диска) ОС Windows 10.


Расположена она на виртуальном жестком диске Win10.vhd.


Добавим к данной виртуальной машине новый виртуальный жесткий диск NewHDD.vhd, впоследствии на который будет перемещена установленная ОС.


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


Теперь все готово к переносу системы. Выполним запуск виртуальной машины, с установочного диска Windows.


При появлении начального экрана установки, нажимаем сочетание клавиш SHIFT+F10. Откроется командная строка.


Теперь нам необходимо разметить новый жесткий диск (NewHDD.vhd). Запускаем diskpart.


Выведем список дисков системы (list disk), чтобы определить под каким номером расположен новый.


Новый диск ожидаемо расположился под номером 1. Это легко можно понять по его размеру, и наличию свободного пространства. Выбираем данный диск командной select disk 1.


Теперь, когда новый диск выбран, выполним его разметку. На новом диске необходимо будет создать три раздела.

100 МБ - FAT32 раздел для загрузчика UEFI.
16 МБ - MSR раздел для нужд системы.
500 МБ - NTFS раздел для среды восстановления (опционально). В моем случае, я его создавать не буду. 
Все остальное пространство - NTFS раздел для копируемой системы.

Определившись с разметкой, выполняем следующую последовательность команд:

rem Очистка диска
clean

rem Установка таблицы разделов GPT 
convert gpt

rem Создаем 100 МБ EFI раздел
create partition efi size=100

rem Форматируем созданный ранее раздел в FAT32
format fs="FAT32" quick label="EFI"

rem Создаем 16 МБ MSR раздел
create partition msr size=16

rem Создаем раздел объемом всего оставшегося пространства
create partition primary

rem Форматируем созданный ранее раздел в NTFS
format fs="NTFS" quick label="SYSTEM"

rem Монтируем отформатированный раздел под любой свободной буквой
assign

rem Выводим тома системы, чтобы посмотреть присвоенную букву
list volume


Разделы созданы. Основной раздел, в который будет копироваться операционная система Windows, смонтирован под буквой E:\.

Выходим из dispkart набрав команду exit.

Перейдем к копированию системы. Учитывая специфику задуманного копирования, потребуется не просто инструмент способный копировать файлы, на подобии команды copy, но и позволяющий скопировать все возможные атрибуты и права доступа. К таким программам можно отнести две, из тех, что присутствуют в среде предустановки WinPE, это xcopy и robocopy.

Обе они умеют копировать дополнительные права и атрибуты файловой системы NTFS, но у robocopy есть ряд преимуществ по сравнению с xcopy.

Xcopy, как выяснилось в ходе тестов, пропускает права каталогов и символических ссылок. Это явное, что сразу попалось на глаза. Но, тем не менее, система скопированная с помощью xcopy успешно запустилась.


Robocopy не имеет недостатков присущих xcopy. Он полноценно передает атрибуты и права доступа всех возможных элементов файловой системы при копировании. И кроме этого, имеет очень удобные средства логирования проделанной работы.





Определившись с программой копирования, коей будет robocopy, приступим собственно к копированию операционной системы.

rem Копирование всех файлов с раздела C:\ в раздел E:\
robocopy C:\ E:\ /E /COPYALL /DCOPY:DAT /SL /XJ /R:5 /W:5 /UNILOG:"E:\robocopy.log" /TEE


Вышеописанная команда, запустит копирование всех файлов, каталогов и подкаталогов с диска C:\ на диск Е:\ (ключ /E), включая пустые каталоги. Кроме этого, будут скопированы все права доступа и атрибуты файлов (ключ /COPYALL), и каталогов (ключ /DCOPY:DAT). При встрече символических ссылок, будет скопирована сама ссылка, а не файл расположенный по ссылке (ключ /SL).

При возникновении ошибок, программа выполнит 5 попыток скопировать файл/каталог заново (ключ /R:5) и будет ожидать по 5 секунд между попытками (ключ /W:5).

Кроме всего прочего, программа будет вести лог происходящего в формате UNICODE (ключ /UNILOG:"E:\robocopy.log"), и дублировать его вывод на экран (ключ /TEE).

И наконец, избежать возникновение ошибки robocopy 1920 поможет ключ /XJ.

Значение всех указанных выше ключей можно посмотреть в справке по команде (robocopy /?).


Процесс копирования может затянуться на некоторое время, и будет зависеть от количества и размера файлов.

Кроме этого, в процессе копирования возможны ошибки. При появлении оных, обращаем внимание на расположение файла и его размер.


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

Что похоже на то, что это "не скачанное" приложение из магазина. Учитывая, что это локальное приложение пользователя,  его отсутствие не повлияет на работу всей системы в целом.

Если по какой-либо причине вы упустили вывод команды, то на целевом диске (тот, на который производилось копирование), в корне, будет лежать лог файл robocopy.log, в котором будет отражено все что происходило на экране.

В конце, программа выдаст статистику проделанной операции.


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


После чего можно перейти к установке загрузчика.


Установка Загрузчика


Включаем виртуальную машину, и снова загружаемся с установочного диска. Открываем командную строку и заходим в diskpart.


Выведем список томов диска, чтобы узнать номер EFI тома (list volume).


Узнав номер тома EFI раздела (в моем случае том номер 2), выполняем присвоение ему буквы, то есть осуществляем его монтирование.

rem Выбираем том номер 2
select volume 2

rem Монтируем том
assign

rem Узнаем букву смонтированного тома 
list volume


В моем случае, EFI раздел был смонтирован под буквой E:\. Так же обращаем внимание на то, что раздел со скопированной ОС Windows уже подключен под буквой C:\. Эта информация нам так же понадобится далее. Выходим из diskpart.

Подключив EFI раздел, выполним установку в него UEFI-загрузчика Windows.

rem Установка UEFI-загрузчика Windows
bcdboot C:\Windows /s E: /f UEFI


Загрузчик установлен. Осталось только проверить работу скопированной системы.

Подробнее по теме восстановления загрузчика можно почитать здесь https://www.bootdev.ru/2019/05/Repair-Windows-Bootloader.html.


Установка Среды Восстановления


Подобное уже рассматривалось ранее, поэтому просто приведу ссылку на данный материал https://www.bootdev.ru/2019/05/Install-Windows-Recovery-Environment.html.


Запуск Скопированной Системы


Выключаем виртуальную машину, и извлекаем установочный диск.


Запускаем машину. Без каких либо ошибок, попадаем на экран входа в Winodws.


Загружаем рабочий стол. Открываем информацию о дисках. И видим, что текстовый файл на своем прежнем месте.


Лог файл копирования, созданный robocopy, как и требовалось расположен в корне диска.


В нем можно посмотреть ошибки файлов которые не были скопированы, выполнив поиск по слову "ошибка".


В моем случае, все ошибки были связаны с нулевыми исполняемыми файлами, в профиле пользователя.

На этом перемещение операционной системы Windows на другой диск, путем копирования ее файлов, с помощью robocopy, можно считать завершенным.


Итог


В статье было рассмотрено: Как переместить операционную систему Windows копированием файлов? Как скопировать операционную систему Windows на другой диск без стороннего программного обеспечения? Как скопировать операционную систему Windows с помощью robocopy?

Комментариев нет :

Отправить комментарий