1

Я восстанавливаю данные с поврежденного диска на 500 ГБ. Я копирую данные (раздел ext4) в файл изображения размером 500 ГБ. Всего процесс копирования занимает около 3 месяцев (да, месяцы). Поэтому я использую dd для терпеливого заполнения файла изображения. Сначала я добавляю чанк во временный файл, затем помещаю чанк в файл резервной копии и так ...

Проблема в том, что я хочу получить доступ к частично заполненному образу и восстановить некоторые данные до завершения процесса резервного копирования. Я смонтированный это только для чтения и используется photorec и testdisk и это нормально. Но я также хочу попробовать fsck (попытаться) восстановить раздел. После просмотра данных я бы хотел откатить изменения fsck и возобновить копирование.

Я знаю такие инструменты, как rsync , rdiff и git Производные (bup , git-annex annex ...), которые могут помочь. но мне интересно, есть ли способ сделать это на месте. Не брать еще 500 ГБ проиндексированных исходных данных.

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

  1. У меня есть original_500GB_file.img -> 500 ГБ данных
  2. Я изменяю 2 ГБ файла. Скажем, теперь у меня есть modified_500GB_file.img и другие вспомогательные файлы -> менее 600 ГБ данных (500 исходных + 2 измененных + некоторые метаданные)
  3. Когда я буду рад внести изменения, откатитесь и снова попадайте в пункт 1.

Как этого добиться? Было бы возможно с возможностями снимка BTRFS ?? (к сожалению, у меня есть файл в разделе NTFS)

Благодарю.

2 ответа2

2

Да, проще всего было бы использовать BTRFS или ZFS и их возможности моментальных снимков. Я не слишком много работал с BTRFS (сейчас только ZFS), но откат не должен быть проблемой.

(Я собираюсь написать на основе ZFS, но для BTRFS он должен работать примерно так же)

Прежде чем начать процесс восстановления, вы делаете "снимок" вашей текущей файловой системы, которая содержит образ объемом 500 ГБ.

Затем вы можете скопировать все данные, которые вы получили во время восстановления, в другое место (не в той же файловой системе, иначе они будут уничтожены во время отката!). Только изменения на 500 ГБ образ занимают место. Поэтому, если вы измените только 50 ГБ, вам потребуется ~ 550 ГБ внутри файловой системы.

Если вы закончили с этим частичным восстановлением, вы можете выполнить "откат" и вернуть файловую систему в состояние, в котором она была при "снимке".

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

Редактировать:

Я думаю, что некоторые версии NTFS также имеют что-то вроде возможности снимка. Windows 7 должна позволить вам поиграть с этим, но, как я слышал, он был удален в Windows 8 .... если вы щелкнете правой кнопкой мыши по файлу (образ 500 ГБ), то должна быть какая-то опция, говорящая "предыдущие версии этого файла" ».

Еще один довольно сложный вариант: настроить виртуальную машину, поместить туда файл объемом 500 ГБ. Программное обеспечение виртуальной машины (например, VMware, Virtualbox, VirtualPC) также позволяет вам делать снимки (всего образа операционной системы, включая ваши 500 ГБ) и откатывать их обратно. Но это потребует установки другой ОС внутри виртуальной машины и все такое ...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .