Огромный файл Docker и поведение tar

460
Milleu

Когда я сделал резервную копию в моей системе Linux с tar -czv, я заметил, что процесс застрял очень долго /var/lib/docker/devicemapper/devicemapper/data(намного дольше, чем должна занять копия всех моих изображений и контейнеров), в то время как файл результатов не увеличивается.

Проверяя этот размер файла ls -lh, он выводит мне 100Gразмер 20Gраздела. Что это за файл и что tarздесь делает?

3

1 ответ на вопрос

2
Kamil Maciorowski

Похоже, у вас там редкий файл .

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

Есть этот ответ, который говорит:

/var/lib/docker/devicemapper/devicemapperКаталог содержит файлы разреженных петель, которые содержат все другие данные, которые докер монтируют.

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

Существует опция командной строки, tarкоторая сообщает о редких файлах. Это описано здесь .

-S
--sparse

В вашем случае очень важно следующее:

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

Я предполагаю, что вы не использовали эту --sparseопцию, поэтому, когда дело доходит до извлечения, ваш 100Gфайл будет создан как не разреженный и не поместится в 20Gраздел.

Похожие вопросы