Измените большой файл, а затем сможете откатить изменения, сделав это (почти) на месте
Я восстанавливаю данные с поврежденного диска на 500 ГБ. Я копирую данные (раздел ext4) в файл изображения размером 500 ГБ. Всего процесс копирования занимает около 3 месяцев (да, месяцы). Так что я использую dd
для терпеливого заполнения файла изображения. Сначала я добавляю чанк во временный файл, затем помещаю чанк в файл резервной копии и так...
Проблема в том, что я хочу получить доступ к частично заполненному образу и восстановить некоторые данные до завершения процесса резервного копирования. Я установил его только для чтения и использовал photorec
а также testdisk
и это нормально. Но я тоже хочу попробовать fsck
(попытаться) восстановить раздел. После просмотра данных я бы хотел откатить изменения fsck и возобновить копирование.
Я знаю такие инструменты, как rsync
, rdiff
а также git
производные (bup
, git-annex
...) это может помочь. но мне интересно, есть ли способ сделать это на месте. Не брать еще 500 ГБ проиндексированных исходных данных.
Я не хочу возможности управления версиями. Я не хочу резервное копирование моего файла. Рабочий процесс будет выглядеть примерно так:
- я имею
original_500GB_file.img
-> 500 ГБ данных - Я изменяю 2 ГБ файла. Скажи теперь у меня
modified_500GB_file.img
и другие вспомогательные файлы -> менее 600 ГБ данных (500 исходных + 2 измененных + некоторые метаданные) - Когда я буду рад внести изменения, вернитесь назад и вернитесь к пункту 1 снова.
Как этого добиться? Было бы возможно с возможностями снимка BTRFS?? (к сожалению, у меня есть файл в разделе NTFS)
Благодарю.
2 ответа
Я нашел хорошее и простое решение для моей проблемы. Последний параграф Слиззереда о виртуальных машинах подсказал мне. Ты можешь использовать qemu
программное обеспечение без необходимости фактически загружать виртуальную машину. Я нашел соответствующую информацию здесь и здесь.
Сначала вы должны создать копию изображения (COW) вашего изображения. Это будет использовать ваш original_500GB_file.img
в качестве своей базы. Большой файл не будет редактироваться, потому что он используется только для чтения. Размер COW минимален и будет расти только после внесения изменений. Как раз то, что мне было нужно:
$ qemu-img create -f qcow2 -b original_500GB_file.img одноразовые.qcow2
Форматирование 'одноразовые.qcow2', fmt= размер qcow2 =498000000000 backing_file='original_500GB_file.img' шифрование = выкл. Cluster_size=65536 lazy_refcounts= выкл.
$ ls -l одноразовые.qcow2
-rw-r - r-- 1 пользователь dertalai 204288 abr 15 20:01 одноразовые.qcow2
Теперь вам просто нужно виртуализировать пару original_read-only + cow_writable в одно используемое блочное устройство:
# modprobe nbd
# qemu-nbd -c / dev / nbd0 одноразовый.qcow2
/dev/nbd0
готов к использованию. Вы можете fsck или даже смонтировать его и делать все, что вам нужно. Когда вы закончите и хотите откатить изменения, просто освободите блочное устройство от любого процесса, который его использует, и удалите файл COW, если хотите:
# qemu-nbd -d / dev / nbd0
# rmmod nbd
$ rm одноразовые.qcow2
Да, проще всего было бы использовать BTRFS или ZFS и их возможности моментальных снимков. Я не слишком много работал с BTRFS (сейчас только ZFS), но откат не должен быть проблемой.
(Я собираюсь написать на основе ZFS, но это должно работать довольно похоже на BTRFS)
Прежде чем начать процесс восстановления, вы делаете "снимок" вашей текущей файловой системы, которая содержит образ объемом 500 ГБ.
Затем вы можете скопировать все данные, полученные во время восстановления, в другое место (не в той же файловой системе, в противном случае они будут уничтожены во время отката!). Только изменения на 500 ГБ образ занимают место. Поэтому, если вы измените только 50 ГБ, вам потребуется ~550 ГБ внутри файловой системы.
Если вы закончили с этим частичным восстановлением, вы можете выполнить "откат" и вернуть файловую систему в состояние, в котором она была при "снимке".
Обратите внимание, что механизм моментального снимка / отката всегда работает для всей файловой системы, а не только для отдельных файлов.
Редактировать:
Я думаю, что некоторые версии NTFS также имеют что-то вроде возможности снимка. Windows 7 должна позволять вам играть с этим, но, как я слышал, он был удален в Windows 8.... если вы щелкнете правой кнопкой мыши по файлу (образ 500 ГБ), то должна быть какая-то опция, говорящая "предыдущие версии этого файла" ".
Еще один довольно сложный вариант: настроить виртуальную машину, поместить туда файл объемом 500 ГБ. Программное обеспечение виртуальной машины (например, VMware, Virtualbox, VirtualPC) также позволяет вам делать снимки (всего образа операционной системы, включая ваши 500 ГБ) и откатывать их обратно. Но это потребует установки другой ОС внутри виртуальной машины и все такое...