Рассматривайте tmpfs как устройство для grep - PullRequest
0 голосов
/ 27 сентября 2018

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

  1. Создайте файл с некоторой известной строкой внутри.
  2. Моя программа удаляет файл.
  3. Я ищу строку вдиск, на котором находился файл.Для этого я заставляю grep рассматривать диск как кучу необработанных данных:
$ grep -a -o -c 'some_string_to_be_found' /dev/sda1

Тест на самом деле работает как положено (находит строку, если я удаляю файл вручную, а не еслимоя программа удаляет его).

Проблема в том, что размер диска может быть большим, поэтому для завершения теста потребуется огромное количество времени.Кроме того, метка для диска может отличаться на разных машинах.

Поэтому я думаю о том, как использовать виртуальную файловую систему вместо.Создайте диск в ОЗУ, используя tmpfs:

pc:/mnt$ mkdir tmpfs
pc:/mnt$ chmod 777 tmpfs/
pc:/mnt$ mount -t tmpfs -o size=50M tmpfs /mnt/tmpfs/

создайте / заполните / удалите файл, а затем попытайтесь найти его содержимое, используя что-то вроде:

$ grep -a -o -c 'some_string_to_be_found' /dev/tmpfs

Проблема заключается вчто это приводит к

grep: / dev / tmpfs: Нет такого файла или каталога

Так что вопрос: возможно ли использовать tmpfs в качестве устройства, иличитать необработанную память, выделенную для виртуальной файловой системы?

1 Ответ

0 голосов
/ 27 сентября 2018

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

Мы будем обрабатывать файлкак устройство.Алгоритм следующий:

  1. Создать пустой файл с указанным размером:

    # touch storage_file
    # truncate -s 10M storage_file
    
  2. Создать файловую систему внутри этого файла:

    # mkfs.ext4 storage_file
    
  3. Теперь мы можем создать устройство из этого файла и смонтировать его как обычный диск:

    # losetup /dev/loop0 storage_file
    # mkdir /mnt/loopfs
    # mount -o loop /dev/loop0 /loopfs
    
  4. Вот и все.Мы можем обработать файл как устройство.Создать / удалить произвольные файлы / каталоги внутри него.И с grep по /dev/loop0 работает как положено, без обработки всего физического запоминающего устройства, ползая только внутри storage_file.

...