Někdy je potřeba získat kompletní kopii svazku v rámci jednoho úložného systému (SÚS), ne snapshot, ale skutečný svazek. Ale ne vždy tento SÚS umožňuje udělat to vlastními prostředky. Zdá se, že jedinou možností je kopírovat přes server, ale při tom se celý objem dat musí pohybovat přes samotný server, síť do SÚS a porty SÚS, což zatěžuje všechny tyto komponenty. Existují však SCSI příkazy, které to mohou umožnit udělat v rámci samotného SÚS a pokud váš systém podporuje VAAI od VMware, je prakticky zaručeno, že je podporován příkaz XCOPY (EXTENDED COPY), který říká poli, co a kam kopírovat, aniž by do tohoto procesu byly zapojeny další komponenty. server a síť.
Zdá se, že to mělo být jednoduché, ale hned tak jsem nenašel žádné hotové skripty, musel jsem si vymyslet svůj vlastní. Pro OS serveru byl vybrán Linux a jako prostředek pro kopírování příkaz ddpt (http://sg.danny.cz/sg/ddpt.html). Pomocí této kombinace lze kopírovat jakékoliv svazky z jakékoliv OS, protože kopírování probíhá po blocích na straně SÚS. Protože je potřeba kopírovat po blocích a je nutné spočítat počet bloků, byla použita k tomu příkaz blockdev. Maximální velikost bloku byla získána experimentálně, s větším blokem ddpt ve skutečnosti nefungoval. Nakonec vznikl následující poměrně 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 ))
donePojďme udělat malou kontrolu! No, jak malou, 1TB soubor byl vytvořen a kontrolován md5sum nebylo rychlé 🙂
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: špatný typ systému, špatná volba, špatný superblok na /dev/mapper/mpathfs, chybějící kódová stránka nebo pomocný program, nebo jiná chyba.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Odstraňuji bloky zařízení: hotovo
Vytvářím souborový systém s 314572800 4k bloky a 78643200 inody
UUID souborového systému: bed3ea00-c181-4b4e-b52e-d9bb498be756
Zálohy superbloků uložené na blocích:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Alokace skupinových tabulek: hotovo
Zapisování tabulek inodů: hotovo
Zapisování superbloků a účetních informací systému souborů: 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: špatný typ systému, špatná volba, špatný superblok na /dev/mapper/mpathfr, chybějící kódová stránka nebo pomocný program, nebo jiná chyba.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#! /bin/bash
# první parametr = vstupní zařízení
# druhý parametr = výstupní zařízení
# velikost zařízení musí být stejná
# změna proměnné bs může snížit rychlost, maximální rychlost by měla být při bs=32768. 32768 je maximální nastavení, nižší nastavení by měla být počítána dělení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
real 11m30.878s
user 2m3.000s
sys 1m11.657sCo se v tu chvíli dělo na SYSTÉMU:

Pokračujeme s Linuxem.
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še fungovalo, ale testujte a používejte na vlastní riziko! Jako výchozí svazek je lepší brát snapshoty, pro začátek.
Zdroj: habr.com
