Освободите неиспользуемое место с нулями (ext3, ext4)

Сообщение об ошибке No rule to make target dl_params.inc, needed by angfrc.o. средства, что Make-файл указывает файл dl_params.inc как зависимость для здания файла angfrc.o. Таким образом, необходимо так или иначе найти или создать dl_params.inc файл.

Поиск документации указывает, что этот файл должен содержать параметры ФОРТРАНА, требуемые DL_POLY. Руководство пользователя в разделе 7.1.1 объясняет, что должен быть a utility подпапка, содержащая программу PARSET который может использоваться для генерации такого файла параметра (названный new_params.inc по умолчанию). Вероятно, просто необходимо переименовать new_params.inc файл к dl_params.inc и поместите его в основную исходную папку.

Если ошибка сохранится затем, то Make-файл, очевидно, ожидает dl_params.inc файл где-то в другом месте и необходимо было бы более внимательно рассмотреть в Make-файле.

75
13.04.2017, 15:37
7 ответов

Такая утилита zerofree.

Из его описания:

Zerofree находит освобожденные, необнуленные блоки в ext2 или ext3 файловой системе и заполняет их, обнуляет. Это полезно, если устройство, на котором находится эта файловая система, является образом диска. В этом случае, в зависимости от типа образа диска, вторичная утилита может уменьшать размер образа диска после того, как zerofree был выполнен. Zerofree требует, чтобы файловая система была размонтирована или смонтирована только для чтения.

Обычный способ достигнуть того же результата (обнуляющий неиспользованные блоки) состоит в том, чтобы работать, "dd" действительно создают файл, полный, обнуляет, который занимает все свободное место на диске, и затем удалите этот файл. Это имеет много недостатков, которые облегчает zerofree:

  • это медленно
  • это заставляет образ диска (временно) вырасти до его максимальной степени
  • это (временно) использует все свободное пространство на диске, таким образом, другие параллельные действия записи могут перестать работать.

Zerofree был записан, чтобы быть выполненным от систем GNU/Linux, установленных как гостевые Ose в виртуальной машине. Если это не Ваш случай, Вам почти наверняка не нужен этот пакет.

ОБНОВЛЕНИЕ № 1

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

Описание: обнулите свободные блоки от ext2, ext3 и ext4 файловые системы, которыми Zerofree находит освобожденные блоки с содержанием ненулевого значения в ext2, ext3 или ext4 файловая система и заполняет их, обнуляет...

Другое использование

Другое приложение эта утилита должна сжать образы дисков, которые являются резервным копированием реального диска. Типичным примером этого является дамп SD-карты в BeagleBone или Raspberry Pi. После того как вакуумы были обнулены, образы резервной копии могут быть сжаты более эффективно.

79
27.01.2020, 19:31
  • 1
    Это - официальная страница инструмента intgat.tigress.co.uk/rmy/uml/index.html? Вы думаете, что безопасно использовать с ext4? –  Grzegorz Wierzowiecki 29.07.2012, 17:08
  • 2
    @GrzegorzWierzowiecki: да, это - страница, но для debian и друзей это уже находится в repos. Я раньше на ext4 разделе на виртуальном диске последовательно уменьшал изображение дискового файла и не имел никакой проблемы. –  enzotib 29.07.2012, 17:12
  • 3
    Это не эквивалентно сырой нефти dd метод в исходном вопросе, так как это не работает над смонтированными файловыми системами. –  jlh 04.03.2016, 12:10
  • 4
    способ использовать метод этого ответа, чтобы знать, является ли некоторый файл (файлы) текстовыми файлами: are_textfiles () { nontext=0; rem="return 0 if all args are files with terminating newline, or n [=number of non-textfiles]" ; for f in "$@" ; do [ -f "$f" ] && { tail -c 1 "$f" | od -An -vtc | grep "\\n" ;} >/dev/null 2>&1 || ((nontext++)) ; done ; return $nontext ; }. Используйте как: if ( are_textfiles this that otherthing ) ; then echo all are text files ; else echo "are_textfiles returned : $?" ; fi ---------121 переговоры по странице--------69393----zerofree о патче, который позволяет Вам сделать "файловую систему, смонтированы с zerofree опцией" так, чтобы это всегда нули удаляло файлы непрерывно. это требует перекомпиляции ядра затем? существует ли более легкий способ выполнить то же самое? –  endolith 14.10.2016, 19:33
  • 5
    Будьте осторожны - я потерял ext4 использование файловой системы zerofree на Astralinux (базирующийся Debian) … –  Hubbitus 24.11.2016, 00:20

sfill от безопасного - удаляют, может сделать это и несколько других связанных заданий.

например.

sfill -l -l -z /mnt/X

ОБНОВЛЕНИЕ № 1

Существует исходное дерево, которое, кажется, используется проектом ArchLinux на GitHub, который содержит источник для sfill который является инструментом, включенным в Безопасный пакет - Удаляют.

Также копия sfillстраница справочника здесь:

15
27.01.2020, 19:31
  • 1
    , что URL является устаревшим. никакая идея, где ее домашняя страница теперь (или даже если она все еще имеет один), но она упаковывается для debian и человечности. вероятно, другие дистрибутивы также. если Вам нужен исходный код, который может быть найден в архивах debian, если Вы не можете найти его больше нигде. –  cas 29.07.2012, 15:04
  • 2
    Устаревшая страница справочника URL исправлена теперь. Похож на "Digipedia", больше не вещь. –  mwfearnley 31.07.2017, 16:04

Если у вас e2fsprogs 1.42.9, то вы можете использовать e2image для создания образа раздела без свободного места в первую очередь , так что вы можете пропустить этап обнуления.

8
27.01.2020, 19:31

Резюме методов (упомянутых в этом вопросе и в других) для очистки неиспользуемого пространства на ext2/ext3/ext4:

Обнуление неиспользуемого пространства

Файловая система не монтируется

  • Если "диск", на котором находится ваша файловая система, имеет тонкое обеспечение (например. например, современный SSD с поддержкой TRIM, файл VM, формат которого поддерживает разреженность и т.д.) и ядро говорит, что блочное устройство понимает это, вы можете использовать e2fsck -E discard src_fs для удаления неиспользуемого пространства (требуется e2fsprogs 1.42.2 или выше).
  • Использование zerofree (например, zerofree src_fs) для явной записи нулей поверх неиспользуемых блоков.
  • Использование e2image -rap src_fs dest_fs для копирования только используемых блоков (новая файловая система должна находиться на обнуленном "диске", требуется e2fsprogs 1.42.9 или выше).

Файловая система смонтирована

  • Если "диск", на котором находится ваша файловая система, является тонкопрофильным (например, современный SSD с поддержкой TRIM, файл VM, формат которого поддерживает разреженность и т.д.), ваше ядро говорит, что блочное устройство понимает это, и, наконец, драйвер файловой системы ext поддерживает это, вы можете использовать fstrim /mnt/fs/, чтобы попросить файловую систему избавиться от неиспользуемого пространства.
  • Используя cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros (sfill из secure-delete использует эту технику). Этот метод неэффективен, не рекомендуется Тедом Ц'о (автором ext4), может не обнулить некоторые вещи и может замедлить будущие fsckы.

Размонтирование файловой системы даст лучшие результаты, чем ее монтирование. Дисконтирование, как правило, является самым быстрым методом, когда необходимо обнулить много ранее использовавшегося пространства, но использование zerofree после процесса дисконтирования иногда может обнулить немного больше (в зависимости от того, как дисконтирование реализовано на "диске").

Уменьшение размера файла образа

Образ находится в специальном формате VM

Вам потребуется использовать соответствующий инструмент создания образа диска (например, qemu-img convert src_image dst_image), чтобы обнуленное пространство было восстановлено и файл, представляющий образ, стал меньше.

Изображение - необработанный файл

Чтобы сделать файл разреженным (чтобы нулевые пробеги перестали занимать место), можно использовать одну из следующих техник:

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (требуется util-linux v2.25 или выше).

В наши дни проще использовать такой инструмент, как virt-sparsify, чтобы выполнить эти и другие шаги за один раз.

Источники

33
27.01.2020, 19:31

Вы можете использовать sfill . Это лучшее решение для тонких объемов.

0
27.01.2020, 19:31

если вы не хотите прибегать к дополнительным инструментам, этот метод должен быть быстрее, чемcat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1
2
27.01.2020, 19:31

Мне нравится:

#!/bin/sh
# take available size from string
DISKSIZE=`df / | grep / | cut -d " " -f 5`

#minus 10mb (you can do 1Mb)
TODELETE=$(( (DISKSIZE - 10000)/1000 ))

dd if=/dev/zero of=/zero.dump bs=1M count=$TODELETE 2> /dev/null
sync
rm -f /zero.dump
0
06.05.2020, 11:02

Теги

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