Как смоделировать ошибку переполнения диска в среде Windows?

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

Как я могу смоделировать эту ошибку в среде Windows?


person Alceu Costa    schedule 09.02.2009    source источник
comment
Кажется, люди упускают из виду, что вы написали тестовый сценарий. Для меня это означает, что вы ищете решение, которое работает независимо от среды (тестирование проводилось на другом компьютере).   -  person Leonidas    schedule 09.02.2009
comment
Леонидас: Спасибо за комментарии. Я обновил вопрос.   -  person Alceu Costa    schedule 09.02.2009


Ответы (12)


Можно попробовать записать на полную дискету.

Изменить:

В свете вашего отредактированного вопроса вы можете настроить общий сетевой ресурс без квоты на дисковое пространство и записать на него. Затем ошибка будет выдаваться независимо от вошедшего в систему пользователя или машины.

person Patrick McDonald    schedule 09.02.2009
comment
Или, из этого века, полноценный USB-диск. Переделайте его, если это необходимо. - person gregmac; 09.02.2009
comment
+1 за USB-диск/флешку/что угодно. Кто стал бы часами ждать реакции дискеты в 2009 году? - person Arve Systad; 09.02.2009
comment
У кого еще есть дискеты? Намерения были благими, простите, что я живу в 1990 году! :) - person Patrick McDonald; 09.02.2009
comment
Дискеты возмутительно дороги сейчас, когда они никому больше не нужны. - person ; 09.02.2009
comment
Мы остановились на использовании гибкого диска из-за ограничений нашей тестовой среды. Однако я думаю, что должно быть более элегантное решение этой проблемы. - person Alceu Costa; 15.06.2009
comment
Сетевой ресурс без квоты на дисковое пространство кажется более элегантным решением. Между тем, кому в этом веке нужны дисководы для гибких дисков для установки Windows 2003 на сервер с картой SCSI RAID, драйвер которой не встроен в Windows. Нам, глупым программистам, лучше знать. - person Windows programmer; 15.06.2009

Для Windows XP или более поздней версии:

Эта команда может получить количество свободного места на диске c:\:

for /f "usebackq tokens=1-5" %%A in (`dir c:\ ^| find "bytes free"`) do (
    set FREE_SPACE=%%C
)

При необходимости замените c:\ на свой диск.

Затем вы можете убрать немного места из этого значения, чтобы у вас было немного места для работы:

set /a FREE_SPACE=FREE_SPACE-1024

или сколько места вы хотите оставить свободным.

Вы можете использовать команду fsutil для создания файла, чтобы заполнить свободное место на диске:

fsutil file createnew c:\spacehog.dat %FREE_SPACE%

Запустите свой тест, записав на диск. После того, как вы напишете 1024 байта или около того, вам должно не хватить места.

person Patrick Cuff    schedule 09.02.2009
comment
Это то, что я использовал, и это сработало отлично. Моя установка XP — это виртуальная машина, поэтому я сделал снимок, fsutil, и выполнил свой тест. - person Jared Oberhaus; 03.06.2009
comment
Однако это сработает только в том случае, если свободного места меньше 2 ГБ. Арифметика cmd ограничена 32-битными целыми числами со знаком. Я думаю, в последнее десятилетие было бы довольно трудно найти это небольшое свободное пространство для работы. - person Joey; 27.04.2011

Загрузите и установите TrueCrypt. Затем вы можете создать виртуальный раздел любого размера (пару мегабайт), смонтировать его и заполнить парой документов.

person Rad    schedule 09.02.2009

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

person ryeguy    schedule 09.02.2009

Лучший вариант: потребительская программа Microsoft

Причины:

  • Он тестирует системный диск (по сравнению с отдельным диском)
  • Это быстро - запустите программу, чтобы заполнить диск моментально, остановитесь, когда она больше не нужна
  • Это просто - не нужно создавать и удалять файлы. Нет лишнего тестового раздела. Требуется установка, но после этого вы можете использовать простую команду.
  • Это доступно по сценарию

Шаги:

  1. Установите инструменты Windows Server 2003 Resource Kit (работает нормально на виндовс 7)
  2. cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools" (или там, где он установлен)
  3. consume.exe -disk-space

Вывод команды:

C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe
Universal Resource Consumer - Just an innocent stress program, v 0.1.0
Copyright (c) 1998, 1999, Microsoft Corporation

    consume RESOURCE [-time SECONDS]

RESOURCE can be one of the following:

    -physical-memory
    -page-file
    -disk-space
    -cpu-time
    -kernel-pool


C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe -disk-space
Consume: Message: Total disk space:         96049 Mb
Consume: Message: Free disk space:          14705 Mb
Consume: Message: Free per user space:      14705 Mb
Consume: Message: Attempting to use:        14705 Mb
Consume: Message: Reattempting to use:      14705 Mb
Consume: Message: Sleeping ...

Другие варианты:

  • В Windows 7 есть функция виртуального жесткого диска. В основном выполните следующие действия: «Управление компьютером» > «Управление дисками» > «Меню действий» > «Создать виртуальный жесткий диск» > щелкните правой кнопкой мыши диск и «Инициализировать» > щелкните правой кнопкой мыши.
  • Создавайте большие файлы (должны быть мгновенными), пока ваш диск не будет заполнен, с помощью команды оболочки или Генератор фиктивных файлов. Другая программа: SpaceHog.
person Peter Tseng    schedule 08.06.2012
comment
Функция виртуального жесткого диска в Windows 7 помогла мне. Мне просто нужно было проверить ошибку, чтобы создать соответствующую логику обработчика. Я создал виртуальный жесткий диск размером 10 МБ. Бухгалтерия WIndows занимает около 7 МБ на виртуальном жестком диске, поэтому, когда я пытаюсь записать на диск файл размером более 3 МБ, он выдает ошибку. - person Snapman; 14.04.2015

Создайте дополнительный раздел, заполните его хламом, а затем запустите там свою программу.

person Mizipzor    schedule 09.02.2009
comment
Есть ли способ написать сценарий, который автоматизирует создание раздела и конфигурацию? - person Alceu Costa; 09.02.2009

Вы можете настроить небольшой виртуальный диск и писать на него. См. эту страницу для некоторых бесплатные виртуальные диски.

person M4N    schedule 09.02.2009

Создайте новую учетную запись пользователя, установите для нее квоту и используйте runas для запуска приложения от имени этого пользователя. (не совсем то же самое, что и полный диск, но должно иметь аналогичные последствия.)

person Community    schedule 09.02.2009

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

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

Если тест должен быть сложным интеграционным тестом, тогда можно автоматизировать виртуальную машину, развернуть приложение и затем заполнить оставшееся пространство рекурсивным сценарием.

person Ed Blackburn    schedule 09.02.2009

Лучшее, что работает на каждом компьютере (поскольку тестирование не обязательно проводится на выделенной машине), — это ramdrive/ramdisk, который можно настроить на лету.

На данный момент найден только Virtual Disk SDK см. здесь, который, возможно, можно включить в процесс buzild.

Другая идея: может быть, ваши тестовые компьютеры можно настроить для записи в общую сетевую папку (которая заполнена) в качестве диска?

person Leonidas    schedule 09.02.2009

Я внес изменения в приведенный выше сценарий, чтобы сделать его совместимым с Windows 7... По сути, добавив переключатель «/-c» в оператор for. Это удаляет разделитель тысяч, так как fsutil не любит его в инструкции.

for /f "usebackq tokens=1-5" %%A in (`dir /-c d:\ ^| find "bytes free"`) do (set FREE_SPACE=%%C)
fsutil file createnew d:\largefile.txt %FREE_SPACE%
person Derek    schedule 25.04.2011

использовать очень маленькую цель iscsi

person johnny    schedule 09.02.2009