Почему диск клонируется, использование dd занимают больше места на цели, чем исходное изображение?

Я соглашаюсь, что awk является лучшим решением. Можно сделать это только в ударе с несколькими другими инструментами:

cut -d , -f 2,6,7,8 filename | {
    read header
    tr , $'\t' <<< "$header"
    while IFS=, read -r id num4 num5 num6; do
        # bash can only do integer arithmetic
        if [[ $(bc <<< "$num4 >= 4.0") = 1 ]]; then
           printf "%s\t%s\t%s\t%s\n" "$id" "$num4" "$num5" "$num6"
        fi
    done
}
1
04.02.2014, 02:02
1 ответ

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

Программа может пропустить блок где угодно в файле, не просто вначале. Таким образом, "файлы с дырами".

Наличие резервного взрыва в размере весьма характерно для linux/unix, но преступник обычно - что-то как файл базы данных. Я знаю, что много приложений для Android использует Sqlite3, возможно, это - причина.

2
27.01.2020, 23:38
  • 1
    Хм, пронижите меня это, затем: если data.img изображение файловой системы, содержащей редкие файлы (как базы данных SQlite3), что относительно того, чтобы копировать его с dd заставляет те дыры поднять различные суммы пространства на различных блочных устройствах? Почему это занимает так много места после копии? Если те дыры присутствуют в .img файл, почему они не поднимают столько же пространства перед копией блочного уровня? –  Andrew 03.02.2014, 19:49
  • 2
    @Andrew, не то, чтобы изображенная файловая система содержит редкие файлы, но это data.img самостоятельно редкий файл. Вы не упоминаете, куда это прибыло из. –  cjm 03.02.2014, 20:16
  • 3
    @cjm Мои извинения, это генерировало использование AOSP (Проект Открытого исходного кода Android) make-файлы. А именно, названное мусорное ведро make_ext4fs в системном каталоге. Кажется, что я должен буду сделать некоторое рытье в это util, чтобы видеть, может ли быть настроен. –  Andrew 03.02.2014, 20:28
  • 4
    @Andrew - Вы делаете правильное замечание. Извините, я, кажется, неправильно читал Ваш вопрос. Я должен был перечитать его три раза для понимания комментария. Извините за неправильный-directrion потенциал. –  Bruce Ediger 03.02.2014, 21:48
  • 5
    @Andrew dd не делает копии блочного уровня. Это делает копию уровня байта. (Нет никакого стандартного инструмента, который делает копию блочного уровня.) Использование cp --sparse=always сделать редкую копию. –  Gilles 'SO- stop being evil' 04.02.2014, 01:27

Теги

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