-
Crea un file della dimensione desiderata (qui 10 MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
-
Crea un dispositivo di loopback da questo file
losetup -f /home/qdii/test
-
Formatta quel dispositivo nel file system che desideri
mkfs.ext4 /dev/loopXXX
-
Montalo dove vuoi (
/mnt/test
dovrebbe esistere)sudo mount /dev/loopXXX /mnt/test
-
Copia il tuo programma su quella partizione e prova
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Sostituisci /dev/loopXXX
con il dispositivo ad anello losetup
creato, scoprilo con losetup -a
.
Al termine, non dimenticare di:
- smonta con
sudo umount /mnt/test
. - ripulisci i dispositivi del loop dopo l'uso, con
losetup -D /dev/loopXXX
- rimuovi il file.
Un'altra possibilità sarebbe quella di ridurre il limite appropriato con setrlimit(2) syscall con RLIMIT_FSIZE
o con il bash
ulimit incorporato (usando -f
). Quindi write(2) fallirebbe con EFBIG
E potresti anche impostare alcune quote su un file system appropriato, quindi write(2)
fallisce con EDQOT
.
Se vuoi il vero ENOSPC
errore a write(2)
probabilmente hai bisogno di un file system di loopback come ha risposto qdii.
A proposito, non so davvero come "emulare" il EIO
errore (forse con qualche filesystem FUSE?).
Molti programmi gestiscono write(2)
errori (e quasi tutti dovrebbero). Ma non conosco molti programmi che gestiscono in modo molto diverso i vari errori possibili con write(2)
. La maggior parte dei programmi gestisce tutti i write(2)
errori allo stesso modo.
Basta usare /dev/full, genererà l'errore ENOSPC quando proverai a scriverci:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device