Kopírovanie zväzkov na SÚKL cez Linux server pomocou XCOPY

Niekedy je potrebné získať kompletnú kópiu zväzku v rámci jedného systému ukladania dát (SÚD), nie snapshot, klon, ale práve plnohodnotný zväzok. Avšak nie vždy SÚD umožňuje to spraviť vlastnými prostriedkami. Zdá sa, že jediný variant je kopírovať cez server, pričom celý objem dát prechádza cez samotný server, sieť do SÚD a porty SÚD, čím zaťažuje všetky tieto komponenty. Existujú však SCSI príkazy, ktoré umožňujú vykonať všetko v rámci samotného SÚD, a ak vaša sústava podporuje VAAI od VMware, je takmer 100% isté, že sa podporuje príkaz XCOPY (EXTENDED COPY), ktorý hovorí poľu, čo a kam skopírovať, bez zapojenia do tohto procesu server a sieť.

Zdá sa, že všetko by malo byť jednoduché, ale takto rýchlo som nenašiel žiadne hotové skripty, musel som si vytvoriť vlastný predpoklad. Pre OS servera bol zvolený Linux a ako prostriedok kopírovania príkaz ddpt (http://sg.danny.cz/sg/ddpt.html). S pomocou tejto kombinácie je možné kopírovať akékoľvek zväzky z akejkoľvek OS, pretože kopírovanie prebieha blokovo na strane SÚD. Pretože je potrebné kopírovať blokovo a počet blokov je potrebné vypočítať, príkaz blockdev bol použitý na výpočet počtu takýchto iterácií. Maximálna veľkosť bloku bola získaná empiricky, s väčším blokom ddpt nepracoval. Nakoniec vznikol nasledujúci celkom jednoduchý skript:

#!/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

Poďme spraviť malú kontrolu! No, ako malú, 1TB súbor sa vytváral a kontroloval pomocou md5sum nie najrýchlejšie 🙂

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: nesprávny typ fs, zlý parameter, zlý superblok na /dev/mapper/mpathfs, chýbajúca kódová stránka alebo pomocný program, alebo iná chyba.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Zrušenie blokov zariadenia: hotovo
Vytváranie súborového systému s 314572800 4k blokmi a 78643200 inode
UUID súborového systému: bed3ea00-c181-4b4e-b52e-d9bb498be756
Kópie superblokov uložené na blokoch:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Priradenie skupinových tabuliek: hotovo
Zápis inode tabuliek: hotovo
Zápis superblokov a informácií o účtovaní súborového systému: hotovo

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  /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: nesprávny typ fs, zlý parameter, zlý superblok na /dev/mapper/mpathfr, chýbajúca kódová stránka alebo pomocný program, alebo iná chyba.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#!/bin/bash
# prvý parameter = vstupné zariadenie
# druhý parameter = výstupné zariadenie
# veľkosť zariadenia musí byť rovnaká
# zmena hodnoty bs môže znížiť rýchlosť, maximálna rýchlosť by mala byť na bs=32768. 32768 je maximálne nastavenie, nižšie nastavenia by mali byť počítané delením 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
reálne    11m30.878s
užívateľ    2m3.000s
systém     1m11.657s

Čo sa v tom momente dialo na SÚS?

Kopírovanie zväzkov na SÚKL cez Linux server pomocou XCOPY
Pokračujme s Linuxom.

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#

Všetko sa podarilo, ale testujte a používajte na vlastné riziko! Ako pôvodný objem je lepšie brať snímky, aby ste začali.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster