2

У меня есть вопрос относительно различий между df -h и du -bs. Я видел несколько вопросов по этому поводу, но проблема всегда заключалась в том, что df -h сообщал о более занятом пространстве, чем du -bs. У меня противоположная проблема:

[root@CDPPRIM01 oracle-dbf]# du -bs
336178610176    .

[root@CDPPRIM01 datafiles]# df -h | grep dbf
/dev/sda2             360G  272G   85G  77% /opt/oracle-dbf

[root@CDPPRIM01 datafiles]# ls -la
total 284550000
drwxrwxr-x 2 oracle oinstall        4096 Apr  9 14:13 .
drwxr-xr-x 4 root   root            4096 Apr  3 10:33 ..
-rw-r----- 1 oracle dba          9748480 Apr 11 17:01 control01.ctl
-rw-r----- 1 oracle dba          9748480 Apr 11 17:01 control02.ctl
-rw-r----- 1 oracle dba        968892416 Apr 11 16:20 pn310_admin_DATA22.dbf
-rw-r----- 1 oracle dba        104865792 Apr 11 16:20 pn310_admin_DATA.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 16:20 pn310_DATA11.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 17:00 pn310_DATA12.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 17:00 pn310_DATA13.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 16:20 pn310_DATA14.dbf
-rw-r----- 1 oracle dba       5242888192 Apr 11 17:01 pn310_DATA15.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 17:00 pn310_DATA.dbf
-rw-r----- 1 oracle dba       5798633472 Apr 11 16:20 pn310_dwe_DATA20.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 16:20 pn310_dwe_DATA.dbf
-rw-r----- 1 oracle dba        104865792 Apr  3 10:42 pn310_dwe_TEMP.dbf
-rw-r----- 1 oracle dba       5263859712 Apr  3 11:28 pn310_dwe_temp_TEMP9.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 16:20 pn310_ep_DATA16.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 16:20 pn310_ep_DATA17.dbf
-rw-r----- 1 oracle dba      32212262912 Apr 11 16:20 pn310_ep_DATA18.dbf
-rw-r----- 1 oracle dba       9437192192 Apr 11 16:20 pn310_ep_DATA19.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 16:50 pn310_ep_DATA.dbf
-rw-r----- 1 oracle dba        104865792 Apr  3 10:42 pn310_ep_TEMP.dbf
-rw-r----- 1 oracle dba      16001277952 Apr  3 11:27 pn310_ep_temp_TEMP8.dbf
-rw-r----- 1 oracle dba        104865792 Apr 11 06:00 pn310_TEMP.dbf
-rw-r----- 1 oracle dba      16001277952 Apr 11 17:01 pn310_temp_TEMP7.dbf
-rw-r----- 1 oracle dba      11811168256 Apr 11 16:51 pn310_xmp_DATA21.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 17:00 pn310_xmp_DATA.dbf
-rw-r----- 1 oracle dba        104865792 Apr  3 10:42 pn310_xmp_TEMP.dbf
-rw-r----- 1 oracle dba       2042634240 Apr  3 11:29 pn310_xmp_temp_TEMP10.dbf
-rw-r----- 1 oracle dba        566239232 Apr 11 17:00 sysaux01.dbf
-rw-r----- 1 oracle dba       4802486272 Apr 11 16:57 sysaux_DATA24.dbf
-rw-r----- 1 oracle dba        754982912 Apr 11 16:58 system01.dbf
-rw-r----- 1 oracle dba       4613742592 Apr 11 17:00 system_DATA23.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 10 23:07 temp01.dbf
-rw-r----- 1 oracle dba       1073750016 Apr  3 10:38 temp02.dbf
-rw-r----- 1 oracle dba       3221233664 Apr  3 11:31 temp_TEMP11.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 17:01 undotbs01.dbf
-rw-r----- 1 oracle dba       1073750016 Apr 11 17:00 undotbs02.dbf
-rw-r----- 1 oracle dba      13958651904 Apr 11 17:01 undotbs1_DATA26.dbf
-rw-r----- 1 oracle dba          5251072 Apr 11 16:20 users01.dbf
-rw-r----- 1 oracle dba       1068507136 Apr 11 16:20 users_DATA25.dbf

При добавлении всех файлов мы получаем 336178593792, что в ГБ равно:336178593792/1024/1024/1024 = 313 ГБ, что больше, чем 272 ГБ, о которых сообщает df -h.

Я уже сделал umount и fsck, чтобы проверить раздел, и он чистый. Кто-нибудь знает, что может быть причиной этого поведения?

2 ответа2

1

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

Чтобы проверить наличие разреженных файлов, используйте invoke ls с ключами -s (показать пространство, занимаемое на жестком диске) и -k (показать размеры в блоках по кибибайту).

Пример вывода:

$ df -H /dev/sda1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       118G   38G   75G  34% /
$
$ dd if=/dev/zero of=1GB-normal bs=1GB count=1 # normal file (1 GB)
$
$ df -H /dev/sda1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       119G   38G   75G  34% /
$
$ dd if=/dev/zero of=1GB-sparse bs=1GB count=0 seek=1GB # sparse file (1 GB)
$
$ df -H /dev/sda1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       119G   38G   75G  34% /
$
$ ls -lks
total 976568
976568 -rw-rw-r-- 1 dennis dennis 976563 Apr 11 13:05 1GB-normal
     0 -rw-rw-r-- 1 dennis dennis 976563 Apr 11 13:06 1GB-sparse

Поскольку разреженный файл не занимает (почти) физическое пространство на диске, вывод df не изменяется после его создания.

1

Я не совсем уверен, что здесь происходит, но я могу дать вам несколько советов.

  1. du -b подразумевает --apparent-size . На странице человека du

    --apparent-size
          print  apparent  sizes,  rather than disk usage; although the apparent
          size is usually smaller, it may be larger due to holes in (`sparse')
          files,  internal  fragmentation, indirect blocks, and the like
    -b, --bytes
          equivalent to `--apparent-size --block-size=1'
    
  2. Я не уверен, как oracle работает с файлами базы данных, но меня не удивит, если некоторые из них действительно будут редкими. Я думаю, что это наиболее вероятная причина, см. Здесь для обсуждения того, как это может повлиять на du .

  3. На этой странице есть хорошее объяснение некоторых различий между способами расчета использования диска двумя программами.

  4. Немного более актуальной информации со страницы руководства df :

    -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
    Display values are in units of the first available  SIZE  from
    --block-size,  and the DF_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE
    environment variables.  Otherwise, units default to 1024 bytes
    (or 512 if POSIXLY_CORRECT is set).
    
    SIZE  may be (or may be an integer optionally followed by) one
    of following: KB 1000, K 1024, MB 1000*1000, M 1024*1024,  and
    so on for G, T, P, E, Z, Y.
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .