Succede chì avete bisognu di ottene una copia completa di un voluminu in un sistema di almacenamentu di dati (DSS), micca una snapshot, un clone, ma un voluminu pienu. Ma u sistema d'almacenamiento ùn permette micca sempre questu per esse fattu internamente cù i so propiu mezi. Sembra chì l'unica opzione hè di copià à traversu u servitore, ma in questu casu tuttu u voluminu di dati serà guidatu da u servitore stessu, a rete à u sistema di almacenamento è i porti di almacenamento, carrichendu tutti questi cumpunenti. Ma ci sò cumandamenti SCSI chì ponu permette di fà tuttu in u sistema di almacenamentu stessu, è se u vostru sistema soporta VAAI da VMware, allora hè quasi 100% chì l'ordine XCOPY (COPIA EXTENDIDA) hè supportatu, chì dice à l'array ciò chì è induve copià, senza participà à u servitore di prucessu è a rete.
Sembra chì tuttu deve esse simplice, ma ùn pudia truvà micca scripts pronti subitu, cusì aghju avutu à reinventà a rota. Linux hè statu sceltu per u servitore OS, è u cumandamentu ddpt (http://sg.danny.cz/sg/ddpt.html) hè statu sceltu com'è strumentu di copia. Utilizendu sta cumminazione, pudete copià qualsiasi volumi da qualsiasi OS, postu chì a copia si trova bloccu per bloccu in u latu di u sistema di almacenamento. Siccomu hè necessariu di cupià bloccu per bloccu, è u numeru di blocchi deve esse cuntatu, u cumandimu blockdev hè stata utilizata per cuntà u numeru di tali iterazioni. A dimensione massima di u bloccu hè stata ottenuta sperimentalmente; ddpt ùn hà micca veramente travagliatu cù un grande bloccu. U risultatu era u seguente script abbastanza simplice:
#!/bin/bash
# first parameter = input device
# second parameter = output device
# device size must be the same
# changing bs variable can reduce speed, max speed should be at bs=32768. 32768 is max setting, lower settings should be calculated dividing by 2
set -o nounset
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
done
Facemu un pocu cuntrollu! Ebbè, cum'è un picculu, un schedariu 1TB ùn hè statu creatu rapidamente è verificatu da md5sum :)
root@sales-demo-05:/home/vasilyk# blockdev --getsz /dev/mapper/mpathfs
2516582400
root@sales-demo-05:/home/vasilyk# blockdev --getsz /dev/mapper/mpathfr
2516582400
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
mount: /xcopy_source: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfs, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 314572800 4k blocks and 78643200 inodes
Filesystem UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
total 16
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:/home/vasilyk# head -c 1T </dev/urandom > /xcopy_source/1TB_file
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:/home/vasilyk# umount /xcopy_source
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
mount: /xcopy_dest: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfr, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#!/bin/bash
# first parameter = input device
# second parameter = output device
# device size must be the same
# changing bs variable can reduce speed, max speed should be at bs=32768. 32768 is max setting, lower settings should be calculated dividing by 2
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
done
root@sales-demo-05:/home/vasilyk# time ./xcopy.sh /dev/mapper/mpathfs /dev/mapper/mpathfr
real 11m30.878s
user 2m3.000s
sys 1m11.657s
Ciò chì passava nantu à u sistema di almacenamentu in quellu mumentu:
Continuemu cù Linux.
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_dest/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
root@sales-demo-05:/home/vasilyk# md5sum /xcopy_source/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 /xcopy_source/1TB_file
root@sales-demo-05:/home/vasilyk# md5sum /xcopy_dest/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 /xcopy_dest/1TB_file
root@sales-demo-05:/home/vasilyk#
Tuttu hà travagliatu, ma pruvate è aduprà à u vostru risicu! Cum'è un voluminu fonte, hè megliu piglià snapshots, per principianti.
Source: www.habr.com