Ich habe ein Programm, das möglicherweise abstürzt, wenn nicht mehr genügend Speicherplatz zur Verfügung steht, um eine bestimmte Datei zu schreiben. Ich bin mir nicht sicher, ob das der Fall ist.
Ich würde es gerne ausführen und sehen, aber mein Testserver wird nicht bald keinen Platz mehr haben. Kann ich dieses Verhalten irgendwie verspotten? Es sieht nicht so aus, als ob es eine Möglichkeit gibt, eine Ordner- / Dateigrößenbeschränkung in Ubuntu festzulegen, und das Einrichten von Benutzerkontingenten wird ein Prozess sein (aufgrund der Erlangung von Berechtigungen)
Gibt es eine allgemeine Möglichkeit, diese Situation zu testen?
Ich benutze Ubuntu 12.04
Erstellen Sie eine Datei der gewünschten Größe (hier 10 MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
Erstellen Sie ein Loopback-Gerät aus dieser Datei
losetup -f /home/qdii/test
Formatieren Sie das Gerät im gewünschten Dateisystem
mkfs.ext4 /dev/loop0
Stellen Sie es dort ein, wo Sie möchten ( /mnt/test
sollte existieren)
mount /dev/loop0 /mnt/test
Kopieren Sie Ihr Programm auf diese Partition und testen Sie
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Um zu wissen, welches loopup-Gerät erstellt wurde, können Sie losetup -a
Vergessen Sie nicht, die Bereitstellung mit umount /mnt/test
zu lösen.
Vergessen Sie nicht, Schleifengeräte nach der Verwendung mit losetup -D
Vergessen Sie nicht, die Datei zu entfernen.
Eine andere Möglichkeit wäre, das entsprechende Limit mit setrlimit (2) syscall zu reduzieren mit RLIMIT_FSIZE
oder mit dem bash
ulimit eingebaut (mit -f
). Dann würde write (2) mit EFBIG
Und Sie könnten auch einige Kontingente auf ein geeignetes Dateisystem setzen, also write(2)
schlägt mit EDQOT
fehl.
Wenn Sie den echten ENOSPC
Fehler auf write(2)
setzen möchten, benötigen Sie wahrscheinlich ein Loopback-Dateisystem, wie es von qdii .
Übrigens, ich weiß nicht wirklich, wie man den EIO
Fehler "emuliert" (vielleicht mit einem FUSE Dateisystem?) .
Viele Programme behandeln write(2)
Fehler (und fast alle sollten). Aber ich kenne nicht viele Programme, die die verschiedenen möglichen Fehler mit write(2)
sehr unterschiedlich behandeln. Die meisten Programme behandeln alle write(2)
Fehler auf die gleiche Weise.
Sie müssen jedoch möglicherweise EINTR
und EWOULDBLOCK
Fehler anders behandeln: Dies sind behebbare Fehler, und in der Regel wiederholen Sie die write(2)
zu einem späteren Zeitpunkt.
Verwenden Sie einfach / dev / full, es wird den ENOSPC-Fehler auslösen, wenn Sie versuchen, darauf zu schreiben:
%Vor%Erstellen Sie eine Datei der gewünschten Größe (hier 10 MB)
%code%
Erstellen Sie ein Loopback-Gerät aus dieser Datei
%code%
Formatieren Sie das Gerät im gewünschten Dateisystem
%code%
Stellen Sie es dort ein, wo Sie möchten ( %code% sollte existieren)
%code%
Kopieren Sie Ihr Programm auf diese Partition und testen Sie
%code%
Um zu wissen, welches loopup-Gerät erstellt wurde, können Sie %code%
verwendenVergessen Sie nicht, die Bereitstellung mit %code% zu lösen.
Vergessen Sie nicht, Schleifengeräte nach der Verwendung mit %code%
zu säubernVergessen Sie nicht, die Datei zu entfernen.
Ich habe ein Programm, das möglicherweise abstürzt, wenn nicht mehr genügend Speicherplatz zur Verfügung steht, um eine bestimmte Datei zu schreiben. Ich bin mir nicht sicher, ob das der Fall ist.
Ich würde es gerne ausführen und sehen, aber mein Testserver wird nicht bald keinen Platz mehr haben. Kann ich dieses Verhalten irgendwie verspotten? Es sieht nicht so aus, als ob es eine Möglichkeit gibt, eine Ordner- / Dateigrößenbeschränkung in Ubuntu festzulegen, und das Einrichten von Benutzerkontingenten wird ein Prozess sein (aufgrund der Erlangung von Berechtigungen)
Gibt es eine allgemeine Möglichkeit, diese Situation zu testen?
Ich benutze Ubuntu 12.04
Verwenden Sie einfach / dev / full, es wird den ENOSPC-Fehler auslösen, wenn Sie versuchen, darauf zu schreiben:
%Vor%