divna velikost souboru

Alexandr Malusek malusek na hroch.ujf.cas.cz
Pátek Leden 8 12:29:53 CET 1999


davids na iol.cz (David Sauer) writes:

> Martin> Ja bych rekl, ze to je typicky priklad tak receneho deraveho
> souboru.
>
> Ano, ale -k ma vypisovat v KB, -b v bytech _obsazenou velikost_ na
> disku, ale cislo by melo byt stejne (tedy v -b ~1024x vetsi). Nevidim
> duvod, proc by mel du -s vypsat neco jineho nez du -k, pokud tam tedy
> neni chyba ...

Ano, je tam chyba. Mam RH 5.1 s fileutils-3.16-9 a tam se to chova
stejne spatne.  Zkusil jsem fileutils-4.0.tar.gz - tam se to jiz chova
OK.

V nejake diskusni skupine jsem nasel jednoduchy priklad, jak pod
Linuxem vytvorit deravy (sparse) soubor:

$ dd if=/dev/zero of=testfile bs=1k count=0 seek=100
0+0 records in
0+0 records out
$ du -k testfile   # fileutils-3.16-9
0       testfile
$ du -b testfile   # fileutils-3.16-9
102400  testfile   # chyba
$ du -b testfile   # fileutils-4.0
0       testfile   # OK

Nemyslim, ze by dd muselo vzdy zafungovat tak, jako v teto
ukazce. Proto uvadim i jednoduchy program, ktery by mel zafungovat
vzdy - je z neho videt jak deravy soubor vznika.

$ cat sparse.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define SKIP 100000L

int main()
{
  char c = 'z';
  int fd;

  if ((fd = open("x", O_CREAT|O_WRONLY,S_IWUSR|S_IRUSR)) == -1)
    {
      perror("");
      exit(1);
    }
  
  lseek(fd, SKIP, SEEK_SET);
  write(fd, &c, 1);
  return 0;
}

--
A. Malusek  (malusek na ujf.cas.cz)
UJF AV CR


Další informace o konferenci Linux