[Linuxtrent] Re: copiare partizioni: dimensioni diverse

  • From: "Daniele P." <linuxtrent-79252@xxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Sat, 28 Oct 2006 22:19:37 +0200

On Saturday 28 October 2006 17:15, Emanuele Olivetti wrote:
> Ciao,
> ho copiato il contenuto di una partizione in un'altra partizione piu'
> grande (non potevo modificarne le dimensioni) utilizzando "rsync -a
> sorgente destinazione". Se utilzzo "du" per avere informazioni sullo spazio
> occupato noto
> che lo spazio occupato dalle due directory e' differente!
>
> Filesystem           1K-blocks      Used Available Use% Mounted on
> /dev/hda4              3844864   3496832    152720  96% /sorgente
> /dev/hda12             4845992   3185212   1660780  66% /destinazione
>
> e la differenza e' sostanziale: circa 300Mb.

Sei sicuro che questo sia l'output di du?

> L'unica differenza tra le due partizioni e' che la prima (hda4) e'
> ext3, mentre la seconda (hda12) e' reiserfs.
>
> All'atto pratico, confrontando il contenuto delle due directory con "diff
> -r" risultano identiche (e ci mancherebbe che rsync sbagliasse!).

Sarebbe carino vedere se hai hard link e sparse file nella sorgente
e le opzioni esatte di rsync che hai usato.
Poi pure rsync ha avuto i suoi bachi, ma non sembra questo il caso.
diff -r non è sempre significativo, per esempio si imbroglia con i soft link,
non spiego come l'ho scoperto, ringrazio ancora il backup.

> Dove sta l'inghippo? Dove sono finiti i 300Mb in questione?

Che né du né df misurano quello che tu pensi che misurino, nel modo in cui tu
pensi lo misurino.
In pratica le misure dello spazio occupato, per du di un generico sottoalbero 
dipendono almeno
  * dalla dimensione del blocco del filesystem sottostante
$ mkfs.ext2 -b 1024 1024
[...]
$ mkfs.ext2 -b 4096 4096
[...]
$ echo 'test'  > mount-1024/test
$ cp mount-1024/test  mount-4096/
$ du -chs mount-1024/test mount-4096/test
1.0K    mount-1024/test
4.0K    mount-4096/test
5.0K    total
  * da come il filesystem sottostante conta la dimensione di una directory
$ mkdir dir-on-xfs
$ mkdir dir-on-ext3
$ du -b dir-on-xfs
6       dir-on-xfs
$ stat dir-on-xfs | grep Size
Size: 6               Blocks: 0          IO Block: 4096   directory
$ du -b dir-on-ext3
4096    dir-on-ext3
$ stat dir-on-ext3 | grep Size
Size: 4096            Blocks: 8          IO Block: 4096   directory
  * da come poni la domanda, nel caso siano presenti multipli hard link
$ echo 'test' > a/test
$ du -b ./a/test
5       ./a/test
$ du -b ./a
22      ./a
$ ln a/test b/link
$ du -b ./b/link
5       ./b/link
$ du -b ./b
11      ./b
$ du -b
22      ./a
6       ./b
50      .

Scusa ma ora non ho tempo di dilungarmi sulla spiegazione degli esempi,
spero siano sufficientemente chiari.
Per questi motivi nella man page di du la breve descrizione recita
"estimate file space usage".
Per altro, secondo me la man page è pure sbagliata per --apparent-size

Anche df soffre della dipendenza dal filesystem sottostante, per almeno:
  * da come viene contato il journal per lo spazio usato
  * anche i blocchi riservati entrano nel conto per lo spazio libero
e forse pure da qualcos'altro.

Parlando un po' più in generale controllare con du un rsync non serve
a molto, piuttosto usa un md5sum o un sha1sum.

Scusate l'italiano molto stentato...

Buona serata,
Daniele P.
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: