2013-04-16 16 views
7

Mam program, który może ginąć, gdy zabraknie miejsca na dysku, pisząc pewien plik, nie jestem pewien, czy tak jest.testowanie wolnego miejsca na dysku w Linuksie

Chciałbym go uruchomić i zobaczyć, ale mój serwer testowy w najbliższym czasie się nie skończy. Czy istnieje sposób, w jaki mogę kpić z tego zachowania? Wygląda na to, że nie ma sposobu na ustawienie limitu rozmiaru folderów/plików w systemie Ubuntu, a konfiguracja limitów użytkownika będzie procesem (z powodu uzyskania uprawnień).

Czy istnieje powszechny sposób testowania ta sytuacja?

Używam Ubuntu 12.04

+0

Czy masz zapasowe pamięci USB przydatna? Byłoby łatwo wypełnić jeden z nich. – JJJ

+2

Dlaczego nie wystarczy ustawić partycję, która jest naprawdę mała? –

Odpowiedz

20
  1. Utwórz plik o wielkości chcesz (tutaj 10 MB)

    dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000

  2. Zrób urządzenia zwrotnego z tego pliku

    losetup -f /home/qdii/test

  3. Format że urządzenie w systemie plików chcesz

    mkfs.ext4 /dev/loop0

  4. zamontować go gdziekolwiek chcesz (/mnt/test powinien istnieć)

    mount /dev/loop0 /mnt/test

  5. Skopiuj program na tej partycji i test

    cp /path/my/program /mnt/test && cd /mnt/test && ./program


Aby wiedzieć, które urządzenie losetup pętla utworzona, można użyć losetup -a

Nie zapomnij odmontować z umount /mnt/test.

Nie zapomnij posprzątać po użyciu urządzeń pętlowych, z losetup -D

Nie zapomnij, aby usunąć plik.

3

Inną możliwością jest, aby zmniejszyć odpowiednie dopuszczalne w setrlimit(2) syscall z RLIMIT_FSIZE lub z bashulimit polecenie wbudowane (stosując -f). Następnie write(2) zawiedzie z EFBIG

I można również ustawić kilka quotas na jakimś odpowiednim systemie plików, więc nie write(2) z EDQOT.

Jeśli chcesz prawdziwy błąd write(2), prawdopodobnie potrzebujesz systemu plików sprzężenia zwrotnego, na który odpowiada qdii.

BTW, naprawdę nie wiem jak "emulować" błąd EIO (może z jakimś systemem plików FUSE?).

Wiele programów obsługuje błędy write(2) (i prawie wszystkie powinny). Ale nie znam wielu programów, które bardzo różnie radzą sobie z różnymi błędami przy pomocy write(2). Większość programów obsługuje wszystkie błędy write(2) w ten sam sposób.

Jednak może trzeba obsłużyć EINTR i EWOULDBLOCK błędy inaczej: są to naprawić błędów, a ty zazwyczaj przerobić write(2) w późniejszym czasie.

+0

+1. Brzmi jak lepsze rozwiązanie niż moje. – qdii

+0

Nie, nie lepiej, ale inaczej. A twoje rozwiązanie daje prawdziwy błąd 'ENOSPC' .... –

1

Wystarczy użyć/dev/full, to podniesie błąd ENOSPC podczas próby zapisu do niego:

$ echo "Hello world" > /dev/full 
bash: echo: write error: No space left on device 
Powiązane problemy