2

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

Я хотел бы создать файл tar (или что-то еще - я просто использую tar здесь, потому что это хорошо известный формат файла для хранения нескольких файлов), который можно было бы использовать, даже если бы у меня был доступ только к определенным фрагментам указанного файла. ,

Например, скажем, я записываю свою коллекцию mp3 и фотографий в tar-файл объемом 100 ГБ, а затем помещаю файл в какое-то долговременное хранилище. Позже я хочу получить доступ к конкретному mp3-файлу. Я не хочу загружать весь 100-гигабайтный файл tar только для того, чтобы получить один mp3. На самом деле, скажем, я не могу загрузить весь tar-файл объемом 100 ГБ. Вместо этого я хотел бы сказать «дай мне мегабайты с 10 по 19 из 100-гигабайтного tar-файла», а затем волшебным образом извлекать mp3 из этих 10 мегабайт.

Существует ли такой формат файла?

2 ответа2

1

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

Кроме того, если вы можете загружать архив только целыми блоками, а не любым произвольным числом байтов на любой границе, было бы полезно иметь tar который может начинать и заканчивать чтение с указанными смещениями в пределах блока. Мой собственный tar делает это, но это необычная особенность; не хватаю , что альтернатива была бы head и tail блока , чтобы извлечь только часть , которую вы хотите незамедленный tar

1

Я знаю, что уже поздно, не знаю, чем закончился ФП, но вот несколько советов:

Вы можете создать новый раздел, используя выбранную вами файловую систему, и скопировать все, что вы хотите сохранить, в этот раздел. Затем уменьшите раздел как можно меньше, чтобы сэкономить место. Затем вы можете использовать, например, dd для создания образа раздела, скажем, это /dev/sdc3 , в самом простом:

dd if=/dev/sdc3 of=backup_image.bin

Для Windows Google для "dd for windows" или найдите эквивалентную программу, которая может сделать побайтное изображение раздела или устройства.

Затем этот файл изображения может быть помещен в долговременное хранилище. Если у вас есть доступ к файлу и ваш носитель долгосрочного хранения поддерживает произвольный поиск, вы можете просто подключить файл напрямую, например:

sudo mkdir /media/backup
sudo mount /path/to/backup_image.bin /media/backup

Для Windows, Google для "образа раздела монтирования Windows".

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

Другой, более очевидный вариант - просто не объединять ваши файлы в один архивный файл. Создайте обычную файловую систему в вашем долговременном хранилище и просто скопируйте в нее файлы. Файловые системы уже предоставляют средства для доступа к определенным файлам без доступа к ненужным данным, вам, возможно, не придется изобретать велосипед.

Также существуют проприетарные форматы, подобные описанному вами, например, программное обеспечение для резервного копирования, такое как Acronis, может выполнять резервное копирование данных на сетевые диски или куда угодно, в ».TIB "файлы, которые можно просматривать (и извлекать данные), не требуя чтения всего файла. Я не знаю, поддерживает ли Acronis просмотр резервных копий файловой системы Linux/OSX, но я знаю, что он поддерживает этот тип просмотра для резервных копий FAT32 и NTFS. Я уверен, что есть другие.

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