исчезающее место на диске

Установка, обновление, настройка Linux

Модераторы: Olej, adminn

Jack
Интересующийся
Сообщения: 2
Зарегистрирован: 21 мар 2012, 15:04
Контактная информация:

исчезающее место на диске

Непрочитанное сообщение Jack » 21 мар 2012, 15:13

Приветствую. Проблема такого рода, непонятно куда за короткий срок исчезло несколько десятков ГБ с раздела /usr
Причем сумарный объем файлов в примонтированой директории значительно меньше
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p7 60G 1.5G 55G 3% /
/dev/cciss/c0d2p1 542G 314G 200G 62% /home
/dev/cciss/c0d3p1 542G 339G 175G 66% /home2
/dev/cciss/c0d1p2 258G 2.8G 242G 2% /backup
/dev/cciss/c0d0p6 9.7G 454M 8.8G 5% /tmp
/dev/cciss/c0d0p2 97G 77G 16G 83% /usr
/dev/cciss/c0d0p5 97G 14G 79G 15% /var
/dev/cciss/c0d1p1 284G 35G 235G 13% /var/lib/mysql
/dev/cciss/c0d0p1 289M 22M 252M 9% /boot
tmpfs 12G 0 12G 0% /dev/shm

В самой же /usr

# du -h /usr
13G /usr

куда исчезли 64 ГБ вообще непонятно.

Что это может быть? проблема с диском? с квотами?

Спасибо.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: исчезающее место на диске

Непрочитанное сообщение Olej » 21 мар 2012, 17:04

Jack писал(а):Проблема такого рода, непонятно куда за короткий срок исчезло несколько десятков ГБ с раздела /usr
Круто :lol:

Давайте разбираться...

1. за какой "короткий срок"(с)?
вы раньше эту картину наблюдали? какое время назад? и что было?
Jack писал(а): Причем сумарный объем файлов в примонтированой директории значительно меньше
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p7 60G 1.5G 55G 3% /
/dev/cciss/c0d2p1 542G 314G 200G 62% /home
/dev/cciss/c0d3p1 542G 339G 175G 66% /home2
/dev/cciss/c0d1p2 258G 2.8G 242G 2% /backup
/dev/cciss/c0d0p6 9.7G 454M 8.8G 5% /tmp
/dev/cciss/c0d0p2 97G 77G 16G 83% /usr
/dev/cciss/c0d0p5 97G 14G 79G 15% /var
/dev/cciss/c0d1p1 284G 35G 235G 13% /var/lib/mysql
/dev/cciss/c0d0p1 289M 22M 252M 9% /boot
tmpfs 12G 0 12G 0% /dev/shm
2. Что за система? (дисковые обозначения очень напоминающие Solaris или Minix3 ;-) )
Какой дистрибутив?
... и вообще, давайте сюда:

Код: Выделить всё

$ u_n_a_m_e -a
Jack писал(а): В самой же /usr
# du -h /usr
13G /usr
куда исчезли 64 ГБ вообще непонятно.
df & du могут мерять не совсем одно и то же самое...

Код: Выделить всё

[olej@notebook ~]$ df
Файловая система     1K-блоков      Исп  Доступно  Исп% смонтирована на
/dev/mapper/vg_notebook-lv_root
                      56424484  35980704  17587964  68% /
tmpfs                  1026912       952   1025960   1% /dev/shm
/dev/sda1               198337    147562     50775  75% /boot
[olej@notebook ~]$ sudo du -hs /boot
139M	/boot
Это похоже, но не совсем одно и то же.

df - по числу занятых секторов, du - по суммированию через inode ... а что там с ссылками? а с циклическими ссылками? (это из области предположений, я сейчас сразу не вспомню).

Jack
Интересующийся
Сообщения: 2
Зарегистрирован: 21 мар 2012, 15:04
Контактная информация:

Re: исчезающее место на диске

Непрочитанное сообщение Jack » 21 мар 2012, 17:41

Проблема решена.
Все оказалось гораздо проще . Решилось перезапуском служб. nginx или apache держал открытым логи которые либо удалились либо прошла ротация. Из за этого были такие расхождения между показаниями df и du

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: исчезающее место на диске

Непрочитанное сообщение Olej » 21 мар 2012, 19:14

Jack писал(а):nginx или apache держал открытым логи которые либо удалились либо прошла ротация. Из за этого были такие расхождения между показаниями df и du
Всё это наверное так, или даже скорее всего так.
Но вот что интересно, вопрос хороший!, есть смысл до конца разобраться:

- В то время, когда, скажем, apache написал уже лог-файл на 10Gb - эти 10Gb, реально записанные на диск, должны видеть все: df, du, ls ...

- В принципе, если du "не видит" размер не закрытых (close()) файлов то могла бы возникать ситуация df >> du ;

- Но может быть и обратная ситуация: df << du ... когда du "не видит", что файл записан "с дырками", разреженный файл: когда записано 10 байт вначале, потом lseek() на 10Gb и записаны 10 байт в конце. Такой файл будет видится ls & du как 10G байт, а по du он будет занимать 20 байт ;-) (скорее всего, 2 сегмента диска: начальный и конечный). Эта история описана хорошо у Р.Стивенса:
Изображение
Это сильно интересно, и я сейчас это проверю примером.

Как мне кажется, таких разреженных файлов не могло быть в Windows, MS-DOS, etc. ?
А в UNIX/Linux это не должно зависеть от вида файловой системы: ext2/3/4, zfs etc. ?

Это несколько причин, по которым данные du и df могут совершенно не совпадать.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: исчезающее место на диске

Непрочитанное сообщение Olej » 21 мар 2012, 20:23

Olej писал(а):Это несколько причин, по которым данные du и df могут совершенно не совпадать.
Вот немного перефразированный пример из Стивенса:

Код: Выделить всё

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>

unsigned long shift = 40;

int main ( int argc, char **argv ) {
   char buf1[] = "abcdefghij",
        buf2[] = "ABCDEFGHIJ";
   int fd;
   if( argc > 1 && atoi( argv[ 1 ] ) > strlen( buf1 ) + strlen( buf2 ) )
      shift = atoi( argv[ 1 ] ) - strlen( buf2 );
   if( ( fd = creat( "file.hole", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ) ) < 0 )
      printf( "create error: %m" ), exit( EXIT_FAILURE );
   if( write( fd, buf1, strlen( buf1 ) ) != strlen( buf1 ) )
      printf( "buf1 write error: %m" ), exit( EXIT_FAILURE );
   if( lseek( fd, shift, SEEK_SET ) == -1 )
      printf( "lseek error: %m" ), exit( EXIT_FAILURE );
   if( write( fd, buf2, strlen( buf2 ) ) != strlen( buf2 ) )
      printf( "buf2 write error: %m" ), exit( EXIT_FAILURE );
   close( fd );
   exit( EXIT_SUCCESS );
}
Вот что из этого получается:

Код: Выделить всё

[olej@notebook hole]$ ls --help | grep '\-\-size'
  -s, --size                 print the allocated size of each file, in blocks
[olej@notebook hole]$ df
Файловая система     1K-блоков      Исп  Доступно  Исп% смонтирована на
/dev/mapper/vg_notebook-lv_root
                      56424484  36139836  17428832  68% /
tmpfs                  1026912       952   1025960   1% /dev/shm
/dev/sda1               198337    147562     50775  75% /boot

[olej@notebook hole]$ ./hole 10000000000
[olej@notebook hole]$ ls -ls file.hole
16 -rw-r--r-- 1 olej olej 2147483647 Мар 21 19:09 file.hole
[olej@notebook hole]$ df
Файловая система     1K-блоков      Исп  Доступно  Исп% смонтирована на
/dev/mapper/vg_notebook-lv_root
                      56424484  36139852  17428816  68% /
tmpfs                  1026912       952   1025960   1% /dev/shm
/dev/sda1               198337    147562     50775  75% /boot
[olej@notebook hole]$ du -hs
40K     .
>2Gb файл (и ls его таким видит!) занимает на диске всего 16 секторов.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: исчезающее место на диске

Непрочитанное сообщение Olej » 21 мар 2012, 21:43

Olej писал(а):>2Gb файл (и ls его таким видит!) занимает на диске всего 16 секторов.
И скопируем такой дырявый файл в обычный:

Код: Выделить всё

[olej@notebook hole]$ ./hole 1000000000
[olej@notebook hole]$ wc -c file.hole
1000000000 file.hole
[olej@notebook hole]$ time cp file.hole file.nohole
real    0m3.508s
user    0m0.341s
sys     0m1.493s
[olej@notebook hole]$ ls -ls file.*
16 -rw-r--r-- 1 olej olej 1000000000 Мар 21 19:27 file.hole
60 -rw-r--r-- 1 olej olej 1000000000 Мар 21 19:29 file.nohole
[olej@notebook hole]$ du -hs file.*
16K     file.hole
60K     file.nohole
Так что с размерами vs занимаемое место - всё очень непросто.
И сильно зависит от того чем мерять.

Ответить

Вернуться в «Администрирование Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя