Скопировать содержимое раздачи в любое место на диске
Некоторых пользователи интересует вопрос, как скопировать загрузочную флешку, а затем перенести образ диска на другую флешку, сделав ее загрузочной. Необходимо сохранить образ флешки, перенести его на другую флешку для того, чтобы получились две одинаковые флешки.
Другая загрузочная флешка может понадобиться в некоторых случаях: загрузочную флешку на время просят родственники, друзья или знакомые (еще неизвестно, что они вернут), необходимо скопировать чужую загрузочную флешку, которую нужно отдавать, и т. п.
Можно ли скопировать загрузочную флешку? Простым копированием — нельзя, потому что флешка не будет загрузочной, при запуске компьютера, с нее не получится запустить установку Windows.
Поэтому придется воспользоваться обходными путями. В данной статье я воспользуюсь программой UltraISO, которая предназначена для работы с образами.
При помощи UltraISO можно скопировать загрузочную флешку, а затем перенести образ на другую флешку. Дополнительно я покажу, как скопировать образ системы с установочного DVD диска на флешку.
Созданную загрузочную флешку имеет смысл проверить, чтобы наверняка быть уверенным, что она не подведет в ответственный момент, когда необходимо будет переустановить или восстановить Windows.
При проверке загрузочной флешки обратите внимание на один нюанс: на современных компьютерах необходимо отключить в UEFI режим «Secure Boot», который препятствует загрузке с USB накопителей.
В статье на сайте я уже писал про создание в UltraISO загрузочной флешки Windows. На примерах в данной статье я использую загрузочную флешку с операционной системой Windows 10, ранее созданную в UltraISO.
Вам также может быть интересно:
- Создание загрузочной флешки в UltraISO
- Как создать виртуальный привод в UltraISO
Снятие образа
Итак, устройство опознано и раздел, с которого нужно снять образ, найден. Теперь собственно процесс.
AOMEI Backupper
Для клонирования нашего загрузочного USB-накопителя мы также можем выбрать такую программу, как AOMEI Backupper , Первое, что мы должны сделать, это подключить оба устройства к нашему компьютеру. Впоследствии мы запускаем AOMEI Backupper и должны выбрать «Клон» в левой части меню, затем выберите «Клонировать диск», а затем «Далее».
Далее мы выберем загрузочный USB-накопитель и целевой диск, на который мы собираемся клонировать. Важно, чтобы у нас был установлен флажок «Клонировать сектор за сектором» и, наконец, нажмите «Начать клонирование». Теперь начнется процесс клонирования, и после его завершения мы получим новый загрузочный диск.
Просмотр содержимого образа физического диска
А вот с монтированием образа диска целиком всё не так просто. Ужасная правда состоит в том, что монтировать файлы из произвольного места файловой системы ядро не умеет и аргумент -o loop, команды mount, сигнализирует о том, что сначала надо связать образ с файлом виртуального устройства в директории /dev, и потом уже присоединить содержимое этого устройства к файловой системе.
Файлы виртуальных устройств создаются заранее (на этапе загрузки системы) и имеют названия loop0, loop1, loop2 и так далее по нарастающей.
Связать образ раздела с одним из этих файлов можно командой losetup. Команда mount из предыдущего раздела на самом деле эквивалентна следующим двум командам.
losetup /dev/loop0 win_c.img
mount /dev/loop0 /mnt/win_c
Но вот для того, чтобы посмотреть содержимое образа в котором есть несколько разделов, этого недостаточно. Дело в том, что если выполнить команду losetup для такого файла, то с устройством /dev/loop0 будет связан весь образ целиком. То есть это устройство будет эквивалентом /dev/sda, а нам нужны эквиваленты /dev/sda1 и /dev/sda2.
Обладатели свежих версий программы losetup (читай гентушники и арчеводы) могут выполнить losetup c аргументом --partscan, что приведёт к автоматическому созданию в директории /dev файлов, соответствующих разделам образа. То есть /dev/loop0p1, /dev/loop0p2 и так далее до самого горизонта. И вот уже эти файлы можно отдавать команде mount.
losetup --partscan /dev/loop0 drive.img
mount /dev/loop0p2 /mnt/win_c
Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx, которая сделает то же самое, но положит файлы соотвествующие разделaм не в директорию /dev, а в директорию /dev/mapper, откуда их можно монтировать и просматривать.
kpartx -a /dev/loop0 drive.img
mount /dev/mapper/loop0p2 /mnt/win_c
But we can go even deeper than that…
Создание sparse файла образа устройства или раздела
Большинство утилит для работы с файлами знают о существовании sparse файлов и умеют их создавать. Упомянутой ранее ddrescue, для того, чтобы образ оказался sparse файлом нужно передать ключ --sparse. Теперь результирующий файл будет занимать столько места, сколько ему необходимо, и не больше.
2) Воспользоваться встроенными функциями Steam
Этот способ далеко не такой простой, как первый, но зато он работает без сторонних приложений. Вдобавок вариант делится на два этапа: первый – создание новой библиотеки, второй – перемещение игровых приложений. И практически всё придётся делать вручную, так что процесс займёт немало сил и времени, но нижеописанная инструкция облегчит процесс:
- Создайте обычную папку в том месте, куда хотите перенести стимовскую библиотеку;
Acronis
В Акронисе всё было просто и понятно: оконный интерфейс, подсказки и предшествующий опыт работы с образами компакт дисков делали процесс несложным. Снял образ, вставил новый винт, развернул образ на него — даже и рассказывать то не о чем. В случае с Линуксом процесс захлебнулся на этапе снятия образа — как это сделать было абсолютно неясно. Специальной программки с подсказками не нашлось, программки, которая добавляла в список устройств виртуальный DVD — наподобие Daemon Tools тоже. Да и сам список устройств оказался достаточно проблематичен, поэтому начать можно прямо с него.
Как быть в случае сжатия образа повреждённого диска
Как известно, многие диски и в руки то брать страшно, какой уж может быть разговор о записывании туда многогигабайтных файлов. Если вам в руки попался именно такой диск, следует сначала снять образ, а потом уже сделать из него sparse файл. Для этого нужно смонтировать полученный образ, потом заполнить свободное место нулями и сделать с образа копию, которая уже будет полноценным sparse файлом. Исходный образ после этого можно удалить.
С копированием файла прекрасно справится cp, которая умеет делать sparse файлы не хуже ddrescue. cp --sparse win_c.img win_c_sparse.img
Конечно, для проведения этих операций потребуется много свободного пространства, но так всё-таки значительно лучше, чем вообще никак.
Просмотр перечня разделов на накопителе
Каждому разделу в директории dev тоже соотвествует файл. Его название строится из названия файла, соотвествующего накопителю и номера раздела. То есть для накопителя sda, на котором есть 2 раздела, в директории /dev будет создано 2 файла — sda1 и sda2. Посмотреть перечень разделов на накопителе sda можно командой ls -1 /dev/sda3 полный перечень разделов на всех устройствах получается на выводе команды ls -1 /dev/sd[a-z]9, а если есть необходимость включить в перечень и сами устройства, то можно просто написать ls -1 /dev/sd*, что значительно менее осмысленно, зато коротко и главное работает. Или, как подсказывают в комментариях, есть ещё вариант cat /proc/partitions
Часто владелец может опознать диск просто по такому перечню (это когда дисков у него не 452), но если этого недостаточно, то можно воспользоваться программой hdparm.
Конкретно hdparm -I /dev/sda выведет подробную информацию об устройстве /dev/sda.
Эту же информацию, но в рассеянном по разным файлам виде, можно найти в директории /sys/block/sda. Например модель диска находится в файле /dev/block/sda/device/model.
Если и этого недостаточно, то остается только по очереди монтировать устройства и смотреть что на них записано. Но это уже совсем другая история.
Клонирование карты и копирование файлов: в чём разница?
Между простым копированием содержимого флешки и созданием её полного клона существует существенное отличие. Если выделить файлы, использовать сочетание клавиш «Ctrl + C» и перенести их на жесткий диск или карту памяти с помощью «Ctrl + V», то контрольные суммы будут отличаться, и это сильно отразится на работоспособности программ и количестве занимаемой памяти.
Эта особенность связана с тем, что для флешек используется собственная разметка системы файлов и разделов памяти. Чтобы её учесть, следует использовать специальное ПО, позволяющее полноценно клонировать флешку.
Отличительной особенностью утилиты является то, что разработчики предусмотрели возможность записывать данные на несколько флешек одновременно. Их количество ограничивается только количеством портов USB. Это позволяет сэкономить существенное количество времени.
Для того, чтобы сделать клон флешки или карты памяти, придерживайтесь простой инструкции:
- Скачайте ImageUSB в любую папку жесткого диска и распакуйте архив;
- Запустите исполняемый файл ImageUSB.exe. Появится окно утилиты;
- На первом шаге выберите один из подключенных к ПК съемных USB-устройств, полный перечень которых отображён в списке;
- На втором шаге будут показаны все возможные настройки и операции, связанные с носителем: создание нового образа флешки или карты памяти, либо запись образа на накопитель. Также доступны такие функции, как удаление всех данных с носителя и форматирование (конверсия в другую файловую систему); Выберите нужное Вам действие — Create image from USB drive.
- Выберите или введите путь директории, куда Вы хотите поместить клон выбранного носителя;
- Подтвердите начало процесса клонирования, нажав на кнопку Create («Создать»).
- Дождитесь, пока программа создаст точную копию флешки или карты памяти на накопителе. Это может занять несколько минут, особенно если данных много.
Утилита работает как на 32-битной, так и на 64-битной версиях операционной системы Windows. Интерфейс недавно был переведён на русский язык, поэтому с пониманием программы не возникнет проблем даже у неопытного пользователя.
Утилита не нуждается в установке. Просто распакуйте скачанный архив и запустите исполняемый файл USB-image-tool.exe. Далее придерживайтесь следующего плана действий:
- После запуска утилиты отобразится окно программы. В левой его части Вы увидите список всех подключенных к ПК USB-носителей. Выберите устройство, щёлкнув мышью по нему;
- В правом нижнем углу окна появится кнопка Backup («Резервное копирование»), нажмите на неё;
- Укажите директорию на жёстком диске, куда нужно загрузить клон флешки или карты памяти. Введя путь, нажмите кнопку Save («Сохранить») в системном диалоге;
- Дождитесь окончания создания образа. Прогресс отображается в левой нижней части окна (Saving image).
- Для переноса копии носителя на другую флешку нужно выполнить еще два шага: В списке подключенных к ПК USB-устройств выберите то, на которое хотите перенести копию и нажмите на кнопку Restore («Восстановить»);
- Укажите ранее созданную копию и откройте её. Дождитесь окончания процесса восстановления. Готово!
Утилита USB Image Tool крайне проста в использовании. Визуально подробный интерфейс делает работу с ней действительно интуитивно понятной.
Программа работает на Windows XP, 7,10 и других ОС. В этом её значительное преимущество перед более требовательными утилитами, например, описанной ниже AOMEI Partition Assistant.
Мощная программа AOMEI Partition Assistant позволяет управлять памятью USB-носителей и жёстких дисков компьютера. В частности, она полезна и для создания копии данных с сохранением структуры и контрольной суммы.
Чтобы скачать AOMEI, перейдите по этой ссылке на официальный сайт и нажмите на кнопку Download freeware.
Далее придерживайтесь следующей инструкции:
- Установите и откройте AOMEI Partition Assistant;
- В появившемся окне в верхнем левом углу найдите раздел Wizard («Мастер») >All Tools (Все инструменты) и нажмите на пункт Disk Clone Wizard («Мастер копирования»);
- Из предложенных двух вариантов выберите опцию Clone Disk Quickly («Быстро скопировать диск»). Операция Sector-by-Sector Clone («Копия по секторам») не подходит для клонирования флешки или карты памяти;
- В окне Select Source Disk появится перечень подключенных к компьютеру съемных носителей. Выберите тот, с которого нужно снять копию. Нажмите по нему единожды, затем щёлкните на Next («Далее»);
- В окне Select Destination Disk укажите директорию, которую хотите превратить в клон выбранного ранее носителя. Также нажмите по нему один раз и подтвердите свой выбор;
- Подтвердите операцию, нажав на кнопку Finish. Но на этом клонирование флешки не закончено: необходимо, чтобы все действия вступили в силу;
- Вернувшись в главное окно утилиты, в левом верхнем углу Вы увидите кнопку Apply («Применить»), нажмите на неё;
- По завершению, нажмите на ОК. Клонирование может занять достаточно долгое время, но в конце концов в выбранной директории будет лежать полный клон выбранного носителя.
Утилита AOMEI является платной: полная версия без ограничения функций обойдется пользователю в $48, а кроссплатформенная – в $179. Однако установить можно и демо-версию программы, функционала которой должно хватить для создания клона флешки.
Единственным недостатком демо-версии программы для такого способа копирования является её нестабильная работа на ОС Windows старее версии 10. Разработчиками ещё не был найден способ решения этой проблемы, рабочим вариантом остаётся приобретение платных версий утилиты или выбор других программ для клонирования.
Пожалуйста, оцените статью:
Как сохранить содержимое загрузочной флешки, если нет её исходного образа, но сам носитель нужен на время для других целей?Или флешку нужно в точности со структурой загрузочного раздела воссоздать на другом USB-носителе? В таком случае необходимо прибегнуть к помощи программ для резервного копирования, они полностью копируют структуру носителей информации вместе со статусом и атрибутами разделов. Одна из таковых — R-Drive Image.
Это незамысловатый бэкапер с базовыми возможностями, платный, но им целый месяц можно бесплатно пользоваться в неограниченной триал-версии.
Способ 1: Переустановка в папку без кириллицы Самая частая причина появления рассматриваемой проблемы – инсталляция игрового ПО в пути, который содержит кириллические буквы. Дело в том, что некоторые варианты установщиков плохо работают с такими символами, отчего не могут внести корректные значения в системный реестр. Оптимальным решением в такой ситуации будет удаление проблемного софта и инсталляция в каталоги, которые не содержат в названии русских букв: например, путь D://Games корректен, тогда как D://Игры – нет.
Ошибка 0xc0000142 при запуске игры в Windows 10 может возникать по разным причинам, для каждой из которых существует свой вариант решения.
Важно! Все действия, представленные в статье, выполняются на примере Windows 10 версии 21H2 (19044.1466). Это следует учитывать, так как в других сборках расположение некоторых элементов интерфейса и их наименование может отличаться. Но несмотря на это основной смысл статьи остается актуальным.
Посмотреть недавние документы в Windows 10 можно посредством «Проводника» или с помощью временной шкалы. Также есть возможность создать кнопку быстрого доступа.
В большинстве случаев на мобильных устройствах с Android для открытия архива, имеющего формат RAR, потребуется установить специальное приложение от сторонних разработчиков.
Версии ОС Android не предусматривают встроенного приложения для просмотра содержимого архива, но существуют альтернативные варианты от сторонних разработчиков.
Важно! Все представленные в статье действия будут выполняться в рамках Windows 10 версии 21H2 (19044.1466). На это следует обращать внимание, так как в других сборках операционной системы может отличаться наименование и месторасположение некоторых элементов графического интерфейса. Но несмотря на это, каждый способ в статье остается эффективным.
Получить информацию об оперативной памяти в Windows 10 можно посредством штатных средств операционной системы или с помощью стороннего программного обеспечения.
Вариант 1: Будильник Стандартный будильник – самое простое и удобное средство, позволяющее поставить напоминание о встрече или важном событии. Сигнал прозвучит точно тогда, когда пользователь его установил.
Чтобы поставить напоминание на Андроид, можно воспользоваться встроенными средствами, сторонними приложениям или функциями мессенджеров и голосовых помощников.
Если пользователь в качестве защиты данных использовал встроенную в какое-то приложение функцию скрытия папок, то обычные способы отображения данных не всегда помогают. То же самое касается деятельности вирусов, при которой изменяются атрибуты файлов и папок без ведома пользователя, чтобы их «спрятать». Тем не менее обычно варианты, позволяющие вернуть скрытую папку в Windows 10, рабочие вне зависимости от того, каким образом было произведено ее скрытие.
Не так давно, а именно 5 июня хабрачеловек по имени alan008 задал вопрос. Чтобы не заставлять ходить за подробностями, приведу его здесь:
За несколько лет с разных трекеров (преимущественно c rutracker'а) разными клиентами (преимущественно uTorrent'ом) скачано много гигабайт разного полезного контента. Скачанные файлы впоследствии вручную перемещались с одного диска на другой, uTorrent их соответственно не видит. Многие .torrent файлы устарели сами по себе (например, велась раздача сериала путем добавления новых серий заменой .torrent файла).
Теперь сам вопрос: есть ли способ автоматически (не вручную) установить соответствие между имеющимися на компьютере .torrent файлами и содержимым, раскиданным по разным логическим дискам компьютера? Цель: удалить лишние (неактуальные) .torrent файлы, а для актуальных — поставить всё на раздачу. У кого какие идеи? :)
При необходимости (если это требуется) можно снова поместить все файлы данных в один каталог на одном логическом диске.
В обсуждениях сошлись на том, что если это и можно сделать, то только ручками. Мне же этот вопрос показался интересным, и после возвращения из отпуска я нашел время, чтобы в нем разобраться.
Потратив в общей сложности неделю на разбор формата .torrent-файла, поиск нормально работающей библиотеки для его парсинга, я приступил к написанию программы, которая позволит решить проблему затронутую в упомянутом вопросе.
- Получилось много, но не все.
- По формату файла .torrent будут даны лишь необходимые пояснения.
- Людей, чувствительных к временами некачественному коду, прошу меня заранее простить — я знаю, что многое можно было написать лучше, оптимальнее и безглючнее.
В данном случае имеется отличный способ решения — перекачать заново. Но мы же не ищем легких путей, да и предлагался такой вариант! Итак, будем решать задачу по сложному — не скачивать.
Приступая к написанию любой программы, необходимо сначала продумать хотябы базовый алгоритм ее работы. В нашем случае алгоритм, по сути, состоит из двух шагов:
- Найти и прочитать все .torrent-файлы;
- Найти в куче файлов тот, который соответствует описанному в .torrent, и переместить его в папку, соответствующую пути в .torrent.
Ну что же, приступим к решению поставленной задачи.
Ищем торренты и читаем их
Начнем с самого простого момента — чтения .torrent.
Строение .torrent-файла довольно простое — он представляет из себя словарь в формате bencode. В данном словаре нас интересует только пара с ключом info — блок описания файлов. Этот тоже является словарем и содержит в себе информацию об имени файлов, их размере. Кроме того, как многим известно, торрент хеширует файлы не целиком, а по кускам определенной длины, которая зависит от размера этих файлов. Информация о размере этого куска также содержится в словаре info.
Для хранения информации из прочитанного файла будем использовать такой класс Torrent :
Здесь поля хранят следующую информацию:
* Name — имя торрента (вообще говоря — имя папки или имя файла)
* Files — список файлов, которые нам надо будет в дальнейшем искать
* PieceLength — размер тех самых кусочков, хеш которых нам предстоит считать
* Hash — хеш строка всех файлов
* FileName — имя .torrent-файла на диске
Теперь стоит заострить внимание на строке хеша. Она составляется очень просто. Все файлы склеиваются в один (виртуально конечно) друг за другом, образуя при этом один БОЛЬШОООООООЙ воображаемый файл. В этом воображаемом файле берем кусок длины PieceLength , считаем SHA1 хеш, кладем хеш в строку, берем следующий кусок, считаем хеш, дописываем к концу строки с хешем предыдущего куска. Т. е. это обычная конкатенация хешей всех кусков.
Как мог заметить внимательный читатель, файл внутри класса — это не просто файл, а особый тип данных, в котором файл описывается некой конструкцией типа LostFile . Вот она:
Здесь все просто: имя файла и его размер. Кроме того этот класс содержит еще одно поле — BeginFrom . Оно описывает начало этого файла в том БОЛЛЬШОООООМ воображаемом файле. Он нужен, чтобы взять правильную часть файла для подсчета хеша — ведь длина файла очень редко кратна длине куска.
Подготовив структуры для хранения необходимой информации, можно приступать к их заполнению.
С помощью найденной на просторах интернета библиотеки BencodeLibrary мы читаем наш .torrent-файл и выкорчевываем из него блок info:
Далее из этого блока необходимо забрать данные об имени торрента, размере куска.
В этом месте мы передаем в метод `BencodingUtils.DecodeFile` вторым параметром информацию о кодировке. Это как раз тот момент, когда пришлось добавлять один метод в библиотеку — изначально codepage-437 была вшита в код.
Мы добрались до самого интересного момента в этой части — чтение информации о файлах. Торрент файлы бывают двух типов. Эти типы различаются тем, сколько файлов в них описано. При описании только одного файла в .torrent пишется его имя и размер.
Сначала разберем .torrent с описанием одного файла.
Тут все просто — имя торрента совпадает с именем файла. В случае, когда файлов в раздаче много, то в поле name пишется имя папки, в которую их надо положить (на самом деле может быть что угодно, но почему-то все пишут имя папки в которой эти файлы лежали при создании). Кроме того появляется список files в котором содержится информация о каждом файле: путь к нему и размер. Если размер — просто целое число, то путь к файлу представляет собой список из строк (имен директорий), пройдя по которым мы увидим этот файл.
Такое лучше пояснять на примере. Для файлов level_1\level_2_1\file_1.txt и level_1\level_2_2\file_2.txt , если мы захотим их раздавать, поле name будет содержать имя папки верхнего уровня ( "level_1" ), а список path для одного из файлов будет следующего вида: и для другого.
Нам для .torrent с несколькими файлами надо путь до каждого файла собрать в одну строку. Кроме того, надо хранить начало каждого файла в том БОЛЬШООООМ (не забыли, правда же?!):
Очень важно отметить, что порядок следования файлов в БОЛЬШОООООМ файле может быть любым, не обязательно по алфавиту или по размеру. Но порядок файлов в списке files будет точно таким же. Это ключевой момент для понимания принципа хеширования. Для примера, в ситуации, изображенной на первом рисунке, список файлов будет следующим: . Таким образом, считая хеш одного файла, мы знаем какой файл надо будет брать следующим.
Когда мы все это дело прочитали и посчитали — давайте создадим и вернем экземпляр Torrent :
Собирая теперь все чтение и разбор .torrent-файла воедино, получаем:
Теперь, когда у нас есть все необходимые данные, мы готовы к самому интересному — поиску наших файлов.
Ищем файлы
Мы вплотную подошли к реализации второго шага нашего алгоритма. Для этого будем использовать метод FindFiles такого вида:
Здесь files — список файлов, среди которых мы будем искать, destinationPath — путь до папки назначения, в которую будут помещаться найденные файлы.
Для каждого файла в .torrent мы будем перебирать все файлы из кучи и их сверять. Так как проверка хеша довольно затратна, то надо сначала отсеять явно левые файлы. Ну посудите сами: если я качал дискографию в .mp3 и переместил ее, то явно не менял расширения файлов. Имя мог поменять, а вот расширение вряд ли.
Также стоит проверять длину файла, но это уже сомнительно и иногда может давать ложные срабатывания. Только после того, как мы отсеяли по расширению явно левые файлы, можно приступать к проверке хеша.
После того как проверка завершена, и мы удостоверились в соответствии файла искомому — перемещаем его в папку назначения с правильным путем. Перед перемещением будем естественно проверять наличие директории, а также проверим есть ли уже такой файл или нет. copyFile — переменная передаваемая с формы пользователем, ее назначение, я думаю, понятно всем.
Есть в коде выше три важных для пояснения момента. Начну с двух последних — вот эти строки:
Я посчитал вполне логичным убирать уже отсортированные файлы из рассмотрения, что позволит несколько сократить время выполнения поиска. Во второй строке есть конструкция .RemoveAt(i--); так как из коллекции убирается текущий элемент, то указатель надо сдвинуть назад, чтобы на следующей итерации цикла брался следующий элемент, а не через один.
Теперь про первый момент. Я знаю про наличие foreach для списка, но его при использовании нельзя модифицировать этот спикок, то есть мы не сможем удалять уже ненужные более элементы. Итак, собирая все выше описанное в один метод, имеем:
Ну вот! Самое вкусное.
Проверка хеша
Как видно из кода выше, для проверки хеша мы передаем имя файла на диске и номер файла в списке файлов торрента. Это надо для того, чтобы не запускать поиск в списке файлов, а сразу взять его по номеру, раз он известен (еще одно "+1" циклу for ).
Теперь приступим к реализации нашего метода проверки хеша. На данном этапе мы знаем номер в списке файлов торрента и путь до файла на диске
- Нет необходимости дополнительно искать на диске соседние файлы;
- Длина куска для хеширования очень редко превышает 2-4 МБ, что дает нам еще один плюс — с точки зрения производительности и времени, докачать такие файлы намного проще, чем искать их на диске.
Когда торрент-клиент проводит хеширование файлов, он считает хеш по порядку, однако бывает так, что нет одного или нескольких файлов. Тогда торрент-клиенту надо знать какой следующий кусок брать и откуда он будет начинаться в следующем имеющемся файле. Для вычисления двух этих цифр будем использовать следующий код, в котором переменная firstChunkNumber содержит номер первого куска, который полностью содержится в данном файле, а bytesOverhead — количество байт от начала файла до начала этого куска. Для лучшего понимания этого момента взгляните на поясняющий рисунок после кода.
Ответить на вопрос «Почему номер куска разный для случая, когда его начало совпадает с началом файла, и для случая, когда кусок лежит внутри?» предлагается самостоятельно.
Сейчас, зная номер куска мы должны взять его хеш из торрента с помощью такой конструкции:
После этого, надо прочитать кусок из файла и посчитать его хеш:
Ну и самое важное — его проверить. У меня, почему-то не захотел работать ни один из методов Equals() , которые я смог найти, поэтому проверяем так:
Собирая воедино сие творение возбужденного мозга, получим метод следующего содержания:
На этой прекрасной ноте, рассказ о методах и алгоритмах заканчивается, и мы переходим к рассказу о реализации в реальной жизни данного творения. Вполне понятно, что данная задача мной решалась не для того, чтобы решить, а для того, чтобы реализовать. Поэтому привожу на суд общественности мое творение, которое реализует все то, о чем написано выше.
Программа
В процессе работы, после окончания обработки очередного файла, выводится результат — имя .torrent-файла на диске и количество обработанных файлов.
Чтобы запустить сканирование, необходимо выбрать три директории (с файлами .torrent, с файлами для сортировки и папку для отсортированного), по желанию указать две опции и запустить сканирование.
По поводу производительности. Она пока что низкая: обработка 10 больших torrent-файлов заняла около 5 минут.
Так как работает приложение в один поток, то во время выполнения интерфейс подвисает, но я над этим работаю. Также хочу напомнить, что файлы малого размера (меньше 2-х мегабайт) не будут перемещены по причине отсутствия возможности проверки хеша. Вполне вероятны ложные срабатывания из-за того, что проверяется только один кусок под номером firstChunkNumber . Пока что проверять все куски слишком затратно, но в планах есть.
Не ищите торренты рекурсивно, если они собраны в корне диска.
Копирование может занять много времени, поэтому интерфейс может подвиснуть — не пугайтесь.
Так как писалась эта программа 4fun, то качество кода там немного не то, которое хотелось бы, но у меня оно работает. Данная программа не тестировалась, исправлялись только очевидные ошибки, поэтому могут быть, да что скрывать-то, есть скрытые баги. ИСПОЛЬЗУЯ ДАННУЮ ПРОГРАММУ, ВЫ ИСПОЛЬЗУЕТЕ ЕЕ НА СВОЙ СТРАХ И РИСК.
Взять исходники можно на github. Распространяется по GPLv2. Там есть архив с исполняемым файлом. Для работы требуется библиотека Bencode Library, но не оригинальная, а модифицированная мною (есть у меня в репозитарии, подключена субмодулем).
Спасибо всем, кто проявил терпение и дочитал эту статью до конца. Рад услышать ваши вопросы, приветствуется всевозможная помощь в совершенствовании алгоритма и, в особенности, кода.
UPD1. По результатам обсуждения мне стало понятно, что правильней будет не ломать существующие коллекции выдергиванием файлов на раздачу, а наоборот — создавать хардлинки в нужном для раздачи месте на файлы внутри упорядоченных коллекций (фильмо и дискографий, например). В дальнейшем программа будет работать именно так.
UPD2. Если у тех, кто пользовался этой утилитой, есть еще какие-то пожелания по функционалу или баг репорты, то прошу оставлять их на github в issue-трекере.
С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.
Гуру поблизости отсутствовали, доступ к интернету был жёстко ограничен и потому любая нетривиальная задача становилась в те времена совершенно нерешаемой.
Потом, когда появился безлимитный интернет, вследствие чего с получением софта и знаний стало существенно легче, я настроил себе дуал бут и стал осваивать Убунту.
Основные сложности в процессе переезда создались в первую очередь из за необходимости бросить знакомые практически с самого детства программки, которые попросту отсутствуют в операционной системе для настоящих программистов.
В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.
Но в некоторых случаях приходилось перезагружать компьютер, выбирать в меню загрузчика пункт Microsoft Windows и делать всё по старинке. Такой задачей было например снятие образа логического диска в целях переноса на другой физический носитель, потому как текущий уже изрядно поистрепался.
Программой, которая использовалась в таких ситуациях, был Acronis. Интуиция подсказывала, что на выяснение того, как обойтись без него, уйдёт не меньше недели, а результат обычно был нужен край через полчаса, поэтому выяснение откладывалось, откладывалось и откладывалось.
Но после очередной дружеской шутки про никому не нужный и ничего не умеющий, а потому бесплатный Линукс, я решил, что в следующий раз для создания образа диска мне не понадобится ничего, кроме загрузочной флешки и командной строки. И отправился гуглить.
Гугл создавал чёткое впечатление, что как клонировать диски средствами опенсорсных ОС, знает каждая собака. Увы, чёткие инструкции по осуществлению общеизвестных и элементарных вещей найти как правило сложнее всего. Какие-то мануалы в результате упорных поисков в конце концов обнаружились, но всё равно с ними пришлось туговато, ибо их явно писали грамотные люди, которые возятся с темой не первый и даже не второй день, и просто не помнят, что знаниями, почитаемыми ими за необходимый минимум, владеют далеко не все.
Теперь, когда ужасы гугления позади, я понимаю, что всё действительно достаточно просто и хочу оформить результаты своих изысканий в виде краткого руководства по работе с образами дисков в GNU/Linux, обращённого в первую очередь к тем, кто привык к Акронису или другой подобной ему программе. Мне в свое время такой документ бы очень сильно помог, надеюсь, что он поможет и кому-то ещё.
Подготовка раздела или устройства к сжатию
Для того, чтобы воспользоваться этой возможностью в целях сжатия образа, нужно перед снятием записать в свободное место нули. Сделать это несложно — достаточно смонтировать файловую систему в директорию и создать в этой директории файл с бинарными нулями размер которого будет равен размеру свободного места на разделе.
Но выяснять количество свободного места и передавать его программе, создающей файл, к счастью не обязательно, да и искать программу, создающую файл с нулями, не понадобится. В директории /dev есть безразмерный файл zero, который, как нетрудно догадаться по названию, является неисчерпаемым источником бинарных нулей. Остаётся только скопировать его в нужное место.
Так как файл безразмерен, копирование будет продолжаться до тех пор, пока копия не заполнит всё доступное ей пространство, то есть все свободное место в разделе, что нам собственно и требовалось.
Про то, как копировать файлы стандартными средствами операцинной системы, здесь написано столько раз, что руководство вполне могло бы называться «Искусство копирования файлов в окружении GNU», но так как истина от повторения не тукснеет, я, пожалуй, напишу ещё раз.
Для создания файла с бинарными нулями можно выполнить команду cp /dev/zero zerofile или cat /dev/zero > zerofile.
Просмотр перечня накопителей
Для каждого подключенного накопителя (винчестера, флешки) в директории /dev можно найти соотвествующий ему файл. Его название состоит из букв sd и буквы, обозначающей номер устройства. То есть винчестеру, подключенному к первому каналу, будет соответствовать файл sda, второму sdb и так далее. Соответственно самый простой способ посмотреть список устройств — ls -1 /dev/sd[a-z]. Эта команда покажет список накопителей, но не даст нам никакой информации о них. А нам нужно хотя бы увидеть список разделов.
EASEUS Todo Backup бесплатно
Первая возможность, которую мы можем использовать для клонирования загрузочного USB-накопителя Windows 10, — это EaseUS Todo. Backup Бесплатное приложение. Это инструмент, имеющий Бесплатная версия с помощью которого мы можем создать образ USB-накопителей, а также разделов жесткого диска, и что мы можем .
Чтобы клонировать загрузочный USB-накопитель, первое, что мы должны сделать, это подключить его к нашему компьютеру вместе с другим Pendrive, где мы хотим клонировать. Затем мы запускаем EaseUS Todo Backup и нажимаем Функция «клон» , Откроется окно, указывающее, что мы выбираем загрузочную USB-память, которую мы собираемся клонировать, и нажимаем «Далее», чтобы продолжить.
Теперь мы выберем целевую единицу и в разделе «Дополнительные параметры» мы должны поставить галочку «Сектор за сектором клон» , Это поможет клонировать все сектора с исходного диска на целевой диск. Затем мы нажимаем «Продолжить», чтобы клонировать наш загрузочный диск.
Образ программного обеспечения PassMarkUSB
Последний вариант, который мы представляем вам для клонирования загрузочного USB-накопителя, — это PassMark Software ImageUSB, который мы можем с его сайта. Как только мы его выполним, появится главное меню, которое, хотя и на английском языке, очень простое в использовании, и нам вряд ли понадобится пара шагов для получения клонирования.
Первое, что мы должны сделать, это подключить оба USB-накопителя к загрузке с другим USB-накопителем, на котором мы собираемся клонировать. После подключения информация с обоих устройств появится в информационном окне, поэтому мы должны выбрать их, нажав оба или используя опцию «Выбрать все». Далее, где написано «Шаг 2», мы должны выбрать первый вариант «Записать образ на USB-накопитель» , Чтобы закончить, нам нужно только нажать кнопку «Запись», и программа начнет клонировать. Когда закончите, появится диалоговое окно, информирующее нас, и мы получим новый загрузочный pendrive.
Sparse файлы
Sparse файл это файл, в котором куски, содержащие нули, на диск не пишутся. То есть, если половина файла заполнена данными, а другая половина нулями — на диск будет записана только половина этого файла и ещё дополнительная информация об областях файла, заполненных нулями. Если область с нулями непрерывна и начинается в середине, то реально на диске файл будет заменять половину от своего теоретического объёма.
Неправильный способ
Часто можно встретить рекомендации использовать для копирования файла устройства или раздела программу под названием dd. Как правило, для снятия образа предлагается сделать что-то вот такое:
dd if=/dev/sda2 of=win_c.img
Не делайте так! Хотя семантически подход верен (произойдёт копирование одного файла в другой), последствия могут быть очень печальны. Да, dd превосходит cp в том отношении, что при обнаружении ошибки cp прекратит работу, а dd не прекратит, но если на диске есть битые или просто плохо читаемые сектора, то dd будет продолжать попытки считать их содержимое пока из винчестера не повалит дым.
Да, у dd есть аргумент noerror, но при его использовании копирование может быть выполнено с ошибками, попыток восстановления которых предпринято не будет. ddrescue в аналогичной ситуации после первого прохода вернётся к пропущенным местам и попробует прочитать их маленькими кусочками. И оставит лог файл, с помощью которого можно будет продолжать попытки вычитать сбойные места в будущем.
Короче, используйте ddrescue. А если кроме dd ничего нет, не забывайте про аргумент noerror.
Описанная выше процедура может применяться например для того, чтобы сохранить образ диска с только что установленной операционной системой для последующего восстановления. Да, настоящий линуксоид так поступать не станет, но среди пользователей операционной системы с другим названием это достаточно распространённая практика. И для периодического вдумчивого ремонта регулярно ломающегося компьютера какой нибудь симпатичной девушки её смело могут применять даже любители пингвинов. А если девушек больше некоторого, сугубо индивидуального для каждого самоделкина, количества, то данный метод просто незаменим. Главное не перепутать названия файлов с образами.
Развёртывание образа на физический носитель
А теперь о том, как собственно накатить образ на другой диск. Как и раньше надо руководствоваться тем, что диски и разделы представлены в виде файлов. И если для снятия образа нужно было создать копию файла устройства или раздела, то для того, чтобы закатать этот образ обратно надо провести операцию копирования в обратную сторону. То есть вместо cp /dev/sda2 win_c.img написать cp win_c.img /dev/sda2. Ну и лучше помнить о советах, изложенных в руководстве по снятию образа. А именно пользоваться ddrescue и не пользоваться dd.
ddrescue --force win_c.img /dev/sda2 win_c_restore.img.log
Конечно следует помнить, что раздел в который мы восстанавливаем образ (в данном случае /dev/sda2) должен быть не меньше файла с образом. Eсли же раздел окажется больше этого файла, то проблем при восстановлении не будет, но в разделе останется неразмеченное пространство. И придётся либо смириться с этим фактом, либо увеличить размер файловой системы до размера раздела каким-нибудь специализированным софтом (увеличивать, впрочем, обычно гораздо проще и быстрее, чем уменьшать).
1) Воспользоваться программой Steam Library Manager
Steam Library Manager – это полезная и удобная программа, которая даёт возможность комфортно перемещать папки с установленными играми Steam на любой жёсткий диск. Об этой программе наверняка знает любой пользователь, которому хотя бы раз приходилось переносить стимовские игры. Предлагаем воспользоваться инструкцией ниже:
- Скачиваете и запускаете Steam Library Manager (Steam.Library.Manager.zip);
Общие рекомендации
Образом диска мы обычно называем копию диска на уровне разделов или всего устройства. И если пользователь Windows в ответ на вопрос, как эту копию сделать, обычно слышит рекомендацию воспользоваться специализированным софтом, то в Линуксе всё не так.
Как я уже говорил, здесь каждый диск и каждый раздел диска представлен конкретным файлом. И, так как образ представляет из себя файл с копией диска, логично предположить, что операция снятия образа и операция копирования файла раздела — это одно и то же.
Так оно и есть. Пусть нам надо снять образ раздела /dev/sda2 (на нём Windows 7 обычно держит диск С:) и сохранить его в файл с названием win_c.img.
Для этого достаточно написать cp /dev/sda2 win_c.img. Или cat /dev/sda2 >win_c.img. Короче можно воспользоваться любой программой или комбинацией программ, которая осуществляет копирование файлов.
Создание бэкапа флешки
Итак, чтобы сохранить содержимое и загрузочную структуру флешки, необходимо создать образ её бэкапа.
Скачиваем программу R-Drive Image на её сайте:
Запускаем, жмём «Далее».
Нажимаем «Создать Образ».
Этап выбора источника бэкапа: указателем мыши кликаем флешку в таблице дисков. Кликаем на значок слева, где отображается размер носителя, так, чтобы весь диск подсветился красной чертой внизу.
Этап выбора места хранения файла бэкапа: в проводнике указываем место на жёстком диске, где будет сберегаться файл резервной копии «.rdr». При необходимости в графе «Имя файла» можем задать бэкапу отличное от генерируемого автоматически имя.
Этап задания параметров бэкапа: здесь можем сжать файл до предела, чтобы он меньше места на диске занимал.
Далее указываем высокий приоритет для работы программы.
Ждём какое-то время. В итоге: образ создан, всё прошло благополучно.
Правильный способ
Как вы наверное уже догадываетесь, добиться желаемого можно не одним и даже не двумя, остроумными и не очень способами, но правильнее и проще всего на мой взгляд, использовать утилиту ddrescue. Что существенно важно — имеется в виду GNU ddrescue, а не давно уже устаревший оригинал.
Используется ddrescue следующим образом:
ddrescue
ddrescue не способна принимать входные данные с конвейра, или передавать на конвейр результат работы, что впрочем неудивительно. Возможность пропускать места с ошибками при первой итерации и возвращение к ним в последующих циклах подразумевает наличие файлов на выходе и входе.
Команда, которая выполнит операцию, аналогичную описанной выше, будет выглядеть так:
ddrescue /dev/sda2 win_c.img win_c.img.log
Кстати, в данный момент я молчаливо подразумеваю, что жёсткий диск, с которого мы снимаем копию более-менее исправен и фокусов не выкидывает. Если с диском есть серьёзные проблемы, то лучше предварительно ознакомиться с подробностями использования ddrescue, например тут. и применить эти знания при снятии образа.
Windows Installation Media Creation Tool
Ещё одна программа от разработчиков самой популярной ОС. Доступна она в трёх вариантах и позволяет создать загрузочный диск с седьмой, восьмой и десятой версиями Виндоус. Последовательность действий:
- Скачайте и запустите подходящую версию Creation Tool.
- Выберите язык, выпуск ОС (например, 8.1) и разрядность, затем нажмите «Далее».
- Укажите расположение будущего установочного файла. Поскольку мы создаём загрузочную флешку, о.
- Выберите конкретный накопитель. Если подключён всего один, просто нажмите «Далее».
- Появится уведомление о том, что файлы с flash-диска будут удалены. Нажмите «ОК» и таким образом начните запись.
Заключение
А теперь в сжатом виде о том, что можно почерпнуть из данного руководства.
Если у вас возникают проблемы с переносом игр в Steam на другой жёсткий диск, в том числе внешний, добро пожаловать! Существует целых три способа, как это сделать, каждый из которых по-своему сложный.
Внимание! Перед тем как воспользуетесь одним из способов, обязательно приостановите все загрузки и обновления, чтобы на 100% избежать неприятных ошибок. Кроме того, не рекомендуем при создании новой библиотеки использовать внешний жёсткий диск, с ним могут возникнуть проблемы с производительностью игр.
Сжатие образа раздела (логического диска)
Особенно приятной чертой Акрониса является способность не писать в файл образа куски диска или раздела, которые не содержат файлов. Это позволяет ужать образ до реального объёма данных в разделе или на диске.
Изложенный ранее подход имеет принципиальные ограничения, не позволяющие реализовать такую фичу — программы посекторного копирования ничего не знают про структуру файловых систем и даже более того — не знают, что это вообще такое — файловая система.
Однако выход из положения есть. Правда для его использования файловая система, на которой будет храниться образ, должна поддерживать такую специфическую штуку, как sparse файлы.
Minitool Partition Free
Minitool Partition Free — это еще один инструмент, который мы можем использовать для клонирования нашего загрузочного USB-накопителя. бесплатные и может быть скачано с официального сайта , Это приложение имеет функцию под названием «Копировать диск» благодаря чему это позволит нам клонировать USB-накопители.
Чтобы начать процесс, мы должны выбрать загрузочный USB-накопитель и нажать на «Мастер копирования дисков» это проведет нас через весь процесс. Позже мы выберем целевую единицу и укажем, что она станет копией источника. Наконец, мы выберем для копирования разделов без изменения размера, и мы нажмем «Применить», и процесс клонирования начнется.
3) Воспользоваться резервным копированием
Резервное копирование – это последний альтернативный вариант, который поможет перенести стимовские игры в другое место, если вдруг не получилось применить или воспользоваться прошлыми двумя способами. Стоит отметить, что это, пожалуй, самый сложный способ, но зато более успешный и надёжный. Поэтому предлагаем ознакомиться с подробной инструкцией:
- Заходите в Стим и переходите в меню, где вам следует выбрать функцию «Резервное копирование. » и в открывшемся окне вариант с резервными копиями;
Библиотеку «Стима» можно перенести и вручную (для этого необходимо вырезать папку «SteamApps» в папке Steam, после чего перенести её в желаемое место), но это далеко не самый надёжный способ, поэтому в обязательном порядке сделайте резервную копию, а в конце проверьте целостность файлов. Но мы рекомендуем использовать только вышеописанные способы.
Просмотр содержимого образа раздела (логического диска)
Так как каждый раздел диска представлен файлом, можно предположить, что должен существовать штатный способ подключения файлов с образами к файловой системе. С определённой точки зрения так оно и есть. Конкретно для этого используется утилита mount, с помощью которой можно поместить дерево файлов, содержащееся в образе, в любую директорию на ваш выбор. Этот процесс называется монтированием.
Итак, у нас уже есть образ, снятый с диска C: операционной системы Windows 7. Мы назвали образ win_c.img и хотим увидеть его содержимое в заранее созданной директории /mnt/win_c. Для этого надо ввести команду mount -o loop win_c.img /mnt/win_c.
But we can go deeper.
Автоматическое создание файлов разделов при выполнении команды losetup
Вообще-то ядро (а конкретно модуль loop) уже достаточно давно умеет искать в файле образа таблицу разделов и создавать соответствующие файлы, но по умолчанию эта функция отключена.
Включается она если параметр модуля loop max_part не равен нулю. Задать этот параметр можно только при загрузке модуля, поэтому если система уже запущена, модуль надо выгрузить из памяти и загрузить снова с уже заданным параметром. Для этого нужно выполнить следующие две команды.
modprobe -r loop
modprobe loop max_part=63
Однако в некоторых дистрибутивах (напривер в Убунте) модуль loop вкомпилирован в ядро намертво и поэтому для установки параметра придётся вписать loop.max_part=63 в командную строку ядра и перезагрузить систему.
Читайте также: