[gull] Disques de tailles différentes et Raid-0 (striping)

Leopoldo Ghielmetti leopoldo.ghielmetti at a3.epfl.ch
Wed Aug 6 19:07:08 CEST 2008


Il giorno mer, 06/08/2008 alle 18.01 +0200, Félix Hauri ha scritto:
> Bonjour,

salut,

> Que se passe-t-il si j'associe en raid-0 2 disques de taille différente?
> A priori, cela fonctionne, en ce sens que j'obtiendrais bien un raid
> présentant une taille totale égale à la somme des tailles inclues, mais
> du point de vue du ``striping''...
> 
> Pennons un exemple: deux disques sda 1Mo sdb 1.5Mo...
> # dd if=/dev/zero bs=1024 count=1024 of=sda
> 1024+0 records in
> 1024+0 records out
> 1048576 bytes (1.0 MB) copied, 0.00558941 seconds, 188 MB/s
> # dd if=/dev/zero bs=1024 count=1536 of=sdb
> 1536+0 records in
> 1536+0 records out
> 1572864 bytes (1.6 MB) copied, 0.00910629 seconds, 173 MB/s
> 
> # losetup -f sda
> # losetup -f sdb
> # losetup  /dev/loop/0 
> /dev/loop/0: [0905]:327044 (sda)
> # losetup  /dev/loop1
> /dev/loop1: [0905]:327045 (sdb)
> 
> ... que l'on associe en raid-0:
> # mdadm --create /dev/md9 --level 0 --raid-devices 2 /dev/loop{0,1}
> mdadm: array /dev/md9 started.

Pourquoi est-ce que tu utilises des loop devices? Il y a un avantage par
rapport à accéder directement à une partition sur le disque voir au
disque tout entier?

> Bon, on s'accroche!
> # i=0
> # while printf "%16d\n%494s\n" $i ' ' |\
>     dd of=/dev/md9 seek=$i 2>log ;do   \
>         echo -en \\r$((i++))\\e[K    
>     done;echo
> 4863
> 
> (ou bien:
>  # i=0;
>  # while printf "%16d\n%494s\n" $i ' ';do
>        printf >/dev/stderr "\r%6d\e[K" $((i++));
>      done |\
>      dd of=/dev/md9 
>   4991dd: writing to `/dev/md9': No space left on device
>    4865+0 records in
>    4864+0 records out
>   2490368 bytes (2.5 MB) copied, 1.87245 seconds, 1.3 MB/s
> 
> Bref...
> 
> # mdadm --stop /dev/md9 
> # losetup -d /dev/loop0
> # losetup -d /dev/loop1
> # strings sda | grep [0-9] >sda.nrs
> # strings sdb | grep [0-9] >sdb.nrs
> # diff sd[ab].nrs |\
>     grep ^[\<\>]  |\
>     sort -k2  -n  |\
>     sed s/\ .*$// |\
>     tr \<\> ab    |\
>     uniq -c       |\
>     column
>     128 a           128 a           128 a           128 a           128 a
>     128 b           128 b           128 b           128 b           128 b
>     128 a           128 a           128 a           128 a           128 a
>     128 b           128 b           128 b           128 b           128 b
>     128 a           128 a           128 a           128 a           128 a
>     128 b           128 b           128 b           128 b          1152 b
> 
> CQFD. Le striping s'opère naturellement par tranches régulière
> tant que le mirroir est possible...
>  Le ``reste'' n'est pas ``stripé''.

Expérience interessante en effet. Le résultat parait logique aussi, tant
qu'on peut striper on stripe (comme ça on a le maximum des performances)
ensuite on fait ce qu'on peut.

ciao, Leo





More information about the gull mailing list